设为首页加入收藏TAG网站地图

更多更全面的了解和使用织梦cms

当前位置:织梦教程网 > 织梦二次开发 > dedecms自定义模型部分字段无法调用的原因

dedecms自定义模型部分字段无法调用的原因

已有人收藏发布时间:2018-08-03 14:15   来源:www.dedejc.com 作者:织梦教程网

新建了一个视频模型,里面添加了10来个字段,奇怪的是,这些字段在内容面页模板,部分可以读取到内容,而有一部分却无法读取

标签读取方式:{dede:field.字段名/}

按道理讲,无论是主表还是附加表的字段,都可以用这个标签读取出来,尝试了一下使用{dede:sql sql="查询语句"}[field:字段名/]{/dede:sql}方式,这种没有问题,怎么回事呢?

----------------解决思路与办法-------------------------

(1)查看数据库,这些字段的内容写入是没有问题的;

(2)再看数据库,发现跟数据类型无关,因为有其它一个字段,同样是varchar类型,能正常读取;

(3)按照后台发布文章的执行过程,来查看问题。

首先中间经过多个步骤,来到 /include/arc.archives.class.php 这个类文件。测试发现能正常读取到附加表的字段信息,见下面2张图:

dede自定义模型的部分字段无法读取 - php之路 - php学习,SEO及二次开发

 

dede自定义模型的部分字段无法读取 - php之路 - php学习,SEO及二次开发

 说明一下:我标题所说的,就是actor和master字段的内容无法读取出来

(4)再继续按执行过程往下走,发现,将 $row 赋值给 $this->Fields 属性(也是数组)时,这两个字段没有赋值过去,而其它都能正常赋值,问题就出来在这里了。我们来分析一下,是怎么出问题的。

发现 $this->Fields[$nk] = $this->ChannelUnit->MakeField($k, $row[$k], $ctag); 这句有问题。

dede自定义模型的部分字段无法读取 - php之路 - php学习,SEO及二次开发

 

(5)分析 /include/Channelunit.class.php的 MakeField()方法

最终找到问题所在,原来如果字段类型为 text ,那dedecms 会经过 HtmlReplace()方法进行处理,很不幸,如果是该text数据类型,为中文转换是有问题的,而如果是数字,htmlreplace后是没有问题的,这就是为什么,我的附加表上有些是 varchar数据类型,却能正常显示。