:::
5-3-2 讓樣板檔接收二維陣列
- 修改
index_content.tpl,將資料套入樣板{foreach $all_news as $news} <div class="row"> <div class="col-md-9"> <h3><a href="index.php?op=show&id={$news.id}">{$news.title}</a></h3> <p>{$news.author}</p> <p>{$news.date} 點閱數:{$news.views}</p> <p>{$news.content|truncate:180:"..."}</p> </div> <div class="col-md-3"> {if is_file(reset($news.files))} <img src="{reset($news.files)}" alt="" class="img-thumbnail" style="object-fit: cover; width: 100%; height: 200px;"> {else} <img src="https://picsum.photos/seed/picsum/400/400" alt="" class="img-thumbnail" style="object-fit: cover; width: 100%; height: 200px;"> {/if} </div> </div> {/foreach} - 先用
foreach迴圈將$all_news的內容一筆一筆抽出,抽出後的$news就是一維陣列,也就是一筆文章資料 - 將所有要呈現的部份都改成
{$news.欄位名稱}: - 我們順便在標題及縮圖部份,將連結路徑填上,如此便能連到單一文章頁面
<h3><a href="index.php?op=show&id={$news.id}">{$news.title}</a></h3>- 其中
op代表讓程式操作的下一個動作(自行定義的) id則是文章編號- 這是
get的傳遞方法,用?接參數,多組參數間用&連接起來
- 其中
- 文章內容只要載入180個字左右,所以用Smarty提供的
truncate方法來擷取之<p>{$news.content|truncate:180:"..."}</p> - 縮圖的部份,用
reset($news.files)可以取出陣列的第一筆資料的值,即圖檔路徑。 - 我們先用
is_file(reset($news.files))判斷圖檔路徑是否真有個檔案?若有,則顯示之。若無利用假圖(https://picsum.photos/)來取代之。{if is_file(reset($news.files))} <img src="{reset($news.files)}" alt="" class="img-thumbnail" style="object-fit: cover; width: 100%; height: 200px;"> {else} <img src="https://picsum.photos/seed/picsum/400/400" alt="" class="img-thumbnail" style="object-fit: cover; width: 100%; height: 200px;"> {/if}reset()及is_file()其實都是PHP的函數,reset()用來取得陣列第一個元素的值;is_file()則用來判斷是否是一個檔案。 - 如此便初步完成資料的樣板套用!

5-3-1 將所有文章變成二維陣列