dede如何获取三级栏目?

99ANYc3cd6
预计阅读时长 15 分钟
位置: 首页 DEDE建站 正文

在DedeCMS中获取三级栏目的方法

在DedeCMS中获取三级栏目可以通过多种方式实现,以下是几种常用的方法:

使用channel标签递归调用

{dede:channelartlist typeid='0'}
    <div class="level1">
        <h2>{dede:field name='typename'/}</h2>
        {dede:channel type='son' noself='yes'}
            <div class="level2">
                <h3><a href="[field:typelink/]">[field:typename/]</a></h3>
                {dede:channel type='son' noself='yes'}
                    <div class="level3">
                        <a href="[field:typelink/]">[field:typename/]</a>
                    </div>
                {/dede:channel}
            </div>
        {/dede:channel}
    </div>
{/dede:channelartlist}

使用SQL查询直接获取三级栏目

{dede:sql sql='SELECT 
    c1.id as id1, c1.typename as name1, c1.reid as reid1,
    c2.id as id2, c2.typename as name2, c2.reid as reid2,
    c3.id as id3, c3.typename as name3, c3.reid as reid3
FROM dede_arctype c1
LEFT JOIN dede_arctype c2 ON c2.reid = c1.id
LEFT JOIN dede_arctype c3 ON c3.reid = c2.id
WHERE c1.reid = 0 AND c1.ishidden <> 1
ORDER BY c1.id ASC, c2.id ASC, c3.id ASC'}
    <div class="level1">
        <h2>[field:name1/]</h2>
        [field:global name=auto runphp='yes']
            $str = '';
            $d2 = '';
            $d3 = '';
            $arr = explode('@', @me);
            if($arr[1]) $d2 = '<div class="level2"><h3><a href="'.GetOneTypeUrl($arr[1]).'">'.$arr[2].'</a></h3>';
            if($arr[3]) $d3 = '<div class="level3"><a href="'.GetOneTypeUrl($arr[3]).'">'.$arr[4].'</a></div>';
            @me = $d2.$d3.'</div>';
        [/field:global]
    </div>
{/dede:sql}

使用自定义函数获取三级栏目

在include/common.func.php中添加自定义函数:

function GetThreeLevelClass($typeid) {
    global $dsql;
    $str = '';
    // 获取一级栏目
    $dsql->SetQuery("SELECT id,typename,reid FROM dede_arctype WHERE id=$typeid OR reid=$typeid ORDER BY id");
    $dsql->Execute();
    while($row = $dsql->GetArray()) {
        if($row['reid'] == 0) {
            $str .= '<div class="level1"><h2>'.$row['typename'].'</h2>';
            // 获取二级栏目
            $dsql2->SetQuery("SELECT id,typename,reid FROM dede_arctype WHERE reid=".$row['id']);
            $dsql2->Execute();
            while($row2 = $dsql2->GetArray()) {
                $str .= '<div class="level2"><h3><a href="'.GetOneTypeUrl($row2['id']).'">'.$row2['typename'].'</a></h3>';
                // 获取三级栏目
                $dsql3->SetQuery("SELECT id,typename,reid FROM dede_arctype WHERE reid=".$row2['id']);
                $dsql3->Execute();
                while($row3 = $dsql3->GetArray()) {
                    $str .= '<div class="level3"><a href="'.GetOneTypeUrl($row3['id']).'">'.$row3['typename'].'</a></div>';
                }
                $str .= '</div>';
            }
            $str .= '</div>';
        }
    }
    return $str;
}

然后在模板中调用:

{dede:field name='typeid' function='GetThreeLevelClass(@me)'/}

注意事项

  1. 确保栏目结构正确,一级栏目的reid为0,二级栏目的reid为对应一级栏目的id,三级栏目的reid为对应二级栏目的id
  2. 如果栏目较多,建议使用缓存提高性能
  3. 根据实际需求调整CSS样式和HTML结构
  4. 对于大型网站,可能需要分页或限制显示数量

方法可以根据您的具体需求选择使用,方法一适合简单场景,方法二适合需要精确控制的情况,方法三适合需要复杂逻辑处理的场景。

-- 展开阅读全文 --
头像
织梦表单如何精准获取来源网址?
« 上一篇 03-01
dede下载站整套模板哪里有?
下一篇 » 03-01
取消
微信二维码
支付宝二维码

目录[+]