dede 调用随机文章

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

使用 {dede:arclist} 标签(最常用、最推荐)

{dede:arclist} 是织梦最核心、最强大的列表标签之一,它本身就支持按随机顺序调用文章。

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

标签语法

{dede:arclist flag='h' orderby='rand' titlelen='30' row='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    </li>
{/dede:arclist}

参数详解

  • orderby='rand': 这是实现随机功能的核心参数,它告诉织梦按随机顺序获取文章。
  • row='10': 设置调用文章的数量,这里调用10篇。
  • titlelen='30': 设置文章标题的长度,最多显示30个字符(一个汉字算2个字符)。
  • flag='h': 可选参数,用于指定文章属性。
    • h: 推荐
    • c: 幻灯片(首页焦点图)
    • p: 图片
    • s: 跳转 如果不设置,则调用所有符合条件的文章。
  • typeid: 可选参数,指定调用哪个栏目下的文章。typeid='1,2,3' 表示调用栏目ID为1、2、3下的文章,不设置则调用全站文章。
  • channelid: 可选参数,指定调用哪个模型的文章。channelid='1' 表示调用文章模型。

完整示例

假设你想在首页的侧边栏随机调用10篇“技术分享”栏目(假设栏目ID为3)的文章,标题长度限制在25个字符。

<div class="sidebar-widget">
    <h3>随机技术文章</h3>
    <ul>
        {dede:arclist typeid='3' orderby='rand' titlelen='25' row='10'}
            <li>
                <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
            </li>
        {dede:arclist}
    </ul>
</div>

使用 {dede:sql} 标签(更灵活,适合复杂场景)

{dede:arclist} 无法满足你的需求时(需要联合多表查询进行随机筛选),可以使用 {dede:sql} 标签直接执行SQL语句。

标签语法

{dede:sql sql="SELECT id, title, arcurl FROM dede_archives WHERE channel=1 AND arcrank > -1 ORDER BY RAND() LIMIT 0, 10"}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:sql}

参数详解

  • sql="...": 这是核心参数,填写你需要执行的SQL查询语句。
    • SELECT id, title, arcurl FROM dede_archives: 从文章主表 dede_archives 中查询文章ID、标题和链接地址。注意: 文章链接(arcurl)在 dede_archives 表中不存在,需要通过 {dede:field name='arcurl'/} 这样的全局函数来获取,或者使用更复杂的JOIN查询,上面的例子为了简化,直接使用了 [field:arcurl/],这在实际中可能无法正常工作,更稳妥的方式是只获取ID,然后通过ID来生成链接。
    • WHERE channel=1 AND arcrank > -1: 查询条件。channel=1 表示文章模型,arcrank > -1 表示排除所有被审核状态为“待审核”或“回收站”的文章。
    • ORDER BY RAND(): MySQL的随机排序函数,与 orderby='rand' 效果相同。
    • LIMIT 0, 10: 从第0条记录开始,获取10条记录,即获取10篇文章。

更健壮的 sql 示例

这个例子先获取ID,再利用织梦的全局函数 GetArcUrl() 来生成链接,这样更可靠。

{dede:sql sql="SELECT id FROM dede_archives WHERE channel=1 AND arcrank > -1 ORDER BY RAND() LIMIT 0, 10"}
    <li>
        <a href='{dede:field name='id' function="GetArcUrl(@me)"/}'>[field:id function="GetTitle(@me)"/]</a>
    </li>
{/dede:sql}
  • [field:id function="GetArcUrl(@me)"]: 获取当前记录的 id 字段,并将其作为参数传递给 GetArcUrl() 函数,函数会返回该ID对应的文章URL。
  • [field:id function="GetTitle(@me)"]: 同样,通过ID获取文章标题。

使用自定义函数(高级用法,性能最优)

如果你的网站对性能要求非常高,并且需要频繁调用随机文章,可以使用PHP自定义函数的方式,这种方式将查询逻辑放在PHP文件中,比模板标签执行效率更高。

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

步骤 1:创建PHP函数文件

include/extend.func.php 文件中(如果此文件不存在,请自行创建)添加以下PHP函数:

/**
 * 调用随机文章
 * @param int $num 调用数量
 * @param string $typeid 栏目ID,多个用逗号隔开
 * @param string $channelid 模型ID
 * @return string 返回HTML列表
 */
function GetRandomArticles($num = 10, $typeid = '', $channelid = '1') {
    global $dsql;
    // 构建SQL查询
    $sql = "SELECT id, title FROM dede_archives WHERE channel = {$channelid} AND arcrank > -1 ";
    if (!empty($typeid)) {
        $sql .= " AND typeid IN ({$typeid}) ";
    }
    $sql .= " ORDER BY RAND() LIMIT 0, {$num}";
    $items = '';
    $dsql->SetQuery($sql);
    $dsql->Execute();
    while ($row = $dsql->GetArray()) {
        // 使用织梦的全局函数获取URL和格式化标题
        $arcurl = GetArcUrl($row['id']);
        $title = cn_substr($row['title'], 30); // 截取30个字符
        $items .= "<li><a href='{$arcurl}' title='{$row['title']}'>{$title}</a></li>";
    }
    return $items;
}

步骤 2:在模板中调用

在任意需要显示随机文章的模板文件(如 index.htm)中,直接调用这个函数即可。

<div class="random-articles">
    <h3>编辑推荐</h3>
    <ul>
        {dede:getrandomarticles num='8' typeid='4,5' channelid='1'/}
    </ul>
</div>

模板标签说明:

  • 这个 {dede:getrandomarticles/} 是我们自定义的标签,它会被 include/extend.func.php 中的函数解析。
  • num='8': 调用8篇文章。
  • typeid='4,5': 只调用栏目ID为4和5下的文章。
  • channelid='1': 只调用文章模型。

总结与对比

方法 优点 缺点 适用场景
{dede:arclist} 简单、高效、官方支持,参数丰富,是首选方案。 在某些极特殊、复杂的查询条件下可能不够灵活。 90%以上的随机文章调用需求,特别是按栏目、按属性筛选时。
{dede:sql} 极其灵活,可以执行任何自定义SQL,不受标签限制。 需要一定的SQL基础,写错SQL可能导致网站出错。 需要联合多表查询、或者有非常特殊筛选条件的复杂随机调用。
自定义函数 性能最高,逻辑清晰,可复用性强。 需要修改PHP文件,对新手有一定门槛。 大型网站,或某个位置需要高频调用随机文章,对页面加载速度有极致要求时。

对于绝大多数用户来说,强烈推荐使用方法一 {dede:arclist},它已经足够强大且易用。

dede 调用随机文章
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
织梦热门文章调用标签如何正确使用?
« 上一篇 今天
c语言中fstream
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]