在线建站培训
您的位置: 魔客吧 cms教程 discuz教程 查看内容

discuz聚合标签详解

2018-6-26 10:57 | 发布者: moke | 栏目:discuz教程

在DZ论坛中,文章有八个聚合标签,用来标志RSS分类等。

有时,我们需要根据聚合标签显示不同的文章,例如:在行业动态下需要显示聚合标签为“热点”的文章。

这时,我们需要了解他是如何工作的。

在正常加载了内核文件的页面中(DZ几乎每个页面都加载了,如果是您自己的页面,请参阅:

使自己的页面能使用DZ系统功能与全局变量),我们可以使用

<!--{eval $list = array();}-->
<!--{eval $wheresql = category_get_wheresql($cat);}-->
<!--{eval $list = category_get_list($cat, $wheresql, $page);}-->

这三句可以取得一个分类下的所有文章并保存在$list中。

现在,您可以使用 $list[0][tag] 来取得数组中一个元素的 聚合标签 值。

我们使用循环来将其取出较为方便,像这样:foreach($list as $value)。之后$value[tag]。

取出的值是一个整数,它是这样得到的:

上面的标签从左至右用数字依次标识为:1、2、4、8、16、32、64、128

即为2的0次方到7次方。这样我们可以将任何几个数值相加都不会有重复。

例如:选中 热点 和 右侧,即1+128=129,这能唯一确定我们选中这两个标签。

$value[tag]的值就是这样得来的,现在,我们需要通过标签来筛选文章。

首相应该将tag的数值还原为2的n次方的和。php提供了十进制转二进制的函数decbin(),下面的函数能判断是否勾选某个标签:

function getTags($tagNum,$theNum){
$binStr=decbin($tagNum);
for($i=0;$i<strlen($binStr);$i++){
$tagNames[$i]=substr($binStr,$i,$i+1)*pow(2,strlen($binStr)-$i-1);
}
return in_array($theNum,$tagNames);
}

$tagNum是聚合标签的值,$theNum是您需要判断是否被包含的值。例如:getTags(129,128),表示这篇文章是否勾选最后一个标签,如果勾选,函数返回ture。这样您就可以在自己的页面筛选具有某个聚合标签的文章了。


本文来源于网络,由于代码中有一点小细节有误,所以修改后在此发表,以便日后重阅!

将代码:

$tagNames[$i]=substr($binStr,$i,$i+1)*pow(2,strlen($binStr)-$i-1);

改为:

$tagNames[$i]=substr($binStr,$i,1)*pow(2,strlen($binStr)-$i-1);

即可。

魔客吧温馨提示:还在苦苦寻找discuz模板吗?来魔客吧 discuz论坛模板 频道看看吧,说不定有你喜欢的哦!

最新分享资源

最新评论

验证码 换一个