Thinkphp5模型類實現無限級分類


    // 找一個分類所有子分類的ID
    public function getChildren($catId)
    {
        // 取出所有的分類
        $data = $this->select();
        // 遞歸從所有的分類中挑出子分類的ID
        return $this->_getChildren($data, $catId, TRUE);
    }
    /**
     * 遞歸從數據中找子分類
     */
    private function _getChildren($data, $catId, $isClear = FALSE)
    {
        static $_ret = array();  // 保存找到的子分類的ID
        if($isClear)
            $_ret = array();
        // 循環所有的分類找子分類
        foreach ($data as $k => $v)
        {
            if($v['parent_id'] == $catId)
            {
                $_ret[] = $v['id'];
                // 再找這個$v的子分類
                $this->_getChildren($data, $v['id']);
            }
        }
        return $_ret;
    }
    // 獲取樹形數據
    public function getTree()
    {
        $data = $this->select();
        return $this->_getTree($data);
    }
    private function _getTree($data, $parent_id=0, $level=0)
    {
        static $_ret = array();
        foreach ($data as $k => $v)
        {
            if($v['parent_id'] == $parent_id)
            {
                $v['level'] = $level;  // 用來標記這個分類是第幾級的
                $_ret[] = $v;
                // 找子分類
                $this->_getTree($data, $v['id'], $level+1);
            }
        }
        return $_ret;
    }
    
    protected function _before_delete(&$option)
    {
        /************** 修改原$option,把所有子分類的ID也加進來,這樣TP會一起刪除掉 *******/
        // 先找出所有子分類的ID
        $children = $this->getChildren($option['where']['id']);
        $children[] = $option['where']['id'];
        $option['where']['id'] = array(
            0 => 'IN',
            1 => implode(',', $children),
        );
    }
<form method="post" action="" name="listForm" onsubmit="">
    <div class="list-div" id="listDiv">
        <table cellpadding="3" cellspacing="1">
            <tr>
                <th>分類名稱</th>
                <th>操作</th>
            </tr>
            <?php foreach ($data as $k => $v): ?>
            <tr class="tron">
                <td><?php echo str_repeat('-', 8*$v['level']) . $v['cat_name']; ?></td>
                <td align="center">
                    <a href="<?php echo U('edit?id='.$v['id']); ?>">修改</a>
                    <a onclick="return confirm('確定要刪除嗎?');" href="<?php echo U('delete?id='.$v['id']); ?>">刪除</a>
               </td>
            </tr>
            <?php endforeach; ?>
        </table>
    </div>
</form>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM