整体思路
整个过程分为四个主要步骤:

- 数据库层面:在
dede_archives表(文章表)中添加一个新的字段来存储自定义缩略图的路径。 - 后台界面:修改后台的文章添加/编辑模板,为新添加的字段生成一个输入框。
- 数据处理:修改后台处理文章添加/编辑的PHP文件,将新字段的数据保存到数据库。
- 前台调用:修改前台模板文件,使用新的字段标签来调用自定义缩略图。
第一步:数据库层面添加新字段
这是最基础也是最关键的一步,我们需要向文章数据表中增加一个列。
- 登录你的网站数据库管理工具:通常是 phpMyAdmin。
- 选择正确的数据库:选择你的DedeCMS所使用的数据库名。
- 找到并编辑
dede_archives表:- 在左侧列表中找到
dede_archives表(如果你的表前缀不是dede_,请使用你自己的前缀)。 - 点击“结构”或“操作” -> “结构”。
- 在左侧列表中找到
- 添加新字段:
- 在表结构列表下方,找到“添加新字段”的选项。
- 填写以下信息:
- 字段名:
thumb_custom(这个名称可以自定义,建议使用英文,不要用空格或特殊字符) - 类型:
VARCHAR(和系统自带的litpic字段类型一致) - 长度/值:
255(设置一个足够长的长度,以存放完整的图片URL) - 排序规则:
utf8_general_ci(保持和数据库其他字段一致) - 属性:
utf8_general_ci(保持和数据库其他字段一致) - Null:勾选
是(允许为空) - 默认值:留空 (不填写)
- 字段名:
- 点击“执行”或“保存”按钮。
至此,数据库层面的修改已经完成,你的 dede_archives 表现在有了一个名为 thumb_custom 的新字段,用于存储自定义缩略图。
第二步:后台界面添加输入框
我们需要让编辑者在发布文章时能够填写这个新字段的值,这需要修改DedeCMS的后台模板文件。
-
找到文章编辑模板文件: 文章添加和编辑共用一个模板文件,路径通常是:
/dede/templets/article_add.htm(同样,如果你的后台目录不是dede,请自行调整路径)
(图片来源网络,侵删) -
编辑
article_add.htm文件: 用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开这个文件。 -
添加自定义输入框: 在文件中找到合适的位置插入新的表单元素,系统自带的
litpic(缩略图)字段附近是一个不错的选择,你可以参考litpic的代码来创建一个新的输入框。找到类似这样的代码段(用于系统缩略图):
<tr> <td height="24" colspan="2" bgcolor="#f7f7f7"> 缩略图:</td> </tr> <tr> <td height="80" colspan="2" bgcolor="#f7f7f7"> <table width="100%" border="0" cellspacing="1" cellpadding="1"> <tr> <td width="250"> <input name="litpic" type="text" id="litpic" value="<?php echo $arcRow['litpic']; ?>" style="width:150px" /> <input type="button" name="set1" value="选择..." style="width:60px" onClick="SelectImage('form1.litpic','small');" /> </td> <td>推荐尺寸:280px * 200px (文章封面)</td> </tr> </table> </td> </tr>在它后面,模仿它的结构,添加我们自己的自定义缩略图输入框:
(图片来源网络,侵删)<!-- 在上面的 </tr> 后面添加如下代码 --> <tr> <td height="24" colspan="2" bgcolor="#f7f7f7"> 自定义缩略图:</td> </tr> <tr> <td height="80" colspan="2" bgcolor="#f7f7f7"> <table width="100%" border="0" cellspacing="1" cellpadding="1"> <tr> <td width="250"> <input name="thumb_custom" type="text" id="thumb_custom" value="<?php echo $arcRow['thumb_custom']; ?>" style="width:150px" /> <input type="button" name="set2" value="选择..." style="width:60px" onClick="SelectImage('form1.thumb_custom','small');" /> </td> <td>请输入自定义缩略图的URL,或点击“选择”按钮上传/选择图片。</td> </tr> </table> </td> </tr>代码解释:
name="thumb_custom":这个name属性至关重要,它必须与我们第一步在数据库中创建的字段名完全一致,后台PHP程序会通过这个name来获取提交的数据。id="thumb_custom":元素的唯一标识,方便JavaScript操作。value="<?php echo $arcRow['thumb_custom']; ?>":这行代码用于在编辑文章时,显示当前文章已保存的自定义缩略图路径。$arcRow是一个包含文章所有信息的数组。onClick="SelectImage('form1.thumb_custom','small');":这是DedeCMS内置的图片选择器调用代码,它会弹出一个窗口让你选择本站已上传的图片,选中的图片路径会自动填充到thumb_custom输入框中。'form1.thumb_custom'指定了要填充的表单元素。
-
保存文件:将修改后的
article_add.htm文件上传回服务器。
登录你的DedeCMS后台,进入“核心” -> “内容发布” -> “添加文档”或“编辑文档”,你应该能看到新增的“自定义缩略图”输入框了。
第三步:后台数据处理
后台界面已经有了输入框,但提交的数据还需要被正确地处理并保存到数据库,这需要修改对应的PHP处理文件。
-
找到文章发布处理文件:
- 添加文章:
/dede/archives_add.php - 编辑文章:
/dede/archives_edit.php
- 添加文章:
-
在
archives_add.php中修改:- 找到处理
litpic字段的代码段,通常在SQL插入语句附近,它看起来可能像这样:// ... 其他代码 ... $inquery = "INSERT INTO `dede_archives`( ... , `litpic`, ... ) VALUES ( ... , '$litpic', ... )"; // ... 其他代码 ...
- 在SQL语句的
VALUES部分和INSERT INTO的字段列表部分,都加入thumb_custom。// ... 其他代码 ... $inquery = "INSERT INTO `dede_archives`( ... , `litpic`, `thumb_custom`, ... ) VALUES ( ... , '$litpic', '$thumb_custom', ... )"; // ... 其他代码 ...
- 注意:PHP会自动通过
$_POST['thumb_custom']获取到表单提交的值,你需要确保变量$thumb_custom已经被定义,在文件的开头会有类似$title = cn_substrR($title, $cfg_title_maxlen);的代码,你可以在那里添加一行:$thumb_custom = isset($_POST['thumb_custom']) ? trim($_POST['thumb_custom']) : '';来确保变量存在且被过滤。
- 找到处理
-
在
archives_edit.php中修改:- 这个文件用于更新已有文章,找到更新
dede_archives表的SQL语句。 - 它通常是一个
UPDATE语句,// ... 其他代码 ... $upquery = "UPDATE `dede_archives` SET ... , `litpic`='$litpic', ... WHERE id='$aid'"; // ... 其他代码 ...
- 在
SET子句中添加thumb_custom字段:// ... 其他代码 ... $upquery = "UPDATE `dede_archives` SET ... , `litpic`='$litpic', `thumb_custom`='$thumb_custom', ... WHERE id='$aid'"; // ... 其他代码 ...
- 同样,确保在文件开头定义了
$thumb_custom变量。
- 这个文件用于更新已有文章,找到更新
-
保存文件:将修改后的
archives_add.php和archives_edit.php文件上传回服务器。
当你通过后台添加或编辑文章并填写“自定义缩略图”后,数据就能被正确保存到数据库了。
第四步:前台模板调用
最后一步,就是在我们需要显示这个自定义缩略图的前台模板中调用它。
-
找到前台模板文件: 根据你的网站结构,找到需要显示缩略图的模板文件。
- 首页文章列表:
/templets/default/index.htm - 栏目页文章列表:
/templets/default/list_栏目ID.htm - 页:
/templets/default/article_article.htm
- 首页文章列表:
-
添加新的标签调用: DedeCMS的模板引擎使用
{dede:}标签,我们使用field标签来调用文章的任意自定义字段。假设我们要在首页文章列表中显示自定义缩略图,并把它放在系统缩略图
{dede:field name='litpic'/}的位置。修改前(只显示系统缩略图):
<a href="[field:arcurl/]"><img src="[field:litpic/]" alt="[field:title function='html2text(@me)'/]" /></a>
修改后(优先显示自定义缩略图,如果没有则显示系统缩略图): 这是最推荐的做法,通过一个简单的
if判断来实现。{dede:field name='thumb_custom' runphp='yes'} if(@me != '') { @me = '<img src="' . @me . '" alt="[field:title function='html2text(@me)'/]" />'; } else { @me = '<img src="[field:litpic/]" alt="[field:title function='html2text(@me)'/]" />'; } {/dede:field}或者,如果你想用更简洁的
if语法(如果PHP版本支持):{dede:field name='thumb_custom' runphp='yes'} @me = (@me != '') ? '<img src="' . @me . '" alt="[field:title function='html2text(@me)'/]" />' : '<img src="[field:litpic/]" alt="[field:title function='html2text(@me)'/]" />'; {/dede:field}代码解释:
{dede:field name='thumb_custom' runphp='yes'}:调用thumb_custom字段的值,并启用PHP运行。if(@me != ''):判断thumb_custom的值是否为空。@me = '...':如果条件成立(不为空),就将@me变量的值设置为自定义缩略图的<img>else { @me = '...' }:如果条件不成立(为空),就将@me变量的值设置为系统自带的litpic的<img>[field:arcurl/]、[field:title function='html2text(@me)'/]等是嵌套的标签,用于获取文章链接、标题等信息。
-
保存模板文件:将修改后的模板文件上传到服务器,并更新网站缓存(后台的“系统” -> “一键更新网站” -> “更新HTML”)。
通过以上四个步骤,你就可以成功地在DedeCMS中为文档添加一个自定义的缩略图属性了。
- 数据库:添加字段
thumb_custom。 - 后台:修改
article_add.htm,添加name="thumb_custom"的输入框。 - 处理:修改
archives_add.php和archives_edit.php,将thumb_custom写入SQL语句。 - 前台:在模板中使用
{dede:field name='thumb_custom' runphp='yes'}进行调用。
这个过程不仅适用于“缩略图”,也可以推广到添加任何其他自定义文章属性,只需将字段名和 name 属性统一即可。
