dede首页如何调用文章缩略图?

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

使用 litpic 字段(最推荐、最标准的方法)

这是 DedeCMS 最标准、最官方的方法,它要求你在后台发布文章时,必须上传或填写“缩略图”字段。

dede首页调用文章缩略图
(图片来源网络,侵删)

后台设置(确保数据存在)

在发布或编辑文章时,找到“缩略图”选项,上传一张图片并保存。

  • 路径:后台文章编辑页面 -> 高级选项 -> 缩略图

前台首页调用代码

在你的首页模板文件(通常是 /templets/default/index.htm)中,使用 {dede:arclist} 标签来调用文章列表,并使用 [field:picname/] 来获取缩略图地址。

基本代码示例:

{dede:arclist row='10' titlelen='40'}
  <div class="article-item">
    <!-- 调用缩略图 -->
    <a href="[field:arcurl/]">
      <img src="[field:picname/]" alt="[field:title/]" />
    </a>
    <h2><a href="[field:arcurl/]">[field:title/]</a></h2>
    <p>[field:description function='cn_substr(@me, 100)'/]...</p>
  </div>
{/dede:arclist}

代码解释:

dede首页调用文章缩略图
(图片来源网络,侵删)
  • {dede:arclist row='10' titlelen='40'}: 调用文章列表。
    • row='10': 调用10篇文章。
    • titlelen='40': 标题长度限制为40个字符。
  • [field:picname/]: 核心标签,用于获取文章的缩略图地址。
  • [field:arcurl/]: 获取文章的链接地址。
  • [field:title/]: 获取文章的标题。
  • [field:description/]: 获取文章的摘要。

自动提取文章第一张图为缩略图(非常实用)

很多站长希望发布文章时不用手动上传缩略图,系统能自动抓取文章内容里的第一张图片作为缩略图,这个功能需要修改系统文件,但一劳永逸。

修改系统文件

你需要修改两个文件,请先备份!

第一步:修改 include/extend.func.php 文件

  1. 用 FTP 或服务器管理工具打开 /include/extend.func.php 文件。
  2. 在文件末尾 ?> 的前面,添加如下 PHP 函数代码:
/**
 * 获取文章body中的第一张图片路径
 * @param string $body 文章内容
 * @param string $prefix 图片路径前缀,默认为空
 * @return string
 */
function GetFirstImg($body, $prefix = ''){
    $preg = "/<img.*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>/i";
    preg_match_all($preg, $body, $match);
    if(isset($match[1][0])){
        // 如果图片是相对路径,则拼接网站域名
        if(strpos($match[1][0], 'http') === false){
            return $prefix.$match[1][0];
        }
        return $match[1][0];
    }
    // 如果没有图片,可以返回一个默认图片地址
    return $prefix.'/images/default.jpg';
}

第二步:修改 arc.archives.class.php 文件

dede首页调用文章缩略图
(图片来源网络,侵删)
  1. 打开 /include/arc.archives.class.php 文件。
  2. 搜索 function GetHtmlBody() 函数。
  3. 在这个函数里找到 //对body进行内容处理 这一行,在其上面添加如下代码:
// 自动获取第一张图片作为缩略图 - Start
$this->Fields['litpic'] = GetFirstImg($this->Fields['body'], $GLOBALS['cfg_cmspath']);
// 自动获取第一张图片作为缩略图 - End

前台首页调用代码

代码和方法一完全一样!因为系统现在会自动将内容第一张图地址赋值给 litpic 字段。

{dede:arclist row='10' titlelen='40'}
  <div class="article-item">
    <a href="[field:arcurl/]">
      <img src="[field:picname/]" alt="[field:title/]" />
    </a>
    ...
  </div>
{/dede:arclist}

优点:自动化程度高,无需手动操作。 缺点:需要修改核心文件,升级 DedeCMS 时可能会被覆盖。


使用 body 字段直接提取(不推荐,但应急可用)

这种方法不使用 litpic 字段,而是直接从文章内容 (body) 中提取第一张图,它不需要修改系统文件,但性能较差,且灵活性低。

前台首页调用代码

使用 {dede:field} 标签配合自定义函数。

{dede:arclist row='10' titlelen='40'}
  <div class="article-item">
    <a href="[field:arcurl/]">
      <!-- 直接从body中提取第一张图 -->
      <img src="{dede:field name='body' function='GetFirstImg(@me, "")'/}" alt="[field:title/]" />
    </a>
    ...
  </div>
{/dede:arclist}

代码解释:

  • {dede:field name='body' function='GetFirstImg(@me, "")'/}:
    • name='body': 获取当前文章的 body
    • function='GetFirstImg(@me, "")': 调用我们之前在 extend.func.php 中定义的 GetFirstImg 函数,并将 body 内容 (@me) 作为参数传进去。

注意:这个方法虽然代码看起来可行,但在 {dede:arclist} 循环中调用 {dede:field} 标签有时会不稳定,性能也不如直接调用 [field:picname/]强烈建议优先使用方法一和方法二


总结与对比

方法 优点 缺点 推荐度
litpic 字段 标准、稳定、性能好,符合 DedeCMS 设计逻辑。 需要手动在后台上传缩略图。 ⭐⭐⭐⭐⭐ (最推荐)
自动提取 自动化、高效,用户体验好,无需手动操作。 需要修改核心文件,升级有风险。 ⭐⭐⭐⭐ (非常推荐)
直接提取 不需要修改系统文件。 性能较差,代码在循环中可能不稳定,不灵活。 ⭐⭐ (应急备用)

额外优化:处理没有缩略图的文章

为了避免在没有缩略图时显示破损的图标,我们可以使用 if 条件语句来判断。

{dede:arclist row='10' titlelen='40'}
  <div class="article-item">
    <!-- 如果有缩略图则显示,否则显示默认图片 -->
    [field:array runphp='yes']
      if(@me['litpic'] != '' && strpos(@me['litpic'], 'defaultpic') === false){
          @me = '<a href="'.@me['arcurl'].'"><img src="'.@me['litpic'].'" alt="'.@me['title'].'" /></a>';
      }else{
          @me = '<a href="'.@me['arcurl'].'"><img src="/images/nothumb.jpg" alt="'.@me['title'].'" /></a>';
      }
    [/field:array]
    ...
  </div>
{/dede:arclist}

代码解释:

  • [field:array runphp='yes']: 使用 array 循环并开启 PHP 执行。
  • if(@me['litpic'] != '' ...): 判断 litpic 字段是否为空。
  • strpos(@me['litpic'], 'defaultpic') === false: 额外判断一下,避免 DedeCMS 默认的“暂无缩略图”图片也被调用。
  • @me = '...': 如果条件成立,就生成带缩略图的 HTML 代码。
  • else: 如果不成立,就生成一个指向你准备的默认图片(如 /images/nothumb.jpg)的 HTML 代码。

希望这份详细的指南能帮助到你!

-- 展开阅读全文 --
头像
织梦cms 自适应模板
« 上一篇 02-07
C语言客户端socket编程
下一篇 » 02-07

相关文章

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