教 程] 联动菜单选择栏目的完美解决方案,有问题请跟帖,官方可参考采用!
作者: 日期: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关键字标签功能出来了
下一篇:多图片字段怎么获取第一张图片为缩略图