迅睿CMS 模板里读自定义字段值,dr_share_cat_value 和直接写不一样
摘要
分类页要显示一段 SEO 描述,我在后台给分类加了自定义字段 seo_desc,模板里手写 {$cat.seo_desc},输出空白。改了半小时模板才发现,字段是加上了,但取值方式不对。 全局拿值和从对象拿值,是两套 迅睿的模板里,当前分类
分类页要显示一段 SEO 描述,我在后台给分类加了自定义字段 seo_desc,模板里手写 {$cat.seo_desc},输出空白。改了半小时模板才发现,字段是加上了,取值方式不对。
全局拿值和从对象拿值,是两套
迅睿模板里当前分类可以用 $cat 调,但那只覆盖内置字段。自定义字段得走函数:
// 模板文件:template/default/category/list.html
{dr_share_cat_value($cat.id, 'seo_desc')}
第一个参数是分类 ID,不是分类对象。我一开始把整个 $cat 传进去,返回空,也不报错,静悄悄就过去了。挺反直觉的。同类函数还有文章用的 dr_share_value,名字得对号入座。
列表循环里是另一回事
在 {dr_cat_list} 的循环体里,当前项已经带上了自定义字段,直接点出来就行:
{dr_cat_list pid=0 num=10}
{if $t.seo_desc}
<p>{$t.seo_desc}</p>
{else}
<p>{$t.name}</p>
{/if}
{/dr_cat_list}
用 $t,别用 $cat——后者在循环里仍然指向外层那个分类,你会拿到重复的值而且百思不得其解。我第二次栽在这。
字段没值的时候别硬输出
没填的自定义字段是空字符串,直接吐出去就是个空标签,SEO 上不好看。包一层判断:
{if dr_share_cat_value($cat.id, 'seo_desc')}
<div class="cat-desc">{dr_share_cat_value($cat.id, 'seo_desc')}</div>
{/if}
会调用两次,这点开销可以忽略。别为了省一次调用去塞 PHP 变量,模板里混 PHP 后面更难维护。
改完不生效,先看清缓存
后台改了字段配置,模板缓存不清是看不到变化的。迅睿后台有「更新缓存」,我习惯改完顺手点一下。清完还不生效,就看字段是不是真的挂到了这个分类模型上——这个我没法隔空判断,去内容模型里确认一眼最稳。
另外那几个函数名不同版本有点出入,我手上这套是 2.x 的写法。你装的要是早期版本,直接去 system 目录里 grep 一下函数名,比翻文档快。
2026年10月21日 08:34
前后30天 · 点日期看归档
9月21日
9月22日
9月23日
9月24日
9月25日
9月26日
9月27日
9月28日
9月29日
9月30日
10月1日
10月2日
10月3日
10月4日
10月5日
10月6日
10月7日
10月8日
10月9日
10月10日
10月11日
10月12日
10月13日
10月14日
10月15日
10月16日
10月17日
10月18日
10月19日
10月20日
10月21日
10月22日
10月23日
10月24日
10月25日
10月26日
10月27日
10月28日
10月29日
10月30日
10月31日
11月1日
11月2日
11月3日
11月4日
11月5日
11月6日
11月7日
11月8日
11月9日
11月10日
11月11日
11月12日
11月13日
11月14日
11月15日
11月16日
11月17日
11月18日
11月19日
11月20日