客户服务
您当前位置:首页 >> 使用说明 >> 新闻动态

教 程] 联动菜单选择栏目的完美解决方案,有问题请跟帖,官方可参考采用!

作者:  日期:2012-09-19  点击:   
别说明:pop.js加入了加载滚动圈,希望官方在正式版加入! 程序截图如下: 主要解决: 1.栏目选择后写文章再重新选择栏目信息丢失bug 2.解决前台会员修改文章无法重新选择栏目bug 3.栏目大于100个时,选择栏目不便问题! 4.同一模型下选择栏目不再刷新页面向服务器提出请求!所写信息不再丢失! 5.联动菜单ajax加载在菜单没有滚动圈问题! 教程: 1.找到phpcms\modules\admin\category.php 大约289行,加入以下代码: //txb增加栏目联动数组内容 $linkinfo[$r['catid']]['linkageid'] = $r['catid']; $linkinfo[$r['catid']]['name'] = $r['catname']; $linkinfo[$r['catid']]['parentid'] = $r['parentid']; $linkinfo[$r['catid']]['keyid'] = '0'; $linkinfo[$r['catid']]['listorder'] = $r['listorder']; $linkinfo[$r['catid']]['modelid'] = $r['modelid']; } setcache('category_content',$categorys,'commons'); //txb继续增加联动缓存内容 $info['title'] = '栏目'; $info['style'] = '1'; $info['siteid'] = $this->siteid; $info['data'] = $linkinfo; setcache(0, $info,'linkage'); 复制代码 作用:向caches\caches_linkage\caches_data写入0.cache.php,即栏目的联动菜单数据项,此缓存,在修改栏目后会立即更新! 3.打开phpcms\libs\functions\extention.func.php 加入此函数,函数较长,故隐藏。此函数借鉴global.func.php的menu_linkage并对其扩展,使其能用联动菜单刷新页面后依旧记忆栏目层级结构 游客,如果您要查看本帖隐藏内容请回复 3.打开phpcms\modeuls\content\fields\catid\form.inc.php 修改为以下代码:作用是在前台显示联动菜单选择栏目,后台用原有的形式选择栏目! /*此函数被class content_form引用; *$field:字段名字,如这里的‘catid’; *$value:获取当前联动菜单层级的id是多少,显示栏目层级结构用 *$fieldinfo:从字段缓存中读取的字段配置信息数组 */ function catid($field, $value, $fieldinfo) { /*txb增加是否是后台管理处判断,如果在后台管理添加内容则用默认字段样式,如果前台添加内容则启用联动菜单选择栏目*/ if(defined('IN_ADMIN') && ROUTE_A=='add') { if(!$value) $value = $this->catid; $publish_str = ''; if(defined('IN_ADMIN') && ROUTE_A=='add') $publish_str = " <a href='javascript:;' onclick=\"omnipotent('selectid','?m=content&c=content&a=add_othors&siteid=".$this->siteid."','".L('publish_to_othor_category')."',1);return false;\" style='color:#B5BFBB'>[".L('publish_to_othor_category')."]</a><ul class='list-dot-othors' id='add_othors_text'></ul>"; return '<input type="hidden" name="info['.$field.']" value="'.$value.'">'.$this->categorys[$value]['catname'].$publish_str; }else { $setting = string2array($fieldinfo['setting']); $linkageid = $setting['linkageid']; /*对联动栏目菜单传入默认值进行判断,如果没有默认值就用get获取*/ $value = $value ? $value : $_GET['catid']; /*$linkageid:联动菜单id,因为$setting['linkageid']获取为空,$linkageid取默认值0,也就是我们缓存的那个栏目联动菜单。 *$field:联动字段名称,即‘catid’; *$value:获取当前栏目层级的catid是多少,显示栏目层级结构用 */ return txbmenu_linkage($linkageid,$field,$value); } } 复制代码 4.打开phpcms\modules\member\content.php 在public function publish()函数里找到 //去掉栏目id unset($forminfos['catid']); 修改为 //unset($forminfos['catid']); 这样可以让联动菜单选择栏目显示出来! 5.打开phpcms\templates\default\member\content_publishi.html 在27行开始注释掉以下代码,防止原来的栏目选择样式出来碍眼! <!--<tr> <th>{L('please_select_cat')}</th> <td>{form::select_category('category_content', $catid, 'name="info[catid]" onchange="javascript:c_c(this.value);"','','',0,1,$siteid)}</td> </tr>--> 复制代码 在41行左右增加以下代码用于保存所选择栏目的modelid和siteid,在pop.js作是否为同一模型的判断 <!--txb增加两个隐藏字段用于保存modelid和siteid,在pop.js里用于判断是否为同一个模型并决定跳转--> <label>txbinfo[modelid]</label><input name="txbinfo[modelid]" type="hidden" value="{$modelid}"> <label>txbinfo[siteid]</label><input name="txbinfo[siteid]" type="hidden" value="{$siteid}"> <!--txb增加两个隐藏字段用于保存modelid和siteid,在pop.js里用于判断是否为同一个模型并决定跳转--> 复制代码 6.打开statics\js\linkage\js\pop.js 在get_child函数的else字句里增加如下代码: //txb增加代码部分,当点击最内层栏目执行,用txbjugemodel判断是否为同一模型,然后决定跳转 var txbcontent = txbcontainer = ''; var txburl = "api.php?op=txbget_linkage&act=ajax_getlist&txbnodeid="+nodeid+"&keyid="+returnkeyid; $.getJSON(txburl+'&callback=?',function(data){ if(data) { $.each(data, function(i,data){ txbcontainer = data.split(','); }) alert("有数据:"+txbcontainer[3]); //$v['linkageid'].','.$v['name'].','.$v['parentid'].','.$v['modelid'].','.$parent_menu_name) txbjugemodel(txbcontainer[0],txbcontainer[1],txbcontainer[2],txbcontainer[3]) } else{ alert("抱歉无法获得数据"); } }) ////txb增加代码部分,当点击最内层栏目执行,判断是否为同一模型,然后决定跳转 复制代码 深圳400电话 深圳400电话 http://www.szwangluo.com 美国vps,vps主机 vps服务器,http://www.huakai88.com 美国香港免费虚拟主机 香港网站空间,美国虚拟主机,免费虚拟主机空间http://www.cxtj.org
上一篇:V9的tag关键字标签功能出来了 下一篇:多图片字段怎么获取第一张图片为缩略图