0

我想了解 Zend 标签组件。

它是什么?如何在我的项目中使用它?

假设我有以下三个表:posts - id,name tags - id,name posts_tags - id,post_id,tag_id

如何使用此组件创建标签云?什么是重量?

我已经检查了这些: http:
//framework.zend.com/manual/current/en/modules/zend.tag.introduction.html

http://framework.zend.com/manual/current/en/modules/zend.tag.cloud.html

4

2 回答 2

3

例如,您有两个标签:Tag A出现 1000 次、Tag B仅出现一次和Tag C出现 50 次。第一个想法可能是将出现次数设为字体大小。现在这不是很有帮助,因为我们Tag A在 font size1000Tag Bfont size 1。相反,您可能想要类似的东西:

  • 出现最多的标签应该有 font-size25
  • 出现最少的标签应该有 font-size10
  • 所有其他标签应均匀分布在字体大小步骤之间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会得到一个字体大小10Tag B一个字体大小1Tag 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
     )
);
于 2016-03-28T09:53:53.077 回答
1

文档非常清楚(尽管不是那么明显);也许更好的问题是“什么是 Zend_Tag_Cloud?”:

Zend_Tag_Cloud 是 Zend_Tag 的渲染部分。默认情况下,它带有一组 HTML 装饰器,允许您为网站创建标签云,但也为您提供两个抽象类来创建自己的装饰器,例如在 PDF 文档中创建标签云。

http://framework.zend.com/manual/1.12/en/zend.tag.cloud.html

https://en.wikipedia.org/wiki/Tag_cloud

HTH。

于 2016-03-27T17:45:58.660 回答