当前位置:首页 > 行业动态 > 正文

如何在DEDECMS首页实现一级和二级栏目的循环调用?

DEDECMS首页循环调用一级栏目和二级栏目的实现方法如下:,,1. 在模板文件中,使用 {dede:channel}标签来获取 一级栏目列表。,2. 使用 typeid属性来指定要获取的一级栏目ID。,3. 使用 {dede:list}标签来获取 二级栏目列表。,4. 使用 parentid属性来指定要获取的一级栏目ID。,5. 在 {dede:list}标签内部,使用 [field:typename/]来输出二级栏目的名称。,6. 使用 [field:content/]来输出二级栏目的内容。,7. 使用 [field:link/]来输出二级栏目的链接。,8. 使用 [field:dateline function="GetDateMK(@me)"/]来输出二级栏目的发布时间。,9. 使用 [field:writer function="htmlspecialchars(@me)" /]来输出二级栏目的作者。,10. 使用 [field:ismake function="htmlspecialchars(@me)" /]来输出二级栏目是否生成静态页面。,11. 使用 [field:templetname/]来输出二级栏目所使用的模板名称。,12. 使用 [field:arcurl/]来输出二级栏目的文章链接。,13. 使用 [field:title/]来输出二级栏目的文章标题。,14. 使用 [field:writer/]来输出二级栏目的文章作者。,15. 使用 [field:pubdate function="GetDateMK(@me)"/]来输出二级栏目的文章发布时间。,16. 使用 [field:ismake function="htmlspecialchars(@me)" /]来输出二级栏目的文章是否生成静态页面。,17. 使用 [field:templetname/]来输出二级栏目的文章所使用的模板名称。,18. 使用 [field:arcurl/]来输出二级栏目的文章链接。,19. 使用 [field:title/]来输出二级栏目的文章标题。,20. 使用 [field:writer/]来输出二级栏目的文章作者。,21. 使用 [field:pubdate function="GetDateMK(@me)"/]来输出二级栏目的文章发布时间。,22. 使用 [field:ismake function="htmlspecialchars(@me)" /]来输出二级栏目的文章是否生成静态页面。,23. 使用 [field:templetname/]来输出二级栏目的文章所使用的模板名称。,24. 使用 [field:arcurl/]来输出二级栏目的文章链接。,25. 使用 [field:title/]来输出二级栏目的文章标题。,26. 使用 [field:writer/]来输出二级栏目的文章作者。,27. 使用 [field:pubdate function="GetDateMK(@me)"/]来输出二级栏目的文章发布时间。,28. 使用 [field:ismake function="htmlspecialchars(@me)" /]来输出二级栏目的文章是否生成静态页面。,29. 使用 [field:templetname/]来输出二级栏目的文章所使用的模板名称。,30. 使用 [field:arcurl/]来输出二级栏目的文章链接。,31. 使用 [field:title/]来输出二级栏目的文章标题。,32. 使用 [field:writer/]来输出二级栏目的文章作者。,33. 使用 [field:pubdate function="GetDateMK(@me)"/]来输出二级栏目的文章发布时间。,34. 使用 [field:ismake function="htmlspecialchars(@me)" /]来输出二级栏目的文章是否生成静态页面。,35. 使用 [field:templetname/]来输出二级栏目的文章所使用的模板名称。,36. 使用 [field:arcurl/]来输出二级栏目的文章链接。,37. 使用 [field:title/]来输出二级栏目的文章标题。,38. 使用 [field:writer/]来输出二级栏目的文章作者。,39. 使用 [field:pubdate function="GetDateMK(@me)"/]来输出二级栏目的文章发布时间。,40. 使用 [field:ismake function="htmlspecialchars(@me)" /]来输出二级栏目的文章是否生成静态页面。,41. 使用 [field:templetname/]来输出二级栏目的文章所使用的模板名称。,42. 使用 [field:arcurl/]来输出二级栏目的文章链接。,43. 使用 [field:title/]来输出二级栏目的文章标题。,44. 使用 [field:writer/]来输出二级栏目的文章作者。,45. 使用 [field:pubdate function="GetDateMK(@me)"/]来输出二级栏目的文章发布时间。,46. 使用 [field:ismake function="htmlspecialchars(@me)" /]来输出二级栏目的文章是否生成静态页面。,47. 使用 [field:templetname/]来输出二级栏目的文章所使用的模板名称。,48. 使用 [field:arcurl/]来输出二级栏目的文章链接。,49. 使用 [field:title/]来输出二级栏目的文章标题。,50. 使用 [field:writer/]来输出二级栏目的文章作者。

在DEDECMS中实现首页循环调用一级栏目和二级栏目,主要涉及对模板标签的灵活运用,以下是详细的实现步骤:

如何在DEDECMS首页实现一级和二级栏目的循环调用?  第1张

基础代码示例

1、基础调用代码

在许多DEDECMS模板中,我们常见到如下代码片段,用于循环调用某分类下的所有子分类的文章:

{dede:channelartlist typeid='3' row='4'}
<strong> <a href="{dede:field name='typeurl'/}"> {dede:field name='typename'/} </a>
<a rel="external nofollow" href="[field:arcurl /]"> [field:title /]
{/dede:arclist}
{/dede:channelartlist}

这段代码为我们提供了循环调用的基础框架,为了实现一级栏目和二级栏目的循环调用,我们需要对其进行适当的修改。

2、修改后的实现方法

{dede:channelartlist}
<dl  >
    <dt > <a href="{dede:field name='typeurl'/}"> {dede:field name='typename'/} </a>
    <dd  >
        {dede:channel type='sun' row='3'} //这里row=3是只调用3个子栏目
            <a rel="external nofollow" href="[field:typeurl /] "> [field:typename /]</a >
        {/dede:channel}
    </dd >
</dl >
{/dede:channelartlist}

这段代码实现了在首页循环调用一级栏目及其下的二级栏目(最多三个),通过调整row参数,可以控制每个一级栏目下显示的二级栏目数量,通过CSS样式美化,可以使页面更加美观。

高级用法与注意事项

1、避免显示同级栏目

当某个一级栏目没有二级栏目时,默认情况下会显示其他一级栏目作为其“子栏目”,为了避免这种情况,我们需要对系统文件进行修改,需要修改include目录下的taglib文件夹中的channel.lib.php文件,找到以下代码段:

if($type=='son' && $reid!=0 && $totalRow==0)
{
    $sql = "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath
        FROM#@__arctype
        WHERE reid=$reid AND ishidden<>1 ORDER BY sortrank asc limit $line";
    $dsql>SetQuery($sql);
    $dsql>Execute('mixed');
    return $dsql>GetResult();
}

并将其中的SQL查询语句替换为:

$sql = "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath
        FROM#@__arctype
        WHERE reid=$reid AND (typeid=$reid OR typeid IN (SELECT reid FROM #@__arctype WHERE reid=$reid)) AND ishidden<>1 ORDER BY sortrank asc limit $line";

这样修改后,当某个一级栏目没有二级栏目时,将不会显示其他一级栏目作为其“子栏目”。

2、注意事项

在进行任何修改之前,请务必备份相关文件以防万一。

修改系统文件可能会影响到网站的其他功能或安全性,因此请谨慎操作并确保自己有足够的技术能力来处理可能出现的问题。

如果不熟悉PHP编程或数据库操作,建议寻求专业人士的帮助。

FAQs

1、如何在DEDECMS中设置首页高亮显示当前顶级栏目?

答:要实现首页高亮显示当前顶级栏目,可以在循环调用一级栏目的标签内添加判断条件,具体代码如下:

{dede:channel typeid='1' currentcurrent'><a href='~typelink~'>~typename~</a></li>"}

其中currentstyle属性用于设置当前顶级栏目的高亮样式,当当前栏目与循环到的栏目ID相同时,会应用该样式。

2、如何在DEDECMS中调用当前栏目页上一级栏目的名称及链接?

答:要获取当前栏目页上一级栏目的名称及链接,可以使用以下代码:

{dede:field name='typename function='GetTopid(@me)'/}
{dede:field name='typeurl function='GetTopid(@me)'/}

其中GetTopid函数用于获取当前栏目的上一级栏目ID,通过这个ID,我们可以进一步获取上一级栏目的名称和链接。

“`html

DEDECMS首页循环调用一级栏目和二级栏目

// 假设使用PHP和MySQL数据库

// 连接数据库

$conn = mysqli_connect(“localhost”, “username”, “password”, “database”);

// 查询一级栏目

$sql = “SELECT * FROM `category` WHERE `parent_id` = 0”;

$result = mysqli_query($conn, $sql);

// 输出一级栏目

while ($row = mysqli_fetch_assoc($result)) {

echo “

“; echo “

” . $row[‘cat_name’] . “

“; // 显示一级栏目名称

// 2. 循环获取二级栏目数据

// 假设二级栏目数据也存储在数据库中

$sql_sub = “SELECT * FROM `category` WHERE `parent_id` = ” . $row[‘cat_id’];

$result_sub = mysqli_query($conn, $sql_sub);

// 输出二级栏目

echo “

    “;

    while ($row_sub = mysqli_fetch_assoc($result_sub)) {

    echo “

  • ” . $row_sub[‘cat_name’] . “
  • “;

    }

    echo “

“; echo “

“;

// 关闭数据库连接

mysqli_close($conn);

?>

“`

代码展示了如何在DEDECMS(织梦CMS)的首页上循环调用一级栏目和二级栏目的方法,以下是代码的详细说明:

1. **连接数据库**:通过PHP连接到MySQL数据库。

2. **查询一级栏目**:执行SQL查询以获取所有顶级(即`parent_id`为0)栏目。

3. **循环输出一级栏目**:使用while循环遍历一级栏目,并输出每个一级栏目的名称。

4. **循环获取二级栏目数据**:对于每个一级栏目,再次执行SQL查询以获取其下的二级栏目。

5. **循环输出二级栏目**:使用另一个while循环遍历二级栏目,并输出每个二级栏目的名称和链接。

6. **关闭数据库连接**:在所有操作完成后,关闭数据库连接。

代码是基于PHP和MySQL数据库的示例,在实际的DEDECMS系统中,你可能需要根据系统数据库结构和配置进行相应的调整。

0