dede网站地图如何调用文章?

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

使用 {dede:arclist} 标签(最常用、最灵活)

{dede:arclist} 是DedeCMS最核心、最强大的列表标签,几乎可以用来调用任何内容,在网站地图中使用它,可以完全控制文章的显示顺序、数量和格式。

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

基础用法

这是最简单的调用,会按发布时间倒序输出所有文章的标题和链接。

{dede:arclist orderby='pubdate' titlelen='50'}
    <a href="[field:arcurl/]">[field:title/]</a>
    <br>
{/dede:arclist}

标签解析:

  • {dede:arclist ...}: 调用文章列表的开始标签。
  • orderby='pubdate': 按发布时间排序,对于网站地图,这通常是最佳选择,因为最新的文章应该排在前面,你也可以使用 id(按文章ID)、click(按点击量)等,len='50'`: 标题长度,截取50个字符,防止标题过长影响排版。
  • [field:arcurl/]: 文章的完整链接地址。
  • [field:title/]: 文章的标题。
  • <br>: 换行标签,用于让每个链接显示在一行。

完整的网站地图示例

一个标准的网站地图通常会按栏目分类显示,我们可以通过嵌套 {dede:channel}{dede:arclist} 来实现。

步骤:

dede网站地图 调用文章
(图片来源网络,侵删)
  1. 在DedeCMS后台,创建一个新页面,例如命名为 sitemap.html
  2. 中,填入以下代码:
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">网站地图 - {dede:global.cfg_webname/}</title>
</head>
<body>
    <h1>网站地图 - {dede:global.cfg_webname/}</h1>
    <p>欢迎来到本站网站地图,您可以通过以下链接快速找到您感兴趣的内容。</p>
    <!-- {dede:channel} 用于获取所有顶级栏目 -->
    {dede:channel type='top' row='100'}
        <h2><a href="[field:typelink/]">[field:typename/]</a></h2>
        <ul>
            <!-- {dede:arclist} 用于调用当前栏目下的文章 -->
            {dede:arclist typeid='[field:id]' row='100' orderby='pubdate' titlelen='50'}
            <li><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></li>
            {/dede:arclist}
        </ul>
    {/dede:channel}
    <hr>
    <p>本站最后更新时间:{dede:tagname runphp='yes'}@me = date('Y-m-d H:i:s');{/dede:tagname}</p>
</body>
</html>

代码解析:

  • {dede:channel type='top' row='100'}:
    • type='top': 只调用顶级栏目,如果你的网站有二级栏目,并且希望在一级栏目下显示其所有子栏目的文章,可以去掉这个属性或改为 type='son'
    • row='100': 调用100个栏目,基本足够。
  • [field:typelink/][field:typename/]: 分别是栏目的链接和名称。
  • typeid='[field:id]': 这是 关键!它告诉 {dede:arclist} 只调用当前 {dede:channel} 循环到的这个栏目([field:id])下的文章,从而实现了栏目和文章的分类对应。
  • row='100': 每个栏目下调用100篇文章,可以根据需要修改。
  • <ul><li>: 使用无序列表让文章链接更整洁。
  • 最后的更新时间:使用了一个简单的PHP标签来动态显示当前时间。

使用 {dede:list} 标签(适用于单栏目)

如果你的网站地图页面只显示 某一个特定栏目 下的文章("新闻中心"),那么使用 {dede:list} 会更简单。

{dede:list} 通常用于列表页,它会自动获取当前栏目ID下的文章。

基础用法

假设你的 "新闻中心" 栏目ID是 1

dede网站地图 调用文章
(图片来源网络,侵删)
{dede:list pagesize='100' orderby='pubdate'}
    <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
    <span class="arctime">([field:pubdate function="MyDate('Y-m-d', @me)"/])</span>
    <br>
    {/dede:list}

标签解析:

  • {dede:list ...}: 调用当前栏目下的文章列表。
  • pagesize='100': 每页显示100条文章,因为sitemap不需要分页,所以设置一个足够大的数字。
  • orderby='pubdate': 同样,按发布时间排序。
  • [field:pubdate function="MyDate('Y-m-d', @me)"/]: 调用发布时间,并使用 function 将其格式化为 "年-月-日"。

在模板中的应用

  1. 创建一个页面,news_sitemap.html
  2. 在后台新建一个栏目,比如叫 "新闻地图",设置其内容模板为 news_sitemap.html
  3. 将这个栏目移动到你希望展示的栏目(如"新闻中心")下,成为其子栏目。
  4. 访问这个 "新闻地图" 栏目的页面,它就会自动显示其父栏目(或同级栏目,取决于设置)下的文章列表。

使用SQL直接查询(高级用法,性能最优)

如果你的网站文章数量非常庞大(几十万甚至上百万),使用 {dede:arclist} 可能会因为解析标签和查询次数过多而导致页面生成缓慢,这时,直接使用SQL查询并输出是最高效的方式。

注意: 此方法需要对PHP和SQL有一定了解,并且修改模板文件。

示例代码

<?php
$dsql = new DedeSql(false);
// 设置你想要查询的栏目ID,多个ID用逗号隔开,如 "1,2,3",如果想查询所有栏目,可以去掉这个条件或设置为 ''。
$typeid = "1"; 
// 构建SQL查询语句
$sql = "SELECT id, title, arcurl, pubdate FROM `dede_archives` WHERE arctypeid IN ($typeid) AND ismake = 1 ORDER BY pubdate DESC LIMIT 0, 500";
$dsql->SetQuery($sql);
$dsql->Execute('list');
echo "<ul>";
while($row = $dsql->GetArray('list'))
{
    // 格式化日期
    $pubdate = date('Y-m-d', $row['pubdate']);
    // 输出链接
    echo "<li><a href='{$row['arcurl']}' title='{$row['title']}'>{$row['title']}</a> ({$pubdate})</li>";
}
echo "</ul>";
$dsql->Close();
?>

代码解析:

  • new DedeSql(false): 初始化一个数据库连接对象。
  • SELECT id, title, arcurl, pubdate FROM dede_archives: 从文章数据表 dede_archives 中查询我们需要的字段。
  • WHERE arctypeid IN ($typeid): 限定只查询指定栏目ID下的文章。
  • AND ismake = 1: 只查询已生成静态页面的文章。
  • ORDER BY pubdate DESC LIMIT 0, 500: 按发布时间倒序,并只取最新的500条。
  • while($row = $dsql->GetArray('list')): 循环输出查询结果。
  • echo "...": 直接使用PHP的 echo 输出HTML结构。

总结与建议

方法 优点 缺点 适用场景
{dede:arclist} 灵活、强大、官方推荐、易于理解和维护 在文章量极大时,生成速度可能稍慢 绝大多数网站地图需求,特别是需要按多栏目分类展示时。
{dede:list} 简单、直接,无需指定typeid 只能用于单一栏目或固定栏目 网站结构简单,只需要展示某一个特定栏目下的文章列表。
SQL查询 性能最高,不受标签解析影响 需要PHP/SQL知识,代码不够“模板化”,不易维护 超大型网站(文章量10万+),对页面生成速度有极致要求。

给你的建议:

对于99%的DedeCMS网站,直接使用 {dede:arclist} 的完整示例 就完全足够了,它既实现了按栏目分类的清晰结构,又保持了代码的可读性和可维护性,是最佳实践。

-- 展开阅读全文 --
头像
C程序执行入口是main函数吗?
« 上一篇 02-16
C语言程序设计现代方法第2版适合零基础吗?
下一篇 » 02-16
取消
微信二维码
支付宝二维码

目录[+]