Я хочу знать о компоненте Zend Tag.
Что это?
Как использовать это в моем проекте?
Предположим, у меня есть следующие три таблицы:
сообщения — идентификатор, имя
теги — идентификатор, имя
posts_tags — идентификатор, 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
Например, у вас есть два тега: Tag A
происходит 1000 раз, Tag B
происходит только один раз, и Tag C
происходит 50 раз. Первой идеей может быть количество вхождений в размер шрифта. Теперь это не очень полезно, как у нас Tag A
на размер шрифта 1000
, а также Tag B
на размер шрифта 1
, Вместо этого вы, вероятно, хотите что-то вроде:
25
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
)
);
Документация довольно ясна (хотя не все так очевидно); возможно, лучший вопрос «Что такое 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
НТН.