利用 ThinkPHP 的模型查詢與遞歸函數,僅需十幾行代碼即可實現無限級分類下拉選單。本範例以商品分類為例,展示如何從資料庫讀取層級結構並生成帶縮排的 <option> 選項。
recursiveAssort()/**
* 無限級遞歸分類
* @param int $assortPid 父級分類 ID
* @param string $tag 層級縮排符號(預設空)
* @return string HTML option 字串
*/
function recursiveAssort($assortPid, $tag = '') {
$assort = M('goods_class')
->where("class_pid = $assortPid")
->field('class_id, class_name')
->select();
$tree = '';
foreach ($assort as $value) {
$tree .= '<option value="' . $value['class_id'] . '">' . $tag . $value['class_name'] . '</option>';
$tree .= recursiveAssort($value['class_id'], $tag . ' ');
}
return $tree;
}
在控制器或視圖中呼叫:
<select name="category">
<?php echo recursiveAssort(0); ?>
</select>
即可生成完整的分類樹狀下拉選單,頂層分類無縮排,子層級以 (全形空格)遞增縮排。
| 欄位 | 型別 | 說明 |
|---|---|---|
| class_id | int | 主鍵,自增 |
| class_name | varchar | 分類名稱 |
| class_pid | int | 父級 ID,頂層為 0 |
<ul><li> 結構,只需調整字串拼接邏輯此極簡實作非常適合中小型專案快速導入,代碼清晰易維護。