dede如何调用随机栏目?

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

使用 GetTopInfos 函数 + 自定义PHP代码(最推荐)

这是最灵活、最强大的方法,可以完全控制输出的HTML结构,并且性能很好,它通过PHP代码在模板中直接生成随机栏目列表。

dede调用随机栏目
(图片来源网络,侵删)

适用场景:首页、自定义页面模板等需要高度定制化输出样式的场景。

实现步骤

  1. 打开模板文件:用编辑器打开你需要添加随机栏目的模板文件,index.htm (首页模板)。

  2. 添加PHP代码:在模板中需要显示随机栏目的位置,插入以下PHP代码。

    dede调用随机栏目
    (图片来源网络,侵删)
    {dede:php}
    // 1. 调用顶级栏目
    // $topInfos 是一个包含所有顶级栏目的数组
    $topInfos = GetTopInfos();
    // 2. 打乱数组顺序,实现随机效果
    shuffle($topInfos);
    // 3. 设置要显示的栏目数量
    $displayCount = 6; // 只显示6个随机栏目
    // 4. 循环输出
    for ($i = 0; $i < $displayCount && $i < count($topInfos); $i++) {
        $topid = $topInfos[$i]['id'];
        $typename = $topInfos[$i]['typename'];
        $typedir = $topInfos[$i]['typedir'];
        // 拼接链接
        $url = !empty($topInfos[$i]['siteurl']) ? $topInfos[$i]['siteurl'] : $typedir;
        // 输出HTML,你可以自定义这里的样式
        echo "<li><a href='{$url}' title='{$typename}'>{$typename}</a></li>";
    }
    {/dede:php}

代码详解

  • {dede:php}...{/dede:php}:这是DedeCMS的PHP执行标签,允许在模板中直接写PHP代码。
  • GetTopInfos():这是DedeCMS的一个核心函数,用于获取所有顶级栏目的信息,并返回一个包含详细信息的数组。
  • shuffle($topInfos):PHP内置函数,用于将数组中的元素顺序随机打乱。
  • $displayCount = 6;:你可以修改这个数字来控制显示多少个随机栏目。
  • for (...):一个循环,用来遍历打乱后的数组,并输出指定数量的栏目。
  • $topInfos[$i]['id'], $topInfos[$i]['typename'], $topInfos[$i]['typedir']:分别获取栏目的ID、名称和目录。
  • $url = ...:判断栏目是否设置了外部链接 (siteurl),如果有则使用外部链接,否则使用内部栏目路径。
  • echo "<li>...</li>":这里是你自定义的HTML输出,你可以根据网站CSS结构修改成 <div><a> 等任何你需要的标签。

使用 channel 标签 + orderby='rand'(最简单)

如果你的需求只是简单地随机显示栏目,并且对HTML结构要求不高,可以直接使用DedeCMS的 channel 标签,并指定排序方式为随机。

适用场景:快速实现,对样式要求不高的地方。

实现步骤

dede调用随机栏目
(图片来源网络,侵删)
  1. 打开模板文件:同样,打开你的模板文件。

  2. 添加 channel:

    <ul>
        {dede:channel type='top' row='6' orderby='rand'}
        <li><a href='[field:typelink/]'>[field:typename/]</a></li>
        {/dede:channel}
    </ul>

标签属性说明

  • type='top':表示只调用顶级栏目,如果你想调用所有栏目(包括子栏目),可以去掉这个属性或设置为 son
  • row='6':表示要调用的栏目数量。
  • orderby='rand'这是实现随机的关键,它告诉DedeCMS按随机顺序获取栏目。
  • [field:typelink/]:单栏目链接的底层字段。
  • [field:typename/]:单栏目名称的底层字段。

使用SQL标签 {dede:sql}(最灵活,适合复杂筛选)

如果你的随机需求更复杂,随机显示顶级栏目中,栏目内容数大于10的栏目”,那么使用 channel 标签就不够用了,这时,{dede:sql} 标签是你的最佳选择。

适用场景:需要结合数据库表进行复杂条件筛选的随机调用。

实现步骤

  1. 分析数据库:我们需要从 dede_arctype (栏目表) 中获取数据。

  2. 编写SQL语句并添加到模板

    {dede:sql sql='SELECT id, typename, typedir FROM `dede_arctype` WHERE reid = 0 ORDER BY rand() LIMIT 0,6'}
        <li><a href='[field:typedir function='str_replace("{cmspath}", "", "@me")'/]/' title='[field:typename/]'>[field:typename/]</a></li>
    {/dede:sql}

SQL语句详解

  • SELECT id, typename, typedir FROM dede_arctype:选择需要的字段。
  • WHERE reid = 0reid 是父栏目的ID,reid=0 表示只查询顶级栏目,如果你想查询所有栏目,去掉此条件。
  • ORDER BY rand():按随机顺序排序。
  • LIMIT 0,6:从第0条记录开始,获取6条记录,这就是限制数量的方法。

底层字段处理

  • [field:typedir/] 返回的可能是 {cmspath}/a/b 这样的路径,我们需要去掉开头的 {cmspath},所以使用了 function='str_replace("{cmspath}", "", "@me")' 来处理。
  • [field:typename/]:栏目名称,直接使用即可。

总结与对比

方法 优点 缺点 推荐度
GetTopInfos + PHP 灵活性最高,可完全控制HTML和逻辑,性能好。 需要写一点PHP代码,对新手略有门槛。 ⭐⭐⭐⭐⭐
channel 最简单,代码量少,标签化使用方便。 灵活性较低,样式和功能受限于标签本身。 ⭐⭐⭐⭐
sql 功能最强大,可以实现任何复杂的筛选条件。 需要懂SQL语句,直接操作数据库有一定风险。 ⭐⭐⭐⭐

最终建议

  • 对于绝大多数用户,方法一 是最佳选择,它在灵活性和易用性之间取得了最好的平衡。
  • 如果你只是想快速实现一个简单的随机列表,方法二 足够用了。
  • 如果你是一个有经验的开发者,需要非常复杂的业务逻辑,方法三 将给你最大的自由度。

希望这些方法能帮助你完美实现DedeCMS的随机栏目调用!

-- 展开阅读全文 --
头像
dede如何调取文章标题?
« 上一篇 昨天
dede图集所有图片如何批量获取?
下一篇 » 昨天
取消
微信二维码
支付宝二维码