• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > DedeCMS教程 > Dedecms二次开发 >

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

来源: www.dedecms8.com 编辑:织梦吧 时间:2013-05-10点击:

新建了一个视频模型,里面添加了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数据类型,却能正常显示。
下一步就是分析 dedecms 的 HtmlReplace()函数了。原文转自 php之路日志

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1170734538@qq.com ,  QQ