织梦二开不来一把骚操作怎么能行ing...
需求:
因为网站整个架构比较大, 不同的栏目需要不同的自定义字段,例如做一个装修站,用一个栏目作为一个【设计师】,栏目下面有很多的案例,案例又是另一个内容模型,这两个不能混用,那么这时候需要给这个【设计师】定义很多属性字段。如果每添加一个字段都要去修改织梦的php程序和mysql数据库,那么就太繁琐了。如果网站架构大的情况下,会更繁琐,于是乎就有了下面的骚操作...
后台编辑:
模板调用:
{dede:field.json runphp='yes'}
$jsonstr = @me;$json = json_decode($jsonstr,true);@me = $json['风格'];{/dede:field.json}
思路:
按照以前栏目编辑添加自定义字段的方法,
1、添加一个json字段,并且修改后台模板
2、然后在这个json选项里面用json表达式添加你想要的key和值。
3、模板使用的时候读取栏目里面的json,调用模板标签的runphp='yes',对json字符串进行解析,用php去除json的key和值。
于是,就实现了栏目的万能字段(你能为每个栏目填入任何数据)
操作:
1、打开mysql数据库, 找到织梦dede_arctype表,在合适的位置插入json字段
说一下这个字段类型:
TEXT:最大长度为65,535(2的16次方–1)字符
MEDIUMTEXT:最大长度为16,777,215
LONGTEXT:最大长度为4,294,967,295
我选用最长的LONGTEXT,免得后期需要修改,一个汉字算两个字节,TEXT可能不够用。
PS:我的程序做过多次二开,可能跟正常的dedecms字段不一样,原理是一样的
2、修改后台的mysql语句,catalog_edit.php和catalog_add.php两个都要改
路径在跟目录的/dede/里面,要是你后台改了名字, 就是你改的名字目录里面。
catalog_add.php文件,查找第一个变量$queryTemplate,赋值字符串那一句,把你的字段插进去,mysql语句前面是字段名`json`,后面是字段值$json
然后再查找第一个变量$in_query,位置不同,内容大致是相同的, 添加一个json字段
catalog_edit.php文件跟上面的y一样修改。catalog_edit.php只有一个位置,chaz查找$upquery变量,找到图中的位置,对应位置添加json字段
3、修改后台模板,添加json选项框,位置在catalog_edit.html和catalog_add.html
按F12找到对应你后台模板的代码位置,将上面的栏目描述代码复制过来,然后将name属性修改成json,将$myrow['description']修改成json。
<div class="layui-form-item"><label class="layui-form-label">json数据</label><div class="layui-input-block"><textarea name="json" class='layui-textarea'><?php echo $myrow['json']?></textarea></div></div>
如图所示是这样子的,照样子画葫芦的事情catalog_edit.html
接下来是catalog_add.html
PS:知道为什么复制description编辑框来修改吗 ?因为json和description一样,是多行文本框。切记不要复制成单行文本框的了
选项编辑框出来了。尝试写一些数据进去, 然后看能不能保存
构造一个json数据
{"公司": "深圳旗舰店","职务": "主任设计师","经验": "16年","报价": "750-900元/平米","风格": "欧式古典、现代简约、地中海、美式乡村"}
注意:json不能使用单引号,织梦的编辑框字体分辨不清全角引号和半角引号,建议修改字体,建议使用json格式化工具格式化一下代码方便阅读
PS:key可以使用中文
界面再美化一下:
4、前端模板调用操作
使用{dede:field.json/}调出我们刚才的json数据
将刚才的模板代码拆分为{dede:field.json runphp='yes'}{/dede:field.json},php代码写在中间,在标签的中间写上
$jsonstr = @me;$json = json_decode($jsonstr,true);@me = $json['风格'];

然后按照这个方法 , 其他字段也是如此。
总结
思路明白了道理很简单, 这样一来, 只需要修改栏目只需要设置json选项的内容,就可以为栏目设置任意字段名和字段值。另外,如果json的key使用的是中文,需要注意下编码问题。下次添加栏目的时候,将旧的栏目json字符串复制粘贴过去,修改值就能用了。
怎么样? 到这里栏目添加万能字段你学会了吗 ? 如果有什么更好的想法,欢迎下方评论
发表评论