dede列表页如何调用描述?

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

使用 {dede:list} 标签并附加 function 属性(最推荐)

这是最灵活、最规范的方法,它可以在列表循环中直接对每个文章的摘要进行处理。

dede列表页调用描述
(图片来源网络,侵删)

场景: 在列表页的列表项(li)中,显示文章摘要。

代码示例:

{dede:list pagesize='10' titlelen='50'}
  <li>
    <a href="[field:arcurl/]">[field:title/]</a>
    <!-- 在这里调用描述 -->
    <p class="description">[field:description function='htmlspecialchars(@me)'/]</p>
  </li>
{/dede:list}

代码解析:

  • {dede:list}: 这是DedeCMS的列表循环标签,pagesize='10' 表示每页显示10条。
  • [field:description ...]: 这是调用文章摘要的核心。
  • function='htmlspecialchars(@me)': 这是关键部分。
    • @me:代表当前字段的原始值,也就是 [field:description] 的内容。
    • htmlspecialchars():这是一个PHP函数,用于将 HTML 特殊字符(如 <, >, &, )转换为 HTML 实体,这样做可以防止摘要中包含的HTML标签(如 <p>, <br>)破坏你的列表页布局,并防止XSS跨站脚本攻击。强烈建议使用此函数。
    • 你也可以使用其他函数,cn_substr(@me, 100) 来截取摘要的前100个字符。[field:description function='htmlspecialchars(cn_substr(@me, 100))'/]

使用 {dede:arclist} 标签(适用于非标准列表页)

如果你的列表页不是用 {dede:list} 标签生成的(比如用了自定义的SQL查询),或者你想在列表页的其他地方(如侧边栏)调用一些热门文章的摘要,{dede:arclist} 是一个很好的选择。

dede列表页调用描述
(图片来源网络,侵删)

场景: 在列表页的侧边栏调用“热门文章”及其摘要。

代码示例:

{dede:arclist titlelen='50' row='5' typeid=''}
  <a href="[field:arcurl/]">[field:title/]</a>
  <p class="description">[field:description function='htmlspecialchars(cn_substr(@me, 80))'/]</p>
{/dede:arclist}

代码解析:

  • {dede:arclist}: 通用文章列表标签,功能强大。
  • typeid='': 指定栏目ID,留空表示调用所有栏目。
  • row='5': 表示调用5条记录。
  • [field:description function='...'/]: 与方法一中的用法完全相同,可以灵活使用PHP函数来处理摘要内容。

使用SQL直接查询(高级用法)

当以上方法无法满足复杂需求时(需要根据特定条件筛选并调用摘要),可以直接使用SQL标签。

dede列表页调用描述
(图片来源网络,侵删)

场景: 调用指定栏目ID下,带有特定关键词的文章摘要。

代码示例:

{dede:sql sql='SELECT description, arcurl, title FROM `dede_archives` AS a LEFT JOIN `dede_arctype` AS t ON a.typeid = t.id WHERE t.id = 1 AND a.title LIKE "%关键词%" LIMIT 10'}
  <a href="[field:arcurl/]">[field:title/]</a>
  <p class="description">[field:description function='htmlspecialchars(@me)'/]</p>
{/dede:sql}

代码解析:

  • {dede:sql}: 执行自定义SQL语句的标签。
  • SELECT ... FROM ... WHERE ...: 标准的SQL查询语句。
    • dede_archives: 存储文章基本信息的表。
    • dede_arctype: 存储栏目信息的表。
    • WHERE t.id = 1: 只从栏目ID为1的栏目中查询。
    • AND a.title LIKE "%关键词%": 并且文章标题包含“关键词”。
    • LIMIT 10: 限制返回10条结果。
  • [field:description ...]: 在SQL标签中,[field:字段名/] 用于输出查询结果中的对应列。

重要注意事项和常见问题

  1. 后台没有填写摘要怎么办? 如果文章在后台没有填写摘要,[field:description] 将会是空的,这会导致列表页出现空白段落,影响美观。 解决方案: 使用 function 函数进行判断和截取,如果摘要为空,就自动截取正文内容。

    {dede:list}
      <p class="description">
        [field:description function='
          if(trim(@me)==""){
            $str = cn_substr(Html2Text(@me), 200); // 如果摘要为空,则截取正文的纯文本前200字符
          }else{
            $str = htmlspecialchars(@me); // 如果有摘要,则使用摘要
          }
          echo $str;
        '/]
      </p>
    {/dede:list}
    • Html2Text(): 这是一个DedeCMS内置函数,用于将HTML文本转换为纯文本,你需要确保它可用。
    • cn_substr(): 用于截取字符串。
    • 这种写法比较复杂,但非常实用,你可以将其封装成一个自定义函数,然后在模板里调用,这样代码会更整洁。
  2. 如何控制摘要的显示长度? 如上面例子所示,使用 cn_substr() 函数即可,截取100个字符: [field:description function='cn_substr(@me, 100)'/]

  3. 摘要中的HTML标签问题 再次强调,如果用户在摘要中输入了 <p><strong> 等HTML标签,直接输出可能会破坏你的CSS样式。强烈建议对所有输出的摘要内容使用 htmlspecialchars() 函数,将其转为纯文本显示,如果需要保留部分格式,可以使用更复杂的过滤逻辑。

方法 适用场景 优点 缺点
{dede:list} + function 标准列表页 最推荐,代码简洁,与列表循环完美结合 功能相对 arclist 稍弱
{dede:arclist} 侧边栏、推荐列表等 灵活,功能强大,可指定栏目等 在主列表循环中使用不如 {dede:list} 直观
{dede:sql} 复杂、特殊的数据需求 灵活性最高,可定制任何查询 代码复杂,需要懂SQL,有安全风险(需注意防注入)

对于绝大多数情况,方法一 是你的首选,它既安全又规范,能满足99%的列表页调用描述的需求。

-- 展开阅读全文 --
头像
dede子目录域名如何正确配置与访问?
« 上一篇 今天
织梦提速有哪些实用技巧?
下一篇 » 今天

相关文章

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

目录[+]