請用PHP8設計一個函數,可以傳入大量字串,並傳回指定字數的字串,需能支援中英文。
index.php
的最後面:
function truncate_string(string $string, int $length, string $append = '...'): string
{
// 如果字串長度小於或等於指定長度,直接返回原字串
if (mb_strlen($string, 'UTF-8') <= $length) {
return $string;
}
// 使用 mb_substr 截取指定長度的字串
$truncated = mb_substr($string, 0, $length, 'UTF-8');
// 檢查最後一個字符是否為空白字符
$lastChar = mb_substr($truncated, -1, 1, 'UTF-8');
if (mb_strwidth($lastChar, 'UTF-8') === 0) {
$truncated = mb_substr($truncated, 0, -1, 'UTF-8');
}
// 添加省略號
return $truncated . $append;
}
all()
函數,多加一個 $row['summary']
的元素:
function all(int $start = 0, int $limit = 10): array
{
global $pdo;
...略...
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
...略...
$row['media_json'] = convertMediaToJson($row['media']);
$row['main_image'] = array_key_first($row['media']);
$row['thumb_image'] = reset($row['media']);
$row['summary'] = truncate_string($row['news_content'], 200);
$results[] = $row;
}
return $results;
}
templates/main.tpl
樣板檔,非第一則新聞時,其 content
值為 $news.summary
:
{foreach $all_news as $key => $news}
{if $key==0}
{include file="article.tpl" slider=true title=$news.news_title date=$news.report_date school=$news.school_name count=$news.views author=$news.publisher content=$news.news_content link=$news.related_link thumb=""}
{else}
{include file="article.tpl" slider=false title=$news.news_title date=$news.report_date school=$news.school_name count=$news.views author=$news.publisher content=$news.summary link=$news.related_link thumb=$news.thumb_image}
{/if}
{/foreach}
templates/article.tpl
,點標題連結就可以進入觀看該新聞:
<article class="my-4">
{if $slider}
{include file="slider.tpl"}
{/if}
<h2><a href="index.php?id={$news.id}" class="text-decoration-none">{$title}</a></h2>
...略...
</article>