织梦文章列表缩略图如何设置?

99ANYc3cd6
预计阅读时长 22 分钟
位置: 首页 织梦建站 正文

核心概念:织梦如何获取缩略图?

织梦文章列表的缩略图,其数据源主要来自三个地方,按优先级从高到低:

织梦文章列表缩略图
(图片来源网络,侵删)
  1. 文章自定义字段:这是最常用、最可靠的方法,你在发布文章时,通过“附加属性”或“自定义字段”功能上传或填写一张图片地址。
  2. 第一张图:如果你没有设置自定义缩略图,织梦可以自动抓取文章正文(body字段)中的第一张<img>标签作为缩略图。
  3. 默认图片:如果以上两者都没有,则显示一张你预设好的默认图片。

下面我们围绕这三个核心方法展开。


使用文章自定义字段(推荐)

这是最规范、最可控的方法,适合所有场景。

步骤 1:添加自定义字段

  1. 进入后台:登录织梦后台。
  2. 找到模型:点击 核心 -> 内容模型管理
  3. 选择模型:点击你网站文章所使用的模型,通常是“文章模型”。
  4. 添加字段
    • 在字段管理页面,点击 增加新字段
    • 字段名:填写 litpic (这是织梦默认的字段名,如果已有则无需添加) 或者你自己的,如 listpic
    • 字段类型:选择 图片(上传)
    • 字段提示:填写 列表缩略图,这样在前台发布文章时,编辑器里会提示你。
    • 默认值:可以留空,也可以填写一张默认图片的地址(如 /images/default.jpg)。
    • 保存

步骤 2:在前台发布文章时上传图片

当你发布或编辑文章时,会在编辑器下方看到“列表缩略图”的选项,点击上传按钮,选择一张图片即可,这张图片的地址就会被保存在数据库的 litpic 字段中。

步骤 3:修改列表页模板

这是最关键的一步,你需要找到并修改你的列表页模板文件。

织梦文章列表缩略图
(图片来源网络,侵删)
  1. 找到模板文件:模板文件通常位于 /templets/你的模板文件夹/ 目录下,列表页模板文件名通常是 list_article.htm

  2. 编辑模板:用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开 list_article.htm

  3. 找到循环标签:在模板中找到织梦的循环标签,通常是:

    {dede:arclist}
        ... 循环体内的内容 ...
    {/dede:arclist}
  4. 在循环体内添加缩略图代码:在 {dede:arclist}{/dede:arclist} 之间,你希望显示缩略图的位置,添加以下代码:

    <li>
        <a href="[field:arcurl/]" title="[field:title/]">
            <!-- 这里是缩略图代码 -->
            <img src="[field:litpic/]" alt="[field:title/]" />
        </a>
        <h3><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h3>
    </li>

    代码解释

    • [field:litpic/]:这是调用文章自定义的缩略图地址,它会直接输出你在后台上传的图片路径。
    • [field:title/]:这是文章标题,我们把它放在 img 标签的 alt 属性中,这有利于SEO。
    • [field:arcurl/]:这是文章的链接地址。
  5. 保存模板:保存修改后的 list_article.htm 文件,然后到后台的 生成 -> 更新主页HTML更新栏目HTML 中,重新生成你的列表页。

你的列表页应该就能正常显示你在后台上传的缩略图了。


自动调用文章内容第一张图

如果你不想每次都手动上传缩略图,可以让织梦自动抓取文章正文的第一张图。

步骤 1:确保文章有图

这个方法的前提是你的文章内容(body)中至少包含一张 <img>

步骤 2:修改列表页模板

同样是修改 list_article.htm 文件,但这次我们使用不同的调用标签。

<li>
    <a href="[field:arcurl/]" title="[field:title/]">
        <!-- 这里是自动调用正文第一张图的代码 -->
        <img src="{dede:field name='body' runphp='yes'}
            $str = @me;
            $preg = '/<img.*?src="(.*?)".*?>/is';
            preg_match_all($preg, $str, $matches);
            @me = $matches[1][0]; // 获取第一张图的src
        {/dede:field}" alt="[field:title/]" />
    </a>
    <h3><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h3>
</li>

代码解释

  • {dede:field name='body' runphp='yes'}...{/dede:field}:这个标签会获取文章的body内容,并通过runphp='yes'属性允许我们在其中执行PHP代码。
  • preg_match_all:这是一个正则表达式函数,用于在文章内容中查找所有符合<img ... src="..." ...>模式的图片。
  • $matches[1][0]$matches[1]数组存放的是所有匹配到的src地址,[0]则取第一个,这样就实现了获取第一张图片的目的。

缺点

  • 如果文章没有图片,$matches[1][0]会是空的,img标签的src属性无效,会显示一个破损的图片图标。
  • 如果文章第一张图很大,直接用作缩略图会影响页面加载速度和布局。

结合默认图片(最完善的方案)

一个健壮的系统应该有兜底方案,我们可以将方法一和方法二结合,并加入默认图片,这样,即使没有设置自定义缩略图,文章也没有内容图,也能显示一张漂亮的默认图。

修改列表页模板(推荐写法)

这是最常用、最完善的代码,强烈推荐使用。

<li>
    <a href="[field:arcurl/]" title="[field:title/]">
        <!-- 结合自定义字段、正文第一张图和默认图片的完整代码 -->
        <img src="
        {dede:field name='litpic' runphp='yes'}
            if(@me == '') {
                // 如果自定义缩略图为空,则尝试获取正文第一张图
                $str = @me;
                $preg = '/<img.*?src="(.*?)".*?>/is';
                preg_match_all($preg, $str, $matches);
                if(isset($matches[1][0])) {
                    @me = $matches[1][0];
                } else {
                    // 如果正文也没有图,则使用默认图片
                    @me = '/images/default.jpg'; // 请替换成你的默认图片路径
                }
            }
        {/dede:field}" alt="[field:title/]" />
    </a>
    <h3><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h3>
</li>

代码解释

  1. {dede:field name='litpic'}:我们依然从litpic字段获取数据。
  2. if(@me == ''):判断获取到的缩略图地址是否为空。
  3. 如果为空,则执行正则表达式去body里找第一张图。
  4. 如果找到了,就用这张图;如果还是没找到,就使用我们预设的/images/default.jpg
  5. 整个逻辑都在runphp中完成,非常高效和智能。

常见问题与解决方案

为什么我设置了缩略图,但前台不显示?

  • 模板问题:确认你的列表模板 list_article.htm 中是否正确使用了 [field:litpic/]
  • 未生成:修改模板后,务必到后台重新生成列表页面。
  • 路径问题:检查图片上传后,在后台“附件管理”中查看图片路径是否正确,如果是绝对路径(如 http://...),确保你的网站域名配置正确,如果是相对路径,确保网站根目录正确。
  • 字段问题:确认你添加的自定义字段名称确实是 litpic,并且文章已经成功保存了这个字段的值。

缩略图尺寸不一,页面布局很乱怎么办?

你需要对获取到的图片进行裁剪或缩放,织梦有一个非常方便的标签 {dede:img} 来实现这个功能。

修改缩略图代码

<!-- 原始代码 -->
<img src="[field:litpic/]" alt="[field:title/]" />
<!-- 修改后,限制宽高为 200x150,并自动裁剪 -->
{dede:img text='[field:title/]' width='200' height='150'}
[field:litpic/]
{/dede:img}

{dede:img} 标签参数

  • width:缩略图宽度。
  • height:缩略图高度。
  • text:图片的alt文本。
  • autocut='yes':自动裁剪,会从图片中心开始截取指定大小的区域,保证图片填满容器,不会变形。强烈推荐加上此参数

结合完整方案的写法

<a href="[field:arcurl/]" title="[field:title/]">
    {dede:img text='[field:title/]' width='200' height='150' autocut='yes'}
        {dede:field name='litpic' runphp='yes'}
            if(@me == '') {
                $str = @me;
                $preg = '/<img.*?src="(.*?)".*?>/is';
                preg_match_all($preg, $str, $matches);
                if(isset($matches[1][0])) {
                    @me = $matches[1][0];
                } else {
                    @me = '/images/default.jpg';
                }
            }
        {/dede:field}
    {/dede:img}
</a>

这样,你所有的缩略图都会被统一处理成 200x150 像素,并且自动裁剪,页面会非常整齐。

方法 优点 缺点 适用场景
自定义字段 可控性强,图片质量高,加载快 需要手动上传 对图片有要求,追求效率和质量的网站
自动调用正文图 自动化,无需手动操作 不可控,可能加载大图,可能没有图 内容为主,图片为辅,对缩略图要求不高的博客
结合默认图 最完善,最健壮,有兜底方案 代码稍复杂 强烈推荐,几乎所有商业网站都采用这种方案

对于大多数网站,使用“方法三:结合默认图片”的方案,并用 {dede:img} 标签进行尺寸控制,是解决织梦文章列表缩略图问题的最佳实践。

-- 展开阅读全文 --
头像
织梦源码图片修改方法是什么?
« 上一篇 04-19
C语言long int与int有何区别?
下一篇 » 04-19

相关文章

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