dede的联动类型是是通过将字段和系统枚举表dede_sys_enum相关联的,独立模型的表中联动类别字段存储的是表dede_sys_enum的枚举值,这是一个数值,类似于代号的意思,当要显示独立模型的联动类别字段时,首先根据这个枚举值在dede_sys_enum中找出相应枚举名,然后才显示出来。在模版文件中我们不需要知道这个过程是如何进行的,只需按照显示一般字段的方式就能正确显示联动类型了。
这篇文章主要讨论的就是在dede代码中是如何显示联动类型字段的。
不管是在文章页面还是列表页面都能直接使用[field:codecategory/]这样的方式来显示联动类型,这里就以列表页面为例。
显示独立模型的列表是通过/include/arc.sglistview.class.php来完成的,在arc.sglistview.class.php的GetArcList方法中如下代码完成了对独立模型所有字段的特殊处理:
没有这段代码独立模型的联动字段就显示的是乱七八糟的数字。ChannelUnit的MakeField的在/include/channelunit.class.php中,用于处理某个字段的值,代码如下:
其中,上面的不同case值处理不同字段类型,联动类型在最后一个case中,他引入了\include\taglib\channel\stepselect.lib.php文件(因为联动类型的$ftype值为stepselect),然后最终的代码进入stepselect.lib.php的ch_stepselect方法中。
其实我并没有去研究ch_stepselect方法以及其调用的GetEnumsValue2方法,因为这里的关键是arc.sglistview.class.php的GetArcList方法中的那段代码。