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 變數,否則會有錯誤訊息出現喔。
- 看起來就正常了!