Jump to main content Jump to doc navigation

Теги, категории и многое другое для MODX!

Надёжная и производительная система управления тегами. Кратко о возможностях:

  1. Протестировано с миллионом тегов
  2. Постраничный выпадающий список и автодополнение для удобного ввода тегов
  3. Типы ввода: combo-box или tag-field
  4. Неиспользуемые теги можно автоматически удалять из базы данных
  5. Создание тегов можно ограничить CMP, а не полем ввода
  6. Для ввода можно использовать облако 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

  • modmore
  • STERC
  • Digital Penguin
  • Jens Wittmann – Gestaltung & Entwicklung
  • CrewMark
  • Fabian Christen
  • Sepia River Studios
  • Dannevang Digital
  • Alex
  • A. Moreno
  • Chris Fickling
  • Stéphane Jäggi
  • Murray Wood
  • Anton Tarasov
  • JT Skaggs
  • deJaya
  • Lefthandmedia
  • eydolan
  • Following Sea
  • Guido Gallenkamp
  • YJ
  • Raffy
  • Snow Creative
  • Nick Clark
  • Guest
  • Helen
  • krisznet
  • Yanni
  • Richard

Budget

$194 per month—let's make that $500!

Learn more