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()
則用來判斷是否是一個檔案。
- 如此便初步完成資料的樣板套用!