帝国cms调用所有一级和对应二级栏目

admin 102 0
在帝国CMS中调用所有一级栏目及对应二级栏目,可通过SQL查询结合模板标签实现,首先查询所有一级栏目(parentid=0),获取其classid,再根据classid查询对应的二级栏目(parentid=一级栏目classid),使用[e:loop]标签循环一级栏目,内嵌[e:loop]循环二级栏目,通过classidparentid关联数据,关键代码示例:外层循环[e:loop={'select classid,classname from phome_enewsclass where parentid=0 order by myorder',0,24,0}],内层循环[e:loop={'select classid,classname from phome_enewsclass where parentid='.$bqr[classid].' order by myorder',0,24,0}],分别输出一级和二级栏目名称及链接,实现层级调用。

帝国CMS调用所有一级栏目及其对应二级栏目的实用方法

在网站建设中,导航栏是用户快速获取内容的重要入口,对于使用帝国CMS建站的用户来说,调用所有一级栏目并展示其对应的二级栏目,是实现多级导航的常见需求,本文将详细介绍如何通过帝国CMS的标签和PHP代码,实现一级栏目与对应二级栏目的联动调用,帮助大家轻松构建清晰的网站导航结构。

准备工作:了解帝国CMS栏目表结构

在实现调用之前,我们先简单了解帝国CMS的栏目数据存储逻辑,栏目信息主要存储在[!db.pre!]enewsclass数据表中([!db.pre!]为表前缀,默认为phome_),核心字段包括:

  • classid:栏目ID,唯一标识一个栏目;
  • bclassid:父栏目ID,顶级栏目(一级栏目)的bclassid为0,二级栏目的bclassid为对应一级栏目的classid
  • classname:栏目名称;
  • classurl:栏目链接;
  • myorder:栏目排序数字,数字越小越靠前;
  • classimg:栏目图片(可选);
  • smalltext:栏目简介(可选)。

理解这些字段后,我们就能通过SQL查询精准获取一级栏目及其二级栏目数据,在实际开发中,我们还可以根据需要筛选特定状态的栏目(如islast字段判断是否为最终栏目)。

实现步骤:调用一级栏目与对应二级栏目

获取所有一级栏目

一级栏目是顶级栏目,其bclassid字段值为0,我们可以通过帝国CMS的数据库查询函数empire->query()执行SQL语句,获取所有一级栏目数据,并按myorder字段排序(确保栏目顺序符合后台设置)。

循环一级栏目,获取对应二级栏目

遍历一级栏目数据,对每个一级栏目,以其classid为条件,查询bclassid等于该classid的所有记录,即获取该一级栏目下的所有二级栏目,同样按myorder排序,确保二级栏目的显示顺序符合预期。

输出HTML结构

将获取到的一级栏目和二级栏目数据,按照HTML列表结构(如<ul><li>)输出,形成多级导航,通常一级栏目作为父级列表项(<li>),二级栏目作为嵌套的子列表(<ul>),在实际应用中,我们还可以添加CSS类名,便于后续样式定制。

添加交互效果(可选)

对于更高级的用户,可以考虑添加JavaScript交互效果,如鼠标悬停时显示二级菜单,点击展开/收起等,提升用户体验。

完整代码示例

以下是实现一级栏目及对应二级栏目调用的完整PHP代码,可直接嵌入帝国CMS模板文件(如首页模板index.html、列表页模板list.html等)中。

使用原生PHP + 帝国CMS数据库函数

<?php
// 1. 获取所有一级栏目(bclassid=0,按myorder排序)
$first_class_sql = "select classid,classname,classurl from [!db.pre!]enewsclass where bclassid=0 and showclass=0 order by myorder asc";
$first_class_query = $empire->query($first_class_sql);
$first_class_list = [];
while ($first_class_row = $empire->fetch($first_class_query)) {
    $first_class_list[] = $first_class_row;
}
// 2. 循环一级栏目,输出HTML结构
if (!empty($first_class_list)) {
    echo '<ul class="nav-first">'; // 一级栏目容器,可添加自定义样式
    foreach ($first_class_list as $first_class) {
        $classid = $first_class['classid'];
        $classname = $first_class['classname'];
        $classurl = $first_class['classurl'];
        // 3. 获取当前一级栏目下的所有二级栏目
        $second_class_sql = "select classid,classname,classurl from [!db.pre!]enewsclass where bclassid={$classid} and showclass=0 order by myorder asc";
        $second_class_query = $empire->query($second_class_sql);
        $second_class_list = [];
        while ($second_class_row = $empire->fetch($second_class_query)) {
            $second_class_list[] = $second_class_row;
        }
        // 4. 输出一级栏目列表项
        echo '<li class="nav-item">';
        echo '<a href="' . $classurl . '" title="' . $classname . '">' . $classname . '</a>';
        // 5. 如果存在二级栏目,输出二级栏目列表
        if (!empty($second_class_list)) {
            echo '<ul class="nav-second">'; // 二级栏目容器,可添加自定义样式
            foreach ($second_class_list as $second_class) {
                $second_classname = $second_class['classname'];
                $second_classurl = $second_class['classurl'];
                echo '<li><a href="' . $second_classurl . '" title="' . $second_classname . '">' . $second_classname . '</a></li>';
            }
            echo '</ul>';
        }
        echo '</li>';
    }
    echo '</ul>';
}
?>

使用帝国CMS灵动标签(推荐,更简洁)

帝国CMS的灵动标签([e:loop])是模板调用的利器,通过灵动标签可以更简洁地实现上述功能,无需直接写PHP代码,以下是使用灵动标签的实现方案:

<ul class="nav-first">
    <!-- 调用一级栏目(bclassid=0,按myorder排序) -->
    [e:loop={"select classid,classname,classurl from [!db.pre!]enewsclass where bclassid=0 and showclass=0 order by myorder asc",0,24,0}]
        <li class="nav-item">
            <a href="<?=$bqr[classurl]?>" title="<?=$bqr[classname]?>"><?=$bqr[classname]?></a>
            <!-- 调用当前一级栏目下的二级栏目 -->
            [e:loop={"select classid,classname,classurl from [!db.pre!]enewsclass where bclassid=<?=$bqr[classid]?> and showclass=0 order by myorder asc",0,24,0}]
                <li><a href="<?=$bqr[classurl]?>" title="<?=$bqr[classname]?>"><?=$bqr[classname]?></a></li>
            [/e:loop]
        </li>
    [/e:loop]
</ul>

高级应用:添加栏目图片和简介

如果需要在导航中显示栏目图片和简介,可以修改代码如下:

<?php
// 获取一级栏目(包含图片和简介)
$first_class_sql = "select classid,classname,classurl,classimg,smalltext from [!db.pre!]enewsclass where bclassid=0 and showclass=0 order by myorder asc";
$first_class_query = $empire->query($first_class_sql);
$first_class_list = [];
while ($first_class_row = $empire->fetch($first_class_query)) {
    $first_class_list[] = $first_class_row;
}
// 输出HTML结构
if (!empty($first_class_list)) {
    echo '<ul class="nav-first">';
    foreach ($first_class_list as $first_class) {
        $classid = $first_class['classid'];
        $classname = $first_class['classname'];
        $classurl = $first_class['classurl'];
        $classimg = $first_class['classimg'];
        $smalltext = $first

标签: #一级栏目 #二级栏目