Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

[已解决] 解决x2聚合标签自由增加的问题

[复制链接]
lechie 发表于 2011-9-1 09:38:45 | 显示全部楼层 |阅读模式
本帖最后由 lechie 于 2011-11-24 11:34 编辑

刚用discuz做东西,不足和bug之处敬请谅解,谢谢您的阅读。

众所周知discuz的聚合标签功能为取分类数据提供了第二层方便。但是默认只支持8个标签,对希望更多标签的用户来说很不方便,那么该如何解决呢,我今天测试了下,测试通过。

一.修改个数

聚合标签所在的文件里的个数限制是写死的,就是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这样子,翻译成十进制存储即可。

回复

使用道具 举报

芜湖圈 发表于 2011-9-23 01:41:48 | 显示全部楼层
坐下沙发,但没看懂,求教!
回复

使用道具 举报

 楼主| lechie 发表于 2011-9-23 09:07:22 | 显示全部楼层
芜湖圈 发表于 2011-9-23 01:41
坐下沙发,但没看懂,求教!

简单来说就是对程序核心的个数修改为8 以上的数字,同时数据库字段长度也要修改为8以上,基本就可以了。
回复

使用道具 举报

冲天鹤123 发表于 2011-9-26 22:39:13 | 显示全部楼层
本帖最后由 冲天鹤123 于 2011-9-26 22:39 编辑
lechie 发表于 2011-9-23 09:07
简单来说就是对程序核心的个数修改为8 以上的数字,同时数据库字段长度也要修改为8以上,基本就可以了。

二.改变数据库字段长度
ALTER TABLE  `pre_portal_article_title` CHANGE  `tag`  `tag` smallint( 12 ) UNSIGNED NOT NULL DEFAULT  '0'
默认的tinyint的unsign型最大是255,而255只能支持8个标签。
所以这里改成smallint,最大支持32位,如果还不够就继续增大int型即可。

具体这个数据库长度不知道怎么搞??
回复

使用道具 举报

 楼主| lechie 发表于 2011-9-27 13:39:54 | 显示全部楼层
冲天鹤123 发表于 2011-9-26 22:39
二.改变数据库字段长度
ALTER TABLE  `pre_portal_article_title` CHANGE  `tag`  `tag` smallint( 12 ) ...

需要用 phpmyadmin 或者其他查看数据库的程序来修改数据库,然后执行这条 sql 语句就可以了。
回复

使用道具 举报

冲天鹤123 发表于 2011-9-29 09:47:44 | 显示全部楼层
lechie 发表于 2011-9-27 13:39
需要用 phpmyadmin 或者其他查看数据库的程序来修改数据库,然后执行这条 sql 语句就可以了。

请问大哥,标签的作用是方便搜索引擎抓取,还是方便用户在网站内关键词查找!
回复

使用道具 举报

 楼主| lechie 发表于 2011-9-29 12:02:59 | 显示全部楼层
冲天鹤123 发表于 2011-9-29 09:47
请问大哥,标签的作用是方便搜索引擎抓取,还是方便用户在网站内关键词查找!

网上的答复是通过TAG的作用,聚合不同应用间的信息,不同应用是指比如discuz和uchome,但是也可以以另外一种形式聚合不同类别的信息,比如有中国新闻和美国新闻,是2个类别,里面都有讲谷歌的,聚合标签是谷歌,就能跨类别聚合起来了,另外对搜索引擎收录也有好处,会轻微加重服务器负担。(网上观点和个人看法,仅供参考)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-8-28 05:39 , Processed in 0.093618 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表