织梦自定义模型图片如何调用?

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

下面我将为你详细讲解从最简单到最完整的几种调用方法,并附上实例。

核心原理

织梦的自定义模型数据存储在两个地方:

  1. 主表 (dede_archives):存储所有文章/模型共有的信息,如ID、标题、发布时间、作者等。
  2. 附加表 (dede_addon_xxx):存储特定模型的特有字段,xxx 是你在后台创建模型时生成的表名(addonarticle 是文章模型,addonshop 是商品模型,自定义的可能叫 addoncase 等)。

调用自定义模型的图片,关键在于从附加表中取出图片字段


准备工作:确保你的模型字段正确

在调用之前,请务必确认:

  1. 你已经成功创建了自定义模型(案例模型)。
  2. 在该模型中,你添加了一个图片类型的字段(字段名最好使用英文,litpicimglist)。
  3. 已经使用该模型添加了一些内容,并上传了图片。

页(单页)调用 {dede:field}

这是最简单的情况,在你需要显示图片的页面,通常是文章内容页(article_article.htm 或你自定义的模板文件)。

如果你的图片字段名是 litpic,直接使用:

<img src="{dede:field.litpic/}" alt="{dede:field.title/}" />

说明:

  • {dede:field.litpic/} 会直接输出当前文章附加表中 litpic 字段的值,这个值通常是图片的完整路径。
  • 这种方法适用于当前正在浏览的这篇自定义模型文章

在列表页(频道页)或首页调用 {dede:list}

这是最常见的需求,在频道列表页(如 list_case.htm)或首页调用自定义模型的文章列表。

关键点:addfieldschannel

你需要告诉 {dede:list} 标签,你需要从附加表中取出哪些字段。

假设你的情况:

  • 自定义模型名称:案例
  • 模型ID:1 (可以在后台“频道模型” -> “内容模型管理”中查看)
  • 附加表名:dede_addoncase (通常是 addon + 你的模型英文名或ID)
  • 图片字段名:litpic

在列表页模板(如 list_case.htm)中,代码如下:

{dede:list pagesize='10' addfields='litpic' channelid='1'}
  <li>
    <a href="[field:arcurl/]">
      <img src="[field:litpic/]" alt="[field:title/]" />
      <h3>[field:title/]</h3>
    </a>
  </li>
{/dede:list}

代码解释:

  • addfields='litpic':这是核心参数,它告诉 {dede:list} 在查询时,除了默认的主表字段,还要从附加表中取出 litpic 字段,如果需要多个字段,用逗号隔开,addfields='litpic,imgurl,description'
  • channelid='1':这也是核心参数,它指定了当前调用的是哪个模型的数据。请务必替换成你自己的模型ID
  • [field:litpic/]:在 {dede:list} 循环体内,使用 [field:字段名/] 来调用通过 addfields 指定的附加表字段。

在首页或任意页面调用 {dede:arclist}

如果你想在首页或其他频道页调用自定义模型的列表,而不是进入该模型的频道页,则需要使用 {dede:arclist}

{dede:arclist} 的参数比 {dede:list} 更丰富,也更灵活。

假设你的情况同上:

{dede:arclist channelid='1' addfields='litpic' row='8' titlelen='30'}
  <div class="item">
    <a href="[field:arcurl/]">
      <img src="[field:litpic/]" alt="[field:title/]" />
      <p>[field:title/]</p>
    </a>
  </div>
{/dede:arclist}

代码解释:

  • channelid='1':指定模型ID,必须要有
  • addfields='litpic':从附加表获取指定字段,必须要有
  • row='8':调用8条记录,len='30'`:标题长度限制为30个字符。
  • [field:litpic/]:同样,在循环体内调用附加表字段。

处理多图片字段(图集字段)

如果你的自定义模型中添加的是“图集”类型的字段(例如字段名为 imglist),那么调用方式会有所不同,因为你需要遍历图片数组。

假设你的情况:

  • 模型ID:1
  • 图集字段名:imglist

在列表页中调用图集的第一张图(通常用作缩略图):

{dede:list pagesize='10' addfields='imglist' channelid='1'}
  <li>
    <!-- 调用图集中的第一张图片 -->
    <img src="[field:imglist function='(@me)[0]'/]" alt="[field:title/]" />
    <a href="[field:arcurl/]">[field:title/]</a>
  </li>
{/dede:list}

代码解释:

  • [field:imglist function='(@me)[0]'/]
    • @me 代表当前字段的原始值,对于图集字段,它是一个包含所有图片路径的字符串,格式如 路径1|路径2|路径3
    • function='...' 允许你对 @me 进行PHP函数处理。
    • explode('|', @me) 将字符串按 分割成一个数组。
    • [0] 取出数组的第一个元素,也就是第一张图片的路径。 页调用图集的所有图片(需要配合JS或CSS实现幻灯片效果):**
{dede:field.imglist function='str_replace("|", ",", @me)'/}

这段代码会输出所有图片路径,用逗号隔开,方便JS插件(如Bootstrap Carousel)调用。


常见问题与解决方案 (FAQ)

问题:调用后图片不显示,或者显示为空。

  • 原因1channelid 错误,请务必去后台确认你的自定义模型ID。
  • 原因2addfields 中的字段名写错了,请去后台“内容模型管理” -> “字段管理”中确认字段名。
  • 原因3:该篇文章没有填写该图片字段,检查一下后台数据。
  • 原因4:图片路径问题,确保图片已经上传到服务器,并且附加表中的路径是正确的。

问题:调用后图片路径不完整或错误。

  • 原因:织梦存储的可能是相对路径,可以在标签里使用 function 函数来处理。

  • 解决方案:在调用时拼接网站根目录。

    <!-- 在列表页中 -->
    <img src="[field:litpic function='str_replace("..", "", "@me")'/]" alt="[field:title/]" />
    <!-- 更稳妥的方法是判断是否以 http 开头 -->
    <img src="[field:litpic runphp='yes'] if(strpos(@me, 'http') === false) @me = $cfg_cmspath . @me; @me; [/field:litpic]" alt="[field:title/]" />

    第二种方法更健壮,它会检查路径是否已经是完整的URL,如果不是,则补上网站根目录。

调用场景 推荐标签 核心参数 附加表字段调用方式
{dede:field} {dede:field.字段名/}
模型列表页 {dede:list} addfields='字段名'
channelid='模型ID'
[field:字段名/]
首页/其他页 {dede:arclist} addfields='字段名'
channelid='模型ID'
[field:字段名/]
图集调用 同上,配合function 同上 [field:字段名 function='处理函数'/]

channelidaddfields 是调用自定义模型数据的两个“魔法钥匙”,只要正确使用它们,就能灵活地调用到你想要的任何字段,包括图片。

-- 展开阅读全文 --
头像
C语言如何解ax²+bx+c=0方程?
« 上一篇 01-11
C语言中include包含.c文件可行吗?
下一篇 » 01-12

相关文章

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