在使用DZ的时候,发现文章内置的8个聚合标签不够使用! 众所周知discuz的聚合标签功能为取分类数据提供了第二层方便。 但是默认只支持8个标签,对希望更多标签的用户来说很不方便,那么该如何解决呢? 如果你也遇到此类问题,不妨看下以下的方法 ! Discuz版本 X3.2 一.修改个数 聚合标签所在的文件里的个数限制是写死的,就是8,所以自定义增多几乎是不可能的,除非核心程序改变。 要改的几个核心文件有: (1)source/admincp/admincp_article.php 第51行: showformheader('article&operation=tag'); showtableheader('article_tag_setting'); for($i=1; $i<=8; $i++) { 修改8=>12 (2)source/function/function_portalcp.php 第567行开始,依次找到8的地方: function article_tagnames() {} 里的 for($i=1; $i<=8; $i++) function article_parse_tags($tag) {} 里的 for($i=1; $i<=8; $i++) function article_make_tag($tags){} 里的 for($i=1; $i<=8; $i++) 分别修改8为你想要的个数,比如我的就是12。以上的行数是相对您没有改过源代码的情况,如果改过,就按文件名搜索好了。 二.改变数据库字段长度 ALTER TABLE `pre_portal_article_title` CHANGE `tag` `tag` smallint( 12 ) UNSIGNED NOT NULL DEFAULT '0' 默认的tinyint的unsign型最大是255,而255只能支持8个标签。 所以这里改成smallint,最大支持32位,如果还不够就继续增大int型即可。 改到这里,基本就可以啦。 后台,门户,文章管理,聚合标签,上数据! 前台,发文,看聚合标签,有值。 或者手工在数据库那修改数据也行,数据存储在 pre_common_setting 表中的 skey 字段值为 “article_tags” 的记录,然后修改 svalue 即可。可以用以下sql语句把 svalue 选出来修改: SELECT * FROM `pre_common_setting` WHERE skey = 'article_tags' 【题外话】: 另外大致讲解下 聚合标签的存储和解析原理。 如果你研究过算法,发现是利用的经典的二进制的2次方按位与计算出来的。 比如8个标签全没选,就是00000000 = 0 ,某个标签选中了,就是1,比如 00011001这样子,翻译成十进制存储即可。 (来源 魔客吧) |