使用 haspic 属性(最推荐,最简单)
这是织梦官方提供的最直接、最简洁的方法。arclist 和 list 标签都支持 haspic 属性。

适用场景:
- 在首页、栏目页等使用
{dede:arclist}标签的地方。 - 在列表页使用
{dede:list}标签的地方。
操作步骤:
-
打开你需要修改的模板文件,
- 首页模板:
/templets/default/index.htm - 栏目列表页模板:
/templets/default/list_category.htm(具体路径根据你的模板命名规则而定)
- 首页模板:
-
找到文章列表标签,通常是
{dede:arclist}或{dede:list}。 -
在标签内添加
haspic='1'属性。
(图片来源网络,侵删)
示例代码:
首页/栏目页 ({dede:arclist}) 修改
{dede:arclist titlelen='30' row='10' haspic='1'}
<li>
<a href="[field:arcurl/]">
<img src="[field:litpic/]" alt="[field:title/]" />
<span>[field:title/]</span>
</a>
</li>
{/dede:arclist}
说明:
haspic='1'的作用是只调用包含缩略图的文章。- 这样做之后,即使文章没有设置缩略图,也不会被显示出来。
列表页 ({dede:list}) 修改
{dede:list pagesize='10' haspic='1'}
<li>
<a href="[field:arcurl/]">
<img src="[field:litpic/]" alt="[field:title/]" />
<h3>[field:title/]</h3>
</a>
</li>
{/dede:list}
说明:
- 在列表页中使用
haspic='1'同样有效,它会过滤掉没有缩略图的文章。
使用 innertext 和 if 判断(更灵活)
如果你希望在“有缩略图”和“无缩略图”时显示不同的样式,或者对无缩略图的文章进行特殊处理(例如显示一个默认图片),可以使用 {dede:if} 条件判断。
适用场景:
- 需要对有无缩略图的文章进行差异化显示时。
操作步骤:
-
同样,打开你的模板文件。
-
在
{dede:arclist}或{dede:list}标签内部,使用{dede:if}来判断[field:litpic/]是否为空。
示例代码:
{dede:arclist titlelen='30' row='10'}
<li>
{dede:if field='litpic' }
<!-- 如果有缩略图,则显示缩略图和链接 -->
<a href="[field:arcurl/]">
<img src="[field:litpic/]" alt="[field:title/]" />
<span>[field:title/]</span>
</a>
{else /}
<!-- 如果没有缩略图,可以显示一个默认图片或者只显示标题 -->
<a href="[field:arcurl/]">
<img src="/templets/default/images/default.jpg" alt="[field:title/]" /> <!-- 请替换为你的默认图片路径 -->
<span>[field:title/]</span>
</a>
<!-- 或者只显示文字 -->
/*
<a href="[field:arcurl/]">
<span>[field:title/]</span>
</a>
*/
{/dede:if}
</li>
{/dede:arclist}
说明:
{dede:if field='litpic' }会判断文章的缩略图字段是否不为空。- 这种方法非常灵活,可以满足各种复杂的布局需求,但如果你想实现“只显示有缩略图的”,直接在里面调用
haspic='1'会更高效。
修改PHP源码(不推荐,除非必要)
警告: 此方法涉及修改织梦核心文件,可能会导致升级困难或在后续版本中失效,请务必在修改前备份你的文件!
适用场景:
- 你希望全局、永久性地改变织梦的默认行为,让所有地方默认只调用有缩略图的文章。
- 你无法修改所有模板文件。
操作步骤:
-
备份文件!备份文件!备份文件!
-
找到并打开织梦的核心文件:
/include/arc.listview.class.php(用于列表页) 和/include/arc.archives.class.php(用于文章页,但通常列表页是主要修改对象),这里我们以列表页为例。 -
在
ArcListView类中找到GetList()方法。 -
在该方法的SQL查询语句中,添加一个条件来筛选
litpic字段。
具体修改:
在 ArcListView.class.php 文件中,找到类似下面这样的代码段:
// 大约在200行左右,根据版本不同位置可能略有差异
$this->dsql->SetQuery("SELECT id,typename,isdefault,defaultname,namerule2,moresite,siteurl,sitepath
FROM `#@__arctype` WHERE id='".$this->TypeLink->TypeInfos['id']."' ");
$this->dsql->Execute('t');
$this->TypeLink->TypeInfos = $this->dsql->GetArray('t');
继续向下找到真正获取文章列表的SQL查询,它通常在一个 if 语句块里,
// ... 省略其他代码 ...
if($this->TotalResult > 0)
{
$this->dsql->SetQuery("SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,
tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath
FROM `#@__archives` arc
LEFT JOIN `#@__arctype` tp ON arc.typeid=tp.id
WHERE {$this->addSql} $orderQuery
LIMIT {$this->PageSize} OFFSET {$this->PageNo-1}");
// ... 省略其他代码 ...
}
关键修改点:
你需要修改 WHERE 子句,在 $this->addSql 后面,添加一个 AND 条件。
修改前:
WHERE {$this->addSql} $orderQuery
修改后:
WHERE {$this->addSql} AND arc.litpic != '' $orderQuery
说明:
arc.litpic != ''这个条件会确保只选择litpic字段不为空的文章。- 修改完成后,保存文件,然后清空一下网站缓存(在后台“系统” -> “一键更新网站” -> “更新缓存”)。
总结与建议
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
方法一 (haspic='1) |
最简单、最安全、官方支持,修改模板即可,不涉及核心文件。 | 只能实现“只显示有缩略图的”,无法自定义无图时的样式。 | ★★★★★ (强烈推荐) |
方法二 (if 判断) |
最灵活,可以自定义有无缩略图时的不同显示方式。 | 代码稍复杂,如果只想隐藏无图文章,不如方法一简洁。 | ★★★★☆ (推荐用于特殊布局) |
| 方法三 (修改PHP) | 一劳永逸,全局生效,无需修改每个模板。 | 有风险,破坏核心文件,升级困难,可能与其他插件冲突。 | ★☆☆☆☆ (不推荐,除非有特殊且全局的需求) |
对于绝大多数用户来说,直接使用方法一,在 {dede:arclist} 或 {dede:list} 标签中添加 haspic='1' 属性,是最佳选择。 它简单、安全、高效。
