dede首页列表如何调用图片?

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

使用官方推荐的自定义模型(最灵活、最强大)

这是处理复杂列表需求(比如不同栏目显示不同字段)的最佳方法,它允许你为列表项添加自定义的图片字段。

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

步骤 1:创建自定义模型

  1. 登录后台:进入DedeCMS后台管理。
  2. 进入模型管理:在顶部菜单栏,找到 核心 -> 内容模型管理
  3. 添加新模型:点击 增加新模型
    • 模型名称:填写一个你容易识别的名字,带图片的列表
    • 模型表:系统会自动生成一个,如 dede_addonarticle2(后面的数字是递增的),无需修改。
    • 字段列表:点击 保存,然后点击 字段管理
  4. 添加图片字段
    • 在字段管理页面,点击 增加新字段
    • 字段名称litpic (这是DedeCMS默认缩略图的字段名,复用它可以简化模板调用)。
    • 字段标识litpic (与字段名保持一致)。
    • 数据类型:选择 多媒体
    • 默认值:可以留空,或者设置一个默认图片路径。
    • 上传目录:设置为 /uploads/default/ 或你自定义的目录。
    • 其他选项:根据需要设置,比如是否允许为空等。
    • 点击 保存

步骤 2:为栏目选择模型

  1. 进入栏目管理:在 频道 -> 栏目管理 中,找到你需要显示图片的栏目。
  2. 修改栏目:点击该栏目后面的 修改
  3. 选择模型:在 常规选项 标签页下,找到 内容模型,选择你刚刚创建的 带图片的列表 模型。
  4. 保存:点击 确定 保存。

步骤 3:发布文章时上传图片

当你在这个栏目下发布或修改文章时,你会发现文章编辑页面上多了一个“缩略图”的选项,在这里上传你想要在列表中显示的图片即可。

步骤 4:修改首页模板调用代码

这是最关键的一步,你需要修改首页的模板文件(通常是 index.htm)。

  1. 找到列表调用标签:在模板中找到类似 {dedarclist} 的标签,它可能长这样:

    {dedarclist typeid='1' row='8' titlelen='30'}
    <li>
        <a href='[field:arcurl/]'>[field:title/]</a>
    </li>
    {/dedarclist}
    • typeid='1':调用指定栏目ID下的文章。
    • row='8':调用8条记录。
    • titlelen='30'长度限制为30个字符。
  2. 添加图片调用代码:在 {dedarclist} 标签内部,使用 [field:litpic/] 来调用你上传的图片,修改后的代码如下:

    dede 首页列表调用图片
    (图片来源网络,侵删)
    {dedarclist typeid='1' row='8' titlelen='30'}
    <li>
        <!-- 调用缩略图,并添加链接 -->
        <a href='[field:arcurl/]'>
            <img src='[field:litpic/]' alt='[field:title/]' />
        </a>
        <!-- 调用标题 -->
        <a href='[field:arcurl/]'>[field:title/]</a>
    </li>
    {/dedarclist}

代码解释

  • [field:litpic/]:这是调用文章缩略图地址的标签。
  • alt='[field:title/]':为图片添加 alt 属性,这有利于SEO,显示图片的标题。
  • 将图片和标题都包裹在 <a href='[field:arcurl/]'> 中,这样点击图片或标题都能跳转到文章详情页。

使用默认的“带图片的列表”频道(最简单)

如果你的需求比较简单,只是想在首页显示一个包含图片的列表,可以使用DedeCMS自带的“带图片的列表”频道。

步骤 1:创建“带图片的列表”频道

  1. 进入频道管理:在 频道 -> 频道管理 中,点击 增加顶级频道
  2. 选择频道类型:在 频道类型 中,选择 带图片的列表
  3. 填写信息
    • 栏目名称首页图文推荐
    • 栏目目录indexpic
    • 选择栏目:在 选择栏目 中,勾选你想要在这个频道中显示的栏目。
    • 其他选项根据需要填写。
  4. 保存:点击 确定

步骤 2:修改首页模板

在首页模板 index.htm 中,使用 {dede:flink/} 的类似语法来调用这个新创建的频道。

{dede:imglist typeid='你的栏目ID' row='8'}
<dd>
    <a href="[field:arcurl/]">
        <img src="[field:picname/]" alt="[field:title/]" />
        <span>[field:title/]</span>
    </a>
</dd>
{/dede:imglist}

注意

dede 首页列表调用图片
(图片来源网络,侵删)
  • 这个方法会创建一个独立的频道,调用方式与 {dedarclist} 略有不同。
  • [field:picname/] 是这个频道中调用图片地址的标签。
  • 这种方法不如方法一灵活,因为它通常用于调用一个固定栏目的图片列表。

直接调用文章正文中的第一张图片(最快捷,但不推荐)

如果你不想上传缩略图,而是希望自动提取文章内容(body字段)中的第一张图片作为列表图,可以使用这个方法。注意:此方法需要修改系统文件,有一定风险,且对SEO不友好。

步骤 1:修改 /include/taglib/arclist.lib.php 文件

  1. 用FTP或服务器文件管理器,打开 include/taglib/arclist.lib.php 文件。

  2. 找到大约第760行左右的 $fields['litpic'] = $row['litpic']; 这一行。

  3. 在这行代码的下面,添加以下PHP代码:

    // 如果没有缩略图,则获取文章内容中的第一张图片
    if(empty($fields['litpic']) || $fields['litpic'] == "/images/defaultpic.gif"){
        $body = $row['body']; // 获取文章内容
        $preg = "/<img.*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>/i"; // 匹配img标签的正则表达式
        preg_match_all($preg, $body, $match);
        if(isset($match[1][0])){
            $fields['litpic'] = $match[1][0]; // 将第一张图片地址赋值给litpic字段
        } else {
            $fields['litpic'] = "/images/defaultpic.gif"; // 如果没有找到图片,使用默认图片
        }
    }

步骤 2:修改首页模板

首页模板的调用代码和方法一完全一样,因为我们是“骗”系统让它认为文章已经有 litpic 字段了。

{dedarclist typeid='1' row='8' titlelen='30'}
<li>
    <a href='[field:arcurl/]'>
        <img src='[field:litpic/]' alt='[field:title/]' />
    </a>
    <a href='[field:arcurl/]'>[field:title/]</a>
</li>
{/dedarclist}

此方法的缺点

  • 性能影响:每次调用列表,系统都需要去解析文章内容,会增加服务器负担。
  • 图片尺寸不一:直接调用正文中的图片,尺寸可能很大,导致页面布局混乱。
  • SEO风险:如果正文第一张图片与文章主题无关,用作列表图对SEO不利。
  • 修改核心文件:升级DedeCMS时,此修改可能会被覆盖。

总结与推荐

方法 优点 缺点 推荐场景
自定义模型 最灵活、最规范、性能最好、对SEO最友好 需要额外设置模型和栏目 绝大多数情况下的首选,特别是商业网站或对要求较高的项目。
带图片列表频道 设置简单,官方支持 不够灵活,调用方式受限 需要在首页展示一个固定的、独立的图片推荐区域。
提取正文图片 无需额外操作,最“懒”的方法 性能差、图片尺寸难控制、有SEO风险、修改核心文件 不推荐,仅适用于临时测试或对性能和SEO要求极低的个人博客。

强烈建议你使用方法一(自定义模型),这是最专业、最稳定、最符合DedeCMS设计思想的做法,虽然前期设置多花几分钟,但后期维护和扩展会非常方便。

-- 展开阅读全文 --
头像
C语言如何找出100到200之间的素数?
« 上一篇 02-16
Windows多线程C语言如何高效同步?
下一篇 » 02-16

相关文章

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

目录[+]