新建了一个视频模型,里面添加了10来个字段,奇怪的是,这些字段在内容面页模板,部分可以读取到内容,而有一部分却无法读取
标签读取方式:{dede:field.字段名/}
按道理讲,无论是主表还是附加表的字段,都可以用这个标签读取出来,尝试了一下使用{dede:sql sql="查询语句"}[field:字段名/]{/dede:sql}方式,这种没有问题,怎么回事呢?
----------------解决思路与办法-------------------------
(1)查看数据库,这些字段的内容写入是没有问题的;
(2)再看数据库,发现跟数据类型无关,因为有其它一个字段,同样是varchar类型,能正常读取;
(3)按照后台发布文章的执行过程,来查看问题。
首先中间经过多个步骤,来到 /include/arc.archives.class.php 这个类文件。测试发现能正常读取到附加表的字段信息,见下面2张图:
说明一下:我标题所说的,就是actor和master字段的内容无法读取出来
(4)再继续按执行过程往下走,发现,将 $row 赋值给 $this->Fields 属性(也是数组)时,这两个字段没有赋值过去,而其它都能正常赋值,问题就出来在这里了。我们来分析一下,是怎么出问题的。
发现 $this->Fields[$nk] = $this->ChannelUnit->MakeField($k, $row[$k], $ctag); 这句有问题。
(5)分析 /include/Channelunit.class.php的 MakeField()方法
最终找到问题所在,原来如果字段类型为 text ,那dedecms 会经过 HtmlReplace()方法进行处理,很不幸,如果是该text数据类型,为中文转换是有问题的,而如果是数字,htmlreplace后是没有问题的,这就是为什么,我的附加表上有些是 varchar数据类型,却能正常显示。
下一步就是分析 dedecms 的 HtmlReplace()函数了。原文转自 php之路日志