- 后台发布文章时的标题输入框长度限制:防止用户输入过长的标题。
- 前台页面显示标题的长度限制在列表页、内容页等地方显示的字符数,避免页面布局错乱。
下面我将分步详细讲解如何设置这两个方面的标题长度。
设置后台标题输入框的长度限制
这个限制主要作用于内容发布界面,通过修改模板文件来实现。
适用场景:你想让后台的标题输入框看起来更整洁,或者从源头上限制用户输入过长的标题。
操作步骤:
-
找到文件: 登录你的网站后台,通过 FTP 或文件管理器找到以下文件:
dede/templets/article_edit.htm这个文件是文章编辑页面的模板文件。
-
修改代码: 用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开
article_edit.htm文件。 -
定位代码: 在文件中搜索
<input关键字,找到标题输入框的代码行,它看起来通常是这样的:<input name="title" type="text" id="title" value="<?php echo $title; ?>" style="width:400px" class="all-txt" />
-
修改
style中的width属性: 你可以通过修改width: 400px的值来改变输入框的宽度,想让它变窄一些,可以改成width: 300px。修改后示例:
<input name="title" type="text" id="title" value="<?php echo $title; ?>" style="width:300px" class="all-txt" />
-
保存文件: 保存修改后的
article_edit.htm文件,并覆盖服务器上的原文件。 -
刷新后台: 重新登录后台,进入“核心” -> “内容模型管理” -> “普通文章” -> “更改”,点击“更新系统缓存”,然后再去发布文章,你就会看到标题输入框的长度已经改变了。
注意:这只是限制了输入框的显示宽度,用户仍然可以通过输入超过数据库字段长度的字符来“绕过”这个限制,要真正限制数据库存储的长度,需要修改数据库结构,但这不推荐普通用户操作,有风险。
设置前台页面标题的显示长度(常用且重要)
这才是我们通常所说的“设置标题长度”,目的是控制标题在前台列表、首页等位置显示的字符数,防止撑破页面布局。
DedeCMS 提供了非常方便的内置函数 cn_substr() 来实现这个功能。
场景1:在列表页(如首页、栏目页)中截取标题
在列表页模板中(通常是 templets/default/index.htm 或 templets/default/list_article_category.htm通常通过 arc.title 调用。
修改前代码:
<a href='[field:arcurl/]'>[field:title/]</a>
修改后代码(截取前20个字符):
使用 cn_substr() 函数,第一个参数是字段名,第二个参数是截取的长度。
<a href='[field:arcurl/]'>[field:title function='cn_substr(@me,20)'/]</a>
代码解释:
[field:title function='cn_substr(@me,20)'/]这段代码的意思是:[field:title/]字段的原始内容。function='...':调用一个函数。@me:代表当前字段的值,也就是[field:title/]的内容。cn_substr(@me, 20):调用cn_substr函数,对@me的内容截取前 20 个字符。
你可以根据需要修改 20 这个数字,比如改成 30 或 15。
进阶用法(添加省略号):
为了让截取后的标题更美观,我们通常会在末尾加上省略号 ,可以通过 str_replace 函数结合 cn_substr 来实现。
<a href='[field:arcurl/]'>[field:title function='str_replace(cn_substr(@me,20), "...", cn_substr(@me,20))'/]</a>
或者更简洁的写法(如果标题被截断,则加省略号):
{dede:field.title runphp='yes'}
if(strlen(@me)>20) @me = cn_substr(@me,20)."...";
else @me = @me;
{/dede:field.title}
然后在 <a> 标签中调用这个变量。
场景2:在文章内容页中截取标题
页模板(通常是 templets/default/article_article.htm通常直接显示。
修改前代码:
<h1 class="title">[field:title/]</h1>
修改后代码(截取前50个字符):
<h1 class="title">[field:title function='cn_substr(@me,50)'/]</h1>
同样,你可以根据页面布局调整 50 这个数值。
设置标题在搜索结果页的长度
搜索结果页(search.php)的模板通常是 templets/default/default/search.htm,修改方法与列表页完全相同。
修改前:
<a href="[field:arcurl/]">[field:title/]</a>
修改后:
<a href="[field:arcurl/]">[field:title function='cn_substr(@me,25)'/]</a>
| 设置位置 | 修改文件 | 修改方法 | 示例代码 |
|---|---|---|---|
| 后台输入框长度 | dede/templets/article_edit.htm |
修改 <input> 标签的 style="width:xxxpx" |
<input ... style="width:300px" /> |
| 前台列表页标题长度 | templets/default/.../list_xxx.htm templets/default/.../index.htm |
使用 [field:title function='cn_substr(@me,N)'/] |
<a ...>[field:title function='cn_substr(@me,20)'/]</a> |
| 页标题长度 | templets/default/.../article_xxx.htm |
使用 [field:title function='cn_substr(@me,N)'/] |
<h1>[field:title function='cn_substr(@me,50)'/]</h1> |
| 前台搜索结果页标题长度 | templets/default/default/search.htm |
使用 [field:title function='cn_substr(@me,N)'/] |
<a ...>[field:title function='cn_substr(@me,25)'/]</a> |
核心要点:
- 后台限制:改
article_edit.htm的width,主要是为了界面美观。 - 前台显示:使用
cn_substr()函数,这是 DedeCMS 的标准做法,也是最安全、最有效的方法。
通过以上方法,你就可以灵活地控制 DedeCMS 在任何位置的标题显示了。
