欢迎光临 - 我的站长站,本站所有资源仅供学习与参考,禁止用于商业用途或从事违法行为!

帝国cms教程

帝国CMS循环子栏目及子栏目下面的数据

帝国cms教程 我的站长站 2020-04-05 共181人阅读

帝国CMS循环子栏目及子栏目数据调用方法

在使用帝国cms制作网站模板时,有时候需要一次性循环输出某个父栏目下面的所有子栏目,并且在每个子栏目下面继续调用该栏目中的最新数据。

这种需求可以通过e:loop结合帝国CMS数据库查询实现。下面通过一段实际代码,介绍如何循环父栏目ID为1的子栏目,并同时调用每个子栏目下面的最新数据。

一、帝国CMS循环子栏目代码

[e:loop={"select classid,classname,classpath from [!db.pre!]enewsclass where bclassid=1 and showclass=0 order by myorder,classid asc",0,24,0}]
<div class="links_tx">
<ul>
<h3><a class="g_fl" href="<?=$public_r[newsurl].$bqr[classpath]?>" target="_blank"><?=$bqr[classname]?></a></h3>
<?php
    $newbook=$empire->query("select title,titleurl,id from www_11px_cn_ecms_weixin where classid='".$bqr[classid]."' order by newstime desc limit 8");
    //取得该分类下的最新数据
    while($r=$empire->fetch($newbook)) {
    ?>
 <li><a href="<?=sys_ReturnBqTitleLink($r)?>" title="<?=$r[title]?>"><?=$r[title]?></a></li>
 <?php
     }
    ?>

二、e:loop循环子栏目

这段代码首先通过e:loop查询帝国cms栏目enewsclass,筛选父栏目ID为1的子栏目。

select classid,classname,classpath
from [!db.pre!]enewsclass
where bclassid=1
and showclass=0
order by myorder,classid asc

其中bclassid=1表示当前查询的是父栏目ID为1下面的子栏目

showclass=0用于按照当前代码的条件筛选栏目,具体字段含义建议结合当前帝国CMS版本的栏目表结构进行确认。

查询结果按照myorderclassid进行排序,这样可以按照栏目的排序值依次输出。

三、调用子栏目链接

循环子栏目后,可以使用$bqr[classpath]取得当前栏目的目录路径,再与网站新闻地址组合:

<?=$public_r[newsurl].$bqr[classpath]?>

其中:

  • $public_r[newsurl]:帝国CMS网站新闻系统对应的基础URL。

  • $bqr[classpath]:当前循环到的子栏目目录路径。

两者组合之后即可得到当前子栏目的访问地址。

四、调用子栏目名称

当前子栏目的名称可以通过:

<?=$bqr[classname]?>

进行调用。

这里的$bqr[classname]就是当前e:loop循环得到的栏目名称,可以直接用于输出栏目标题。

五、查询当前子栏目下面的数据

得到当前子栏目ID以后,代码又执行了一次数据库查询:

$newbook=$empire->query("select title,titleurl,id from www_11px_cn_ecms_weixin where classid='".$bqr[classid]."' order by newstime desc limit 8");

这里的关键参数就是:

$bqr[classid]

它代表当前循环到的子栏目ID。程序将这个ID作为classid查询条件,就可以取得当前子栏目下面的数据。

同时通过:

order by newstime desc limit 8

按照发布时间倒序排列,并且最多取得8条数据,也就是当前子栏目下面的最新8条内容。

六、循环输出子栏目数据

查询完成后,通过帝国CMS数据库对象遍历查询结果:

while($r=$empire->fetch($newbook)) {
}

每循环一次,$r就是当前查询到的一条数据。

七、调用子栏目数据链接

文章数据的URL使用帝国CMS提供的:

<?=sys_ReturnBqTitleLink($r)?>

进行调用。

该方法根据当前数据记录生成对应的信息内容链接,因此可以直接放在a标签的href属性中。

八、调用子栏目数据标题

当前数据的标题通过:

<?=$r[title]?>

进行调用。

因此下面这段代码:

<li><a href="<?=sys_ReturnBqTitleLink($r)?>" title="<?=$r[title]?>"><?=$r[title]?></a></li>

最终就是输出当前子栏目中的一条内容链接和标题。

九、整个调用过程

这段代码的执行逻辑可以简单理解为:

  1. 查询父栏目ID为1下面的子栏目。

  2. 循环输出每一个子栏目。

  3. 使用$bqr[classid]取得当前子栏目ID。

  4. 根据当前子栏目ID查询对应的数据。

  5. 按照newstime倒序取得最新8条数据。

  6. 使用$r[title]输出数据标题。

  7. 使用sys_ReturnBqTitleLink($r)生成数据链接。

因此最终形成的页面结构就是一个父栏目下面循环多个子栏目,每个子栏目下面再显示对应的最新内容

十、需要注意的问题

原代码中的数据表名使用的是:

www_11px_cn_ecms_weixin

这个表名明显与当前网站数据库前缀及数据表有关,并不是所有帝国CMS网站都可以直接使用。实际使用时,应根据自己网站的真实数据表名称进行修改。

另外,这种写法会在每个子栏目循环过程中再次执行一次数据库查询。如果网站子栏目数量比较多,最终可能产生较多sql查询,因此在数据量较大的网站中,建议根据实际情况进行SQL优化,避免不必要的数据库压力。

总结

帝国CMS循环子栏目及子栏目数据的核心思路,就是先通过enewsclass查询指定父栏目下面的子栏目,再利用当前循环得到的classid查询该栏目对应的数据。

其中比较重要的几个变量分别是:$bqr[classid]用于获取当前子栏目ID,$bqr[classname]用于获取子栏目名称,$bqr[classpath]用于获取栏目路径,而数据循环中的$r[title]用于获取内容标题,sys_ReturnBqTitleLink($r)用于生成内容链接。