[tvSuperSelect] Тип TV: автозаполняемый список из ms2, для реализации тегов

Это такой тип ТВ поля, в который можно вбивать значения «на ходу». Другими словами, мы не указываем «Возможные значения» при редактировании ТВ, а вбиваем эти значения в это поле на странице редактирования ресурса.
Очень удобно создавать из такого поля «Теги» на сайте, потому что помимо добавления значений «на ходу», у нас есть возможность выбрать уже используемые значения из других ресурсов.
О хранении значений в базе
- У данного ТВ поля есть своя таблица tvss_options, в ней данные хранятся в таком виде:

- Однако, данные также хранятся и в таблице site_tmplvar_contentvalues, но уже в виде JSON массива:

Скачать можно из репозитория modstore.pro — modstore.pro/packages/other/tvsuperselect
P.S.: Спасибо Василию за часть кода!
Комментарии: 125
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
У меня складывается впечатление, что пост твой появился тут ради ссылки. =) Капелька бреда, не воспринимай всерьёз. ;)
Не угадал. Мне там пока хвалится нечем. Главная идея сайта — написать документацию к своим дополнениям и подгружать её в админке при нажатии на кнопку Помощь (так работает помощь у самого MODX), а также сделать реализацию платных дополнений. Ни до одного ни до другого руки еще не дошли.
На стандартном синтаксисе хз, надо писать сниппет. Где-то в марте обновлю пакет, добавлю туда необходимый, для вывода стандартным синтаксисом, сниппет. Сейчас совершенно не до этого, тем более я уже давно не использую почти нигде стандартный синтаксис MODX, поэтому мне «не припекает» особо писать его.
Можешь сам для себя написать сниппет, он будет похож на код Fenom. Ничего сверхъестественного нет.
Просто выводится название TV-поля и ничего более
Запускать в пакете "Console"
Хочется конечно, чтобы в админке можно было бы управлять этими тегами, как в Smarttag, а так все круто.
И кстати, правильно ли это, что он не реагирует на настройки «разделитель», и выводит всегда JSON?
Спасибо!
Настройки никакие не прикручивал. А что он должен делать, когда предположим, будет реагировать на разделитель?
delТаким образом вывожу соответствующие «тегам», ресурсы. НО, для этого надо либо настроить по этой статье, чтобы поле TV копировалось в таблицу modx_site_content (настроил, но как-то через раз работает, думаю дело в событии OnDocFormSave), либо как-то по-другому выводить ресурсы.
Не подскажешь, как быть?)
docs.modx.pro/components/pdotools/snippets/pdoresources
В response возврощает {«output»:"",«page»:1,«pagination»:"",«pages»:0,«total»:0}
Мог бы, пожалуйста, кто-нибудь помочь с данной проблемой.
tvSuperSelect 1.1.2-beta
Задачу, конечно, можно решить через
— но в таком случае идет двойная работа по формированию урлы — в чанке и в сниппете.
Плюс ко всему, если реализовывать теги по вашему примеру в документации, то в чанке со списком ресурсов русскоязычные теги будут представлены в виде:
— тогда как на странице самого ресурса ссылки тегов, вызванные через tvssTags, будут представлены в url-кодированном виде.
Снипет + Чанк.
Но при выборе тега «еда», выбираются документы с тегом "еда" и «педагог»
В документации нашел только вывод тегов текущего ресурса.
Например вбили:
Нужно вывести отдельно 2-е значение(300)
Как-то так…
А вот как использовать tv в migx таблице?
Проблема: ввожу значение, а оно не сохраняется.
Вкладка формы:
Разметка колонок:
Как сделать так, что бы выводились только опубликованные документы?
Использую ваш код:
Контент для вывода списка ресурсов:
{if $.get['tag']?}
{$_modx->runSnippet('pdoPage', [
'element' => 'tvssResources',
'tv' => '2',
'parents' => 0,
'ajaxMode' => 'default',
'tpl' => '@INLINE {$id} — {$pagetitle}',
]) ?: 'Ресурсов по данному тегу не найдено'}
{$_modx->getPlaceholder('page.nav')}
{else}
Укажите тег для выборки документов
{/if}
Используйте параметры pdoResources, а точнее showUnpublished.
Насчёт «code» понятно, буду использовать.
И дополнительный вопрос: Можно ли Ваш инструмент использовать для создания облака тегов сайта?
2. modx.pro/solutions/7958-tag-cloud-for-minishop2/ — тут неплохо всё расписано. Только я не совсем уверен, что тот вариант будет работать с тегами tvSuperSelect… Но думаю идею можно взять оттуда:
Чтобы выбирались теги со всего сайта и с какой-то определённой категории.
Не думаю что нужно что-то ещё, уровень можно подставлять в классах чанка для величины тега…
Выводит отлично, но есть 2 вопроса:
1. Из журнала ошибок:
Сниппет работает несмотря на это, но немного раздражает… Как её убрать?
2. Не нашел как убрать из списка похожих статей саму статью, из которой вызван сниппет.
2) Добавить параметр where и исключить текущий ресурс там:
Спасибо, насчет where забыл совсем )))
Павел, скажите пожалуйста, это можно как-нибудь решить, кроме как {$_modx->runSnippet('tvssTags@tags', ['id'=>$_modx->resource.id])}? Спасибо
— при том, что по отдельности как дополнение, так и плагин срабатывают корректно.
1. Создаем сниппет (tags.list):
2. Создаем чанк для отображения кнопки тега (tags.list.item):
3. Вызываем созданный сниппет:
При желании можно добавить подсчет использований каждого тега, убрав $q->groupby('value') и добавив счетчик внутри цикла.
Опишите это пожалуйста для далёких. И можно ли будет при этом теги лимитриовать по самым используемым? Спасибо
Что же до подсчета кол-ва использований, то примерно так:
— осталось только добавить сортировку массива по вкусу.)
Ну и в чанк добавить плейсхолдер [[+count]] для отображения
Эх, услышал бы уважаемый Павел эти вздохи и дополнил свой замечательный компонент данным функционалом!
— в таком варианте результат будет отсортирован от самых используемых тегов к наименее.
Лимит бы ещё сделать и вообще всё круто будет!
На:
+ добавить в вызов сниппета параметр &limit.
Заранее, благодарю!
2. Кастомной маршрутизацией по шаблону /tags/{item} присваивается плейсхолдер и sendForward-ится на страницу из пункта 1.
Однако из статьи bezumkin.ru/sections/tips_and_tricks/2918/ не совсем понятно как применить все описанное к данному случаю.
Не сочтите за наглость, опишите это пожалуйста для далёких (пока) новичков в MODX и не особо знающих php, а именно можете дать код плагина, который это делает (кастомную маршрутизацию).
Я так понимаю на него надо будет повесить событие OnPageNotFound
Заранее, благодарю!
Вариант 1: все-таки прочитать статью по ссылке, а именно участок кода с пометкой «рабочий плагин» и изменить там 3.5 строчки. Вот, например, аналогичный плагин для реализации страниц пользователей.
Вариант 2: modx.pro/work
Отправил PR: github.com/modxcms/revolution/pull/13236. Это практически мой первый вклад в OpenSource, надеюсь пригодится, если что — поправьте, буду благодарен :)
можно как то исправить все делал по инструкции.
ставлю, выдает в списке фильтров
Блок Похожие материалы, основанный на инструкции
Похожие ресурсы
Fenom:
На PHP 5.6 и на PHP 7.0 вываливается, MODX 2.5.8, Apache2
Кстати, попробовал использовать с MIGX тип TV авто-метка и тоже не работает.
Как сделать сортировку тегов в снипете tvssTags?
Вывожу так. Ничего не меняется.
Сейчас получается, что теги в обратном порядке выводятся.
Но ASC и DESC ситуацию не меняют никак. Порядок всегда в обратном направлении.
где с помощью исключаю ресурс, в котором вывожу похожие материалы.
Когда понадобилось вывести все это через чанк fenom:
условие where перестает работать.
Если выводить чанк стандартным способом:
то все работает.
Кстати, пробовал исключать ненужные материал через
и аналогичная ситуация. В вызове чанка через fenom это не работает, т.е текущий ресурс в похожих материалах выводится.
Подскажите, где у меня ошибка?
Что это за колдунство?) Запишите нормально, по-человечески, массивом!
Вот тоже самое:
Не могли бы Вы помочь еще в одном вопросе. В целях самообразования я попытался вывести похожие материалы другим способом, используя pdoResources и присоединение таблицы tvss_options через leftJoin. У меня есть доп. поле tv_tags (tvSuperSelect), в котором я задаю теги и они в свою очередь передаются при сохранении ресурса в поле tags таблицы site_content. В поле tags информация сохраняется в таком виде:
Пока я остановился на этом:
И тут во where я не могу понять, как сделать условие сравнения value из tvss_options и моего tags?
Не могли бы Вы помочь?
tag=%25D0%25B2%25D1%258B%25D1%2581%25D1%2582%25D0%25B0%25D0%25B2%25D0%25BA%25D0%25B0
Можно как то исправить?
'id' => $_modx->resource.id,
'tv' => 35, //ID tv тегов
'pageId' => 54, //ID страницы выборки по тегам
'outputSeparator' => '',
'tpl' => '@INLINE <a class=«tl-tag» href="{$link | unescape: «url»}">{$tag}',
])}
Причина была здесь здесь {$link | unescape: «url»}
Подскажите, пожалуйста, какой должен быть код (в данном синтаксисе, а не fenom) на странице с id=6, чтобы там выводились ресурсы с выбранным тегом?
У меня пока так (и ничего не выводится):
Но возникло еще 2 вопроса: первый — как на станице, где выводятся статьи, отфильтрованные по конкретному тегу, вывести в названии сам этот тег?
И второй вопрос: как с помощью стандартного синтаксиса сделать читаемым кириллический тег в url? Сейчас тег «важно» в адресе выглядит так: ?tag=%25D0%25B2%25D0%25B0%25D0%25B6%25D0%25BD%25D0%25BE
Буду благодарна за ответы.
Если внутри чанка добавить сниппет вывода списков тегов ресурса, будет работать?
Вот так делаю, не выводит ни чего
Не выводит вообще ни чего.
ID ТВ поля 15, значения присвоены prnt.sc/1di5bxu
ID родителя правильное prnt.sc/1di5le0
В ресурсах добавлены теги, и им присвоены значения из скриншота выше prnt.sc/1di6vxq
Что не так, куда копать в итоге, сниппет вообще ни чего не выводит, после того как в elements добавляется указание tvssResources
modx.pro/help/23302