K9 通用版 博客版 论坛版 地方门户版 企业版 |   企业(ASP) 分类 使用 分享 疑问 模板 建议 评论 错误 水坊
+新建主题 [Ajax]
填写帐号密码即可完成注册
+新建话题 最新回复排序 最新主题排序 精华帖子

将下拉列表绑定栏目(原创)

1Next >

killhook 发表于:13-06-18 23:36 [添加收藏] 楼主 [回复] #Top#
killhook 人气:28 积分:44 金币:634

前言:

众所周知,kingcms的碎片支持绑定栏目,这个功能很实用。相比起来,模型字段是不支持绑定栏目的,但就算支持,在开发项目的实际场景中,使用率也是非常低的,但客户群体总是一群凶悍的存在,那么我现在手里的这个项目,加上这个功能也理所当然。

 

我这个方法不是很好,因为这会建立过多的字段,是很浪费的行为(虽然比建立栏目要好得多)。

所以我下一步准备改进这个方法变为一个字段就可以了,绑定栏目以下拉列表项里的值来判定,比如

选项值|选项显示值|栏目ID

0|北京新闻|2

1|上海新闻|3

 

不过今天先把这个发出来吧。

So。。。。准备。。。开搞。。

 

使用场景:

客户需求做一个简单的新闻站,也就意味着,这个项目的所有数据是基于文章模型的,一级栏目5个,每个一级栏目下划分二级栏目若干,每个二级栏目下划分三级栏目若干。此时若用栏目来划分的话。。。。那得建立多少个栏目啊。。残念。。。

 

所以,最好的办法是在文章模型中加上下拉列表来进行所属二三级栏目的确认。

 

但问题也来了。。当你把所有的二三级下拉字段建立好后,不管去哪个栏目(所有栏目基于文章模型)添加文章。这个下拉列表中的选项全部存在,很不好看。而且那一长条列表也会令编辑每次选择时都抓狂。

 

那么,可以绑定栏目的下拉列表,应运而生了。。

 

 

 

修改源码:

第一步,建立绑定栏目字段。。

 

设计表king_field.

新建字段 knodes 类型 char 长度 255 允许空。

 

第二步,建立节点标题

打开文件/portal/language/zh-cn.xml

搜寻kdefault1

在其下面加上

<knodes>绑定栏目</knodes>

 

第三步,建立字段数据存储及更新

打开文件/portal/manage.field.php

这个是kingcms的字段管理文件

寻到313行的sql语句

在末尾加入knodes

$_sql='ktitle,kfield,modelid,ntype,nvalidate,nsizemin,nsizemax,kdefault,koption,nstylewidth,nstyleheight,issearch,isadmin1,isadmin2,isuser1,isuser2,islist,khelp,isrelate,istitle,knodes';

 

寻到437行

这里应该是注释“//长度”所在行。。

请在“//长度”及“//默认值”两个if之间加上以下代码

                  if(in_array($type,array(4))){//如果是下拉列表

                          $_array=array(array('knodes',0,0,255));//此输入框的默认值及最大值

                          $str='<inputclass="k_in w400" type="text" id="knodes"name="knodes" value="'.htmlspecialchars($data['knodes']).'"maxlength="255" />';//输入框html

                          $s.=$king->htmForm($king->lang->get('portal/label/knodes').'(0-255)',$str,$_array);//格式化后并入变量s

                          }

 

寻到640的sql语句

在末尾加入knodes

$_sql='ktitle,nsizemin,nsizemax,kdefault,koption,nstylewidth,nstyleheight,khelp,knodes';

 

 

好了,至此大家已经成功一大半了,下面是最后一步

 

第四步,建立字段解析

打开文件/portal/core.class.php

寻到284行左右-找到这句-------------case 4://单选 (下拉列表)

 

用if将原case里的语句包起来。如下

                  case 4://单选 (下拉列表)

                  if(in_array($info['listid'],explode(',',$rs['knodes']))){

                         

                          $c[]=array($f,0,0,255);

                          $array_def=explode(NL,$rs['koption']);

                          $array_select=array();

                          foreach($array_def as$val){

                                   if(isset($val{0})){//不能为空值

                                            $array_val=explode('|',$val,2);

                                            if(count($array_val)>1){//有分割符号

                                                     $array_select[$array_val[0]]=$array_val[1];

                                            }else{

                                                     $array_select[$val]=$val;

                                            }

                                   }

                          }

                          $c[]=array($f,20,null,array_keys($array_select));

                          $s=kc_htm_select($f,$array_select,$data[$f]);

                          $h=$this->help($rs['kid'],$rs['khelp']);

                  }

                  break;

 

寻到第773行  找到这句-----------

         if($group==1){

                  if($is==1){//后台调用

                          if(($rs['ntype']==0&&$f=='nattrib')||$rs['ntype']==99){//组输出,不需要标签

                                   return$king->htmForm($rs['ktitle'],$s,$c,'',$h,0);

                          }else{

return$king->htmForm($rs['ktitle'],$s,$c,substr($f,1),$h);

                          }

 

将return $king->htmForm($rs['ktitle'],$s,$c,substr($f,1),$h);这句改为

 

if($rs['ntype']==4){

if(in_array($info['listid'],explode(',',$rs['knodes']))){

return$king->htmForm($rs['ktitle'],$s,$c,substr($f,1),$h);

}

}else{return$king->htmForm($rs['ktitle'],$s,$c,substr($f,1),$h);}

 

 

好了,大功告成。

 

多个绑定栏目以“,”分割

2,3,4

当然,单个栏目也可以。


1064) 数据查询错误:syntax error, unexpected '-'
1.192.188.* 发表于:13-06-19 14:46 沙发 [回复] #Top#
KingCMS官方网站网友
king cms 的留言板模块怎么用啊
xue0666 发表于:13-06-21 08:42 4楼 [回复] #Top#
xue0666 人气:41 积分:429 金币:11562
不错,
农村娃 发表于:13-06-30 23:15 6楼 [回复] #Top#
农村娃 人气:157 积分:561 金币:2209
没明白作用··但是感觉有用!
freecms 发表于:17-05-11 16:35 7楼 [回复] #Top#
freecms 人气:0 积分:65 金币:20
过来学习一下
pgzx995 发表于:17-05-12 08:35 8楼 [回复] #Top#
pgzx995 人气:0 积分:238 金币:715
天书,天书,这一定是传说中的天道传书!

1Next >

发表回复

帐号 匿名发布 审核后可见 [加载完整在线编辑器]
内容
验证码
KingCMS 内容管理系统

关于我们 联系我们 广告报价 付款方式 站点导航

Copyright © 2004-2015 Focuznet All rights reserved.

粤ICP备08008106号