例如,您有两个标签:Tag A
出现 1000 次、Tag B
仅出现一次和Tag C
出现 50 次。第一个想法可能是将出现次数设为字体大小。现在这不是很有帮助,因为我们Tag A
在 font size1000
和Tag B
font size 1
。相反,您可能想要类似的东西:
- 出现最多的标签应该有 font-size
25
- 出现最少的标签应该有 font-size
10
- 所有其他标签应均匀分布在字体大小步骤之间
2
这就是这个模块出现的地方。该模块试图解决的基本问题是how often a tag occurs to how large you want it to be displayed in relation to other tags
. 或者被放入一个函数中:calculateBoundedFontSize(count($tag))
.
这Zend\Tag\
由权重(标签出现的数量)和值(相对于标签权重的字体大小值)处理:
- 首先,我们创建一个标签列表,给每个标签一个权重(例如出现次数)。
- 其次,我们告诉模块将允许的字体大小数组映射到与出现次数相关的项目。
第二个是通过文档中的这一行完成的:
$list->spreadWeightValues(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
这基本上告诉模块给标记最多字体大小为 的标记10
,一个最少字体大小为的标记1
。两者之间的一切都是相应地传播的。回到最初的例子,Tag A
会得到一个字体大小10
,Tag B
一个字体大小1
,Tag C
一个字体大小2
。
文档没有特别谈论count
并且font size
是为了抽象的原因。我们可以使用其他一些因素来确定项目的重要性(例如重要性),而不是获取出现次数。我们还可以使用一些更高级的计算值,例如我们可以说Featured Tags
更重要,并在计数之外添加额外1000
的权重。对于同样适用的值,它不需要是字体大小,但也可以用于排序。仅Zend\Tag\Cloud
使用这些权重和值作为字体大小。但是我们可以轻松地创建另一个模块,使用它们来呈现有序列表。
对于您的情况,简单的示例已经足够了:
// Create a ItemList
$list = new Zend\Tag\ItemList();
// Add all tags and their count to it
foreach ($allTags as $tag) {
$list[] = new Zend\Tag\Item(array('title' => $tag, 'weight' => countTagOccurences($tag));
}
// Assign font size values
$list->spreadWeightValues(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
// Or to use the Zend\Tag\Cloud directly
$cloud = new Zend\Tag\Cloud(
array(
'tagDecorator' => array(
'decorator' => 'htmltag',
'options' => array(
'minFontSize' => '1',
'maxFontSize' => '10',
),
),
'tags' => $list
)
);