Tagger
Последнее обновление Apr 7th, 2021 | История страницы | Улучшить эту страницу | Сообщить о проблеме
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$194 per month—let's make that $500!
Learn moreТеги, категории и многое другое для MODX!
Надёжная и производительная система управления тегами. Кратко о возможностях:
- Протестировано с миллионом тегов
- Постраничный выпадающий список и автодополнение для удобного ввода тегов
- Типы ввода: combo-box или tag-field
- Неиспользуемые теги можно автоматически удалять из базы данных
- Создание тегов можно ограничить CMP, а не полем ввода
- Для ввода можно использовать облако Auto-Tag
Вывод и списки: все теги, теги из указанных групп, без неиспользуемых тегов, ресурсы с заданным тегом и т.д. Поставляет getResources условие &where, поэтому все возможности шаблонизации и сортировки getResources доступны вам.
Установка¶
Установите через Менеджер пакетов или скачайте пакет из репозитория MODX Extras.
Tagger FURL сейчас не работают при расширениях ресурсов (.html и т.п.), кроме /. Смените расширение на / хотя бы у ресурса, на котором вызывается сниппет TaggerGetResourcesWhere.
- Content -> Content Types -> HTML (.html) -> /
Группы¶
После установки настройте группы. Группы представляют поля, которые добавятся на панель ресурса. Откройте меню «Компоненты», найдите Tagger и перейдите на вкладку Groups. Добавьте новую группу.
**ПРЕДУПРЕЖДЕНИЕ** Убедитесь, что alias группы не совпадает с alias ресурса. Иначе ресурс с таким alias станет недоступен.
ПАРАМЕТРЫ ГРУППЫ:
| Параметр | Обязат.? | Описание |
|---|---|---|
| Name | обяз. | Подпись поля на панели ресурса |
| Description | необяз. | Описание показывается при наведении на поле |
| Alias | необяз. | Если пусто, генерируется автоматически. Используется в FURL. |
| Field type | обяз. | Tag field: множественный выбор. Combo box: классический выбор одного элемента |
| Place | обяз. | Где отображается группа: In tab, Above content, Below content, Bottom page, In TVs section |
| Position of Tagger tab in TVs section | необяз. | Если пусто, используется 9999. Позиция группы Tagger на вкладке TVs. Укажите 0, чтобы группа Tagger была первой. |
| Remove unused tags | необяз. | При yes из базы удаляются все теги, не назначенные ни одному ресурсу |
| Allow new tags from field | необяз. | При yes пользователи смогут добавлять новые теги из поля. no удобно, например, для списка категорий |
| Allow blank | необяз. | При no поле станет обязательным, и перед сохранением ресурса нужно выбрать хотя бы один тег |
| Allow type | необяз. | При no ввод в поле недоступен. Клик по полю откроет список доступных тегов |
| Show autotag | необяз. | При yes под полем отображаются все теги. По клику их можно выбрать или снять выбор. Только для Tag field. |
| Hide input | необяз. | Работает только с включённым Show autotag. Скрывает поле ввода и кнопку назначения, остаётся только выбор существующих тегов |
| Tag limit | необяз. | Ограничивает число выбираемых тегов. 0 означает отсутствие ограничения |
| Show for Templates | обяз. | Список ID шаблонов через запятую, для которых группа доступна для редактирования |
Изменение подписей мест Tagger¶
В системных настройках пространства имён Tagger доступны ключи: tagger.place_in_tab_label, tagger.place_tvs_tab_label, tagger.place_above_content_label, tagger.place_below_content_label, tagger.place_bottom_page_label
Значение можно задать текстом или ключом лексикона. Для разных подписей по шаблону ресурса используйте такую запись:
1==Label For Template with ID 1||2==Label For Template with ID 2
Подпись по умолчанию: tagger.tab.label
Базовое использование¶
TaggerGetTags¶
Сниппет выводит теги для ресурса(ов), группы(групп) или все теги.
СВОЙСТВА:
| Свойство | Тип | Обязат.? | Описание | По умолчанию |
|---|---|---|---|---|
| &resources | string | необяз. | Список ID ресурсов через запятую, для которых выводятся теги | |
| &groups | string | необяз. | Список групп Tagger через запятую, для которых выводятся теги | |
| &parents | int | необяз. | Список ID ресурсов через запятую: их дочерние ресурсы сканируются для построения списка тегов | |
| &rowTpl | string | необяз. | Имя чанка для каждого тега. Без чанка выводится массив с доступными плейсхолдерами | |
| &tpl_N | string | необяз. | Имя чанка для каждого N-го тега | |
| &outTpl | string | необяз. | Имя чанка-обёртки для всех тегов. Без чанка теги выводятся без обёртки. Плейсхолдер: [[+tags]] |
|
| &separator | string | необяз. | Разделитель между тегами | |
| &limit | int | необяз. | Лимит числа возвращаемых тегов | 0 |
| &offset | int | необяз. | Смещение вывода на это число тегов | 0 |
| &totalPh | string | необяз. | Плейсхолдер для общего числа тегов без учёта &limit и &offset | tags_total |
| &target | int | необяз. | ID ресурса для генерации URI тега. Без ID используется текущий ресурс | current resource |
| &showUnused | int | необяз. | При 1 в вывод попадают теги, не назначенные ни одному ресурсу | 0 |
| &toPlaceholder | string | необяз. | При указании вывод возвращается в плейсхолдер с этим именем | |
| &showDeleted | int | необяз. | При 1 в вывод попадают теги, назначенные только удалённым ресурсам | 0 |
| &showUnpublished | int | необяз. | При 1 в вывод попадают теги, назначенные только неопубликованным ресурсам | 0 |
| &contexts | string | необяз. | Показывать только теги ресурсов из указанных контекстов (через запятую) | |
| &wrapIfEmpty | int | необяз. | При 1 outTpl используется даже если тегов нет | 1 |
| &translate | int | необяз. | При указании в rowChunk добавляются плейсхолдеры group_name_translated и group_description_translated | 0 |
| &sort | string | необяз. | Параметры сортировки в JSON. Пример {"tag": "ASC"} или несколько {"group_id": "ASC", "tag": "ASC"} |
ПЛЕЙСХОЛДЕРЫ ВЫВОДА И ПРИМЕРЫ ЗНАЧЕНИЙ:
[[+id]] => 1
[[+tag]] => News
[[+alias]] => news
[[+group]] => 3
[[+group_id]] => 3
[[+group_alias]] => mediatype
[[+group_name]] => Media Type
[[+group_field_type]] => tagger-combo-tag
[[+group_allow_new]] => 0
[[+group_remove_unused]] => 0
[[+group_allow_blank]] => 1
[[+group_allow_type]] => 0
[[+group_show_autotag]] => 0
[[+group_show_for_templates]] => 21
[[+cnt]] => 1
[[+uri]]
[[+idx]] = Number starting from one for each tag
[[+active]] => 1 (1/0 based on if current tag is active or not)
Чтобы плейсхолдер [[+active]] показывал корректное состояние, вызывайте сниппет TaggerGetTags без кэша.
ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ:
// Get tags for all resources, including unused tags
[[TaggerGetTags? &showUnused=`1`]]
// Get tags from groups 1 and 3 for all resources
[[TaggerGetTags? &groups=`1,3` &rowTpl=`tag_links_tpl`]]
// Get tags for current resource
[[!TaggerGetTags? &resources=`[[*id]]` &rowTpl=`tag_links_tpl`]]
// Get tags for current resource in getResources tpl
[[!TaggerGetTags? &resources=`[[+id]]` &rowTpl=`tag_links_tpl`]]
Как переводить группы¶
Допустим, есть группа с именем Tags и alias tags. Чтобы перевести имя и/или описание, создайте записи лексикона в нужном формате.
- Откройте управление лексиконами
- Выберите пространство имён Tagger и тему custom
- Добавьте запись с ключом tagger.custom."group_alias" (в этом примере tagger.custom.tags)
- Для перевода описания добавьте запись с ключом tagger.custom."group_alias"_desc (в этом примере tagger.custom.tags_desc)
- Чтобы использовать переводы на фронтенде, вызовите TaggerGetTags с &translate=
1([[TaggetGetTags? &translate=1]]). Появятся плейсхолдеры group_name_translated и group_description_translated
TaggerGetResourcesWhere¶
Сниппет формирует SQL-запрос для условия WHERE в getResources.
СВОЙСТВА:
| Свойство | Тип | Обязат.? | Описание | По умолчанию |
|---|---|---|---|---|
| &tags | string | необяз. | Список alias тегов через запятую (не имена и не ID), для которых строится запрос ресурсов. По умолчанию теги берутся из GET-параметра | |
| &groups | string | необяз. | Список групп Tagger через запятую. Разрешены только теги из этих групп | |
| &where | string | необяз. | Исходное свойство WHERE getResources. Если WHERE уже есть в вызове getResources, перенесите его сюда | |
| &likeComparison | int | необяз. | При 1 сравнение через LIKE: частичное совпадение строк, не только точное | 0 |
| &tagField | string | необяз. | Поле для сравнения с переданными тегами. Для совпадения по полному тексту имени тега укажите 'tag' | alias |
| &matchAll | int | необяз. | При 1 ресурс должен иметь все указанные теги (AND). При 0 или без параметра достаточно любого тега (OR) | 0 |
| &field | string | необяз. | Поле modResource для сравнения с ID назначенного ресурса | id |
ПРИМЕР ИСПОЛЬЗОВАНИЯ:
[[!getResources?
&where=`[[!TaggerGetResourcesWhere?
&tags=`Books,Vehicles`
&where=`{"isfolder": 0}`]]`
]]
TaggerGetCurrentTag¶
Сниппет выводит группы и теги из параметров текущего запроса. Всегда вызывайте его без кэша: он читает значения из $_GET.
СВОЙСТВА:
| Свойство | Тип | Обязат.? | Описание | По умолчанию |
|---|---|---|---|---|
| &tagTpl | string | необяз. | Имя чанка для каждого тега. Без чанка выводится массив с доступными плейсхолдерами | |
| &groupTpl | string | необяз. | Имя чанка для каждой группы. Без чанка выводится массив с доступными плейсхолдерами | |
| &outTpl | string | необяз. | Имя чанка-обёртки для всех групп. Без чанка теги выводятся без обёртки | |
| &tagSeparator | string | необяз. | Разделитель между тегами | |
| &groupSeparator | string | необяз. | Разделитель между группами | |
| &target | int | необяз. | ID ресурса для генерации URI тега | current resource ID |
| &friendlyURL | int | необяз. | Если задано, используется вместо системной настройки friendly_urls | friendly_urls system setting |
| &linkTagScheme | int, string | необяз. | Стратегия URL: -1, 0, 1, full, abs, http, https | link_tag_scheme system setting |
ПЛЕЙСХОЛДЕРЫ ШАБЛОНОВ:
// tagTpl
[[+tag]]
[[+label]]
[[+alias]]
[[+uri]] => The URL contains all the tags of the current request, excluding the one of this template
[[+group_name]] => Name of the group the tag belongs to
[[+group_alias]] => Alias of the group the tag belongs to
// groupTpl
[[+name]] => Group name
[[+alias]] => Group alias
[[+multipleTags]] => Whether this group has more than 1 active tag
[[+tags]] => The markup of the active tags of this group
// outTpl
[[+groups]] => The markup of all the active groups
ПРИМЕР ИСПОЛЬЗОВАНИЯ:
[[!TaggerGetCurrentTag?
&tagTpl=`@INLINE [[+label]]`
&groupTpl=`@INLINE <li>[[+name]]: [[+tags]]</li>`
&outTpl=`@INLINE <ul>[[+groups]]</ul>`
&tagSeparator=`, `
]]
TaggerGetRelatedWhere¶
Сниппет возвращает связанные ресурсы с тем же тегом. Формирует SQL-условие для свойства WHERE в вызове getResources.
СВОЙСТВА:
| Свойство | Тип | Обязат.? | Описание | По умолчанию |
|---|---|---|---|---|
| &resources | string | необяз. | Список ID ресурсов через запятую, для которых выводятся теги | current resource |
| &groups | string | необяз. | Список групп Tagger через запятую, для которых выводятся теги | |
| &showUnused | int | необяз. | При 1 в вывод попадают теги, не назначенные ни одному ресурсу | 0 |
| &showUnpublished | int | необяз. | При 1 в вывод попадают теги, назначенные только неопубликованным ресурсам | 0 |
| &showDeleted | int | необяз. | При 1 в вывод попадают теги, назначенные только удалённым ресурсам | 0 |
| &contexts | string | необяз. | Показывать только теги ресурсов из указанных контекстов (через запятую) |
Внутри сниппет вызывает TaggerGetResourcesWhere, поэтому доступны и его свойства (кроме &tags и &where, которые задаёт код).
ПРИМЕР ИСПОЛЬЗОВАНИЯ:
// Lists all the resources with the same parent, that share at least one tag from the group 1 with the current resource.
[[getResources?
&where=`[[TaggerGetRelatedWhere? &groups=`1`]]`
&parents=`[[*parent]]`
&tpl=`@INLINE <li>[[+pagetitle]]</li>`
&tplWrapper=`@INLINE <ul>[[+output]]</ul>`
&limit=`0`
]]
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$194 per month—let's make that $500!
Learn more










