织梦无缩略图不显示,问题出在哪?

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

使用 if 条件判断(最推荐,最灵活)

这是最标准、最灵活的方法,通过在模板中使用织梦的 if 条件语句来判断当前文章是否有缩略图,然后决定是否显示缩略图区域。

织梦 无缩略图 不显示
(图片来源网络,侵删)

适用场景:适用于所有列表页和内容页,可以完全控制缩略图的HTML结构。

操作步骤

  1. 找到你的列表模板文件: 通常位于 /templets/你的模板名称/ 目录下,文件名可能是 list_article.htmindex.htm 或其他自定义的列表页模板。

  2. 定位缩略图代码: 在模板文件中找到循环文章列表的代码块,通常是这样的结构:

    织梦 无缩略图 不显示
    (图片来源网络,侵删)
    {dede:arclist titlelen='40' row='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <!-- 缩略图代码通常在这里 -->
        <a href="[field:arcurl/]"><img src="[field:litpic/]" alt="[field:title/]" /></a>
    </li>
    {/dede:arclist}
  3. if 语句包裹缩略图代码: 将 <img> 标签及其链接用 {dede:if} 条件语句包裹起来,判断条件是 field:litpic 是否不为空()。

    修改后的代码如下

    {dede:arclist titlelen='40' row='10'}
    <li>
        <!-- 文章标题始终显示 -->
        <a href="[field:arcurl/]" class="title">[field:title/]</a>
        <!-- 使用 if 判断是否有缩略图 -->
        {dede:if field:litpic != ''}
        <a href="[field:arcurl/]" class="pic">
            <img src="[field:litpic/]" alt="[field:title/]" />
        </a>
        {/dede:if}
        <!-- 文章摘要等其他信息 -->
        <p class="desc">[field:description function='cn_substr(@me,100)'/]...</p>
    </li>
    {/dede:arclist}

代码解释

  • {dede:if field:litpic != ''}:这是核心判断语句,它检查当前文章的缩略图字段 litpic 的值是否不等于空字符串。
  • 如果有缩略图(litpic 有值),则 {dede:if}{/dede:if} 之间的代码(即 <a><img> 标签)会被执行并显示。
  • 如果没有缩略图(litpic 为空),则中间的代码会被完全忽略,不会在页面上留下任何空白。

优点

织梦 无缩略图 不显示
(图片来源网络,侵删)
  • 干净整洁:没有缩略图时,页面上不会有空的 <img> 标签或多余的 <div>,布局不会错乱。
  • 灵活控制:可以自由决定在无缩略图时显示什么,或者什么都不显示。

使用 @me 变量替换(适用于内容页)

这种方法主要用于文章内容页(article_article.htm),通过在调用标签时直接处理变量,实现“无图则不显示”的效果。

适用场景:主要用于内容页的缩略图调用。

操作步骤

  1. 页模板: 文件路径通常是 /templets/你的模板名称/article_article.htm

  2. 找到缩略图调用标签: 一般是这样的形式:

    <img src="{dede:field name='litpic'/}" alt="{dede:field name='title'/}" />
  3. 使用 function 修饰符处理变量: 修改标签,利用 function='str_replace()' 函数,litpic 为空,就将其替换为一个空字符串。

    修改后的代码如下

    {dede:field name='litpic' function='str_replace("@me", "", "@me")'/}

    或者更严谨的写法(推荐)

    {dede:field name='litpic' function='(@me ? "<img src=\'@me\' alt=\'{dede:field.name=\'title\'}\' />" : "")'/}

    这种写法使用了三元运算符 条件 ? 值1 : 值2

    • @me ? ...:判断 @me(即 litpic 的值)是否存在。
    • 如果存在(为真),则输出 "<img src=\'@me\' ... />"
    • 如果不存在(为假),则输出空字符串 。

优点

  • 代码简洁,直接在标签内部完成逻辑判断。
  • 页,避免在模板中写复杂的 if 语句。

使用CSS隐藏(最简单,但有副作用)

这种方法不修改织梦模板,而是通过CSS样式来隐藏空的缩略图容器,它依赖于HTML结构。

适用场景:当你不想修改模板文件,或者模板结构比较固定时。不推荐作为首选方法,因为它只是“隐藏”而不是“不显示”。

操作步骤

  1. 确保模板中缩略图有固定的父容器: 假设你的模板中缩略图HTML结构如下,并且有一个 class="thumbnail" 的父 div

    <div class="thumbnail">
        <a href="[field:arcurl/]"><img src="[field:litpic/]" alt="[field:title/]" /></a>
    </div>
  2. 在CSS文件中添加隐藏规则: 使用CSS的 empty 选择器,它可以选中没有任何内容(包括空格)的元素。

    /* 在你的CSS文件中添加以下代码 */
    .thumbnail:empty {
        display: none; /* 或者 visibility: hidden; */
    }

代码解释

  • .thumbnail:empty:选择所有 classthumbnail 并且内部为空的 div
  • display: none;:将这个空的 div 完全从文档流中移除,不占任何空间。
  • visibility: hidden;:将 div 设为不可见,但仍然占据原来的空间。

缺点

  • 有残留HTML:即使图片不显示,空的 <div class="thumbnail"></div> 标签依然会存在于HTML源码中。
  • 依赖HTML结构:如果缩略图的父容器没有固定的 classid,此方法将无法使用。
  • 不够优雅:从逻辑上讲,这是“事后补救”,而不是“事前预防”。

总结与建议

方法 优点 缺点 推荐度
if 条件判断 最灵活、最干净、最符合逻辑,能完全控制输出。 需要修改模板文件,对新手需要一点学习成本。 ⭐⭐⭐⭐⭐ (强烈推荐)
@me 变量替换 代码简洁,直接在标签内处理,适合内容页。 可读性稍差,主要用于单一字段的判断。 ⭐⭐⭐⭐ (推荐用于内容页)
CSS隐藏 无需修改模板,实现简单。 有残留HTML,依赖特定结构,不够优雅。 ⭐⭐ (仅作为备选方案)

最终建议

对于绝大多数情况,请使用 方法一(if 条件判断),它是最规范、最可靠、对SEO和页面性能都最好的解决方案,无论是列表页还是内容页,通过 {dede:if} 进行判断都是最佳实践。

-- 展开阅读全文 --
头像
深入体验C语言项目开发PDF如何学透项目开发?
« 上一篇 01-09
织梦如何调用主栏目下的子栏目?
下一篇 » 01-09

相关文章

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

目录[+]