CONSULTING QIAN1
咨询千一
选择下列产品马上在线沟通
微信扫码咨询
咨询电话:0833-2134912
你可能遇到了下面的问题
关闭右侧工具栏

研习记录

discuz聚合标签详解
  • 作者:admin
  • 来源:未知

在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 $tagNames[$i]=substr($binStr,$i,$i+1)*pow(2,strlen($binStr)-$i-1);
}
return in_array($theNum,$tagNames);
}

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

上图的右侧是被用作控制是否显示右侧栏的。

落扬尘  2010年于CUIT