6.
讓導覽列有作用
一、加入分類設定方便日後調整
- 導覽列的選項目前是寫死的,但其實寫成活的更好,也就是可以方便的調整分類項目。
- 首先,我們可以在
config.php 檔中新增分類的設定,如:
// 分類設定
$categories = [
1 => '校園日誌',
2 => '榮譽榜',
3 => '媒體新聞',
];
其中索引就是我們存入資料庫的 category,也就是一個數字,這樣的好處是日後若想微調文字,就不用修改一大堆資料。
二、將分類設定送到樣板
- 由於導覽列、發布界面的樣板中都會用到該變數,所以,我們可以在
index.php 及 admin.php 中,將之也送到樣板檔去。
$smarty->assign('op', $op);
$smarty->assign('categories', $categories);
$smarty->display('index.tpl');
- 最後修改導覽列樣板
templates/index_nav.tpl,我們利用Smarty的 {foreach} 來將分類讀出,並將每個選項加上連結到 index.php?category=分類編號,好讓 index 列表可以根據 category 來做文章的篩選:
<ul class="navbar-nav me-auto mt-2 mt-lg-0">
{foreach $categories as $category_id => $category_title}
<li class="nav-item">
<a class="nav-link" href="index.php?category={$category_id}">{$category_title}</a>
</li>
{/foreach}
</ul>
- 此時,只要導覽列有正確出現即可:

- 但目前點擊分類時,該分類並不會用比較亮的顏色呈現,所以,我們要加上
active 的樣式給目前的選項,繼續修改 templates/index_nav.tpl:
<a class="nav-link {if isset($smarty.get.category) && $smarty.get.category==$category_id}active{/if}" href="index.php?category={$category_id}">{$category_title}</a>
其中的 $smarty.get.category 是 Smarty 的用法,也就是直接抓取用 get 傳遞的 category 變數(網址上的 category 變數) 來跟我們從 {foreach} 迴圈取出的分類編號比對,如果一致,就加上 active 樣式,如此,就完成了。不過要先用 isset() 來確定是否有該 get 變數,否則會有錯誤訊息出現喔。
- 看起來就正常了!
