tvSuperSelect

Тип TV, позволяющий вбивать значения «на ходу».
Версия 1.3.1-beta
Дата выпуска 21.01.2019
Загрузки 1 461
Просмотры 14 932



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

Очень удобно создавать из такого поля «Теги» на сайте, потому что помимо добавления значений «на ходу», у нас есть возможность выбрать уже используемые значения из других ресурсов.

Сниппет tvssResources


Выводит ресурсы по тегу/тегам. Сниппет отдаёт все параметры в pdoFetch, поэтому можно указывать любые параметры pdoTools. Понимает Fenom, может работать с pdoPage.
Пример выборки ресурсов с тегами «tag1», «tag2», «tag3» прописанными в TV с ID 17 или 19:
{$_modx->runSnippet('pdoPage', [
    'element' => 'tvssResources',
    'tv' => '17,19',
    'tag' => 'tag1||tag2||tag3',
    'parents' => 0,
    'tpl' => '@INLINE <div>{$id} - {$pagetitle}</div>',
])}
{$_modx->getPlaceholder('page.nav')}
Теги можно указать, как параметром в сниппет, так и в GET запросе в параметре tag. Сниппет перебивает указанный тег в GET запросе.

Сниппет tvssTickets


Выводит тикеты компонента Tickets по тегу/тегам. Отдаёт все параметры в getTickets, поэтому можно указывать любые доступные параметры getTickets.
Пример выборки тикетов с тегами «tag1», «tag2», «tag3» прописанными в TV с ID 17 или 19:
{$_modx->runSnippet('pdoPage', [
    'element' => 'tvssTickets',
    'tv' => '17,19',
    'tag' => 'tag1||tag2||tag3',
    'parents' => 0,
])}
{$_modx->getPlaceholder('page.nav')}
Теги можно указать, как параметром в сниппет, так и в GET запросе в параметре tag. Сниппет перебивает указанный тег в GET запросе.

Сниппет tvssTags


Выводит список тегов ресурса.
Пример вывода всех тегов из ТВ поля 17, указанных в текущем ресурсе. В ссылке тега формируется УРЛ для ресурса 2, на котором располагается сниппет tvssResources:
{$_modx->runSnippet('tvssTags', [
    'id' => $_modx->resource.id,
    'tv' => 17,
    'pageId' => 2,
])}
В список параметров также входит: tpl, tplWrapper, outputSeparator, toPlaceholder.

Инструкция по созданию тегов на сайте


Внимание! Инструкция описана с использованием Fenom. Если на Вашем сайте он не используется по религиозным соображениям, то придётся самостоятельно переделать весь код из примеров на стандартный синтаксис.
  1. После установки компонента создаём новое ТВ с типом tvSuperSelect. Запоминаем ID ТВшки. В нашем случае — 2.
  2. Создаём ресурс "Ресурсы с тегом". Запоминаем ID ресурса. В нашем случае — 2.
    В longtitle прописываем:
    Ресурсы с тегом{$.get['tag'] ? ' «'~($.get['tag']|unescape:"url")~'»' : ''}
    • Контент для вывода списка ресурсов:
      {if $.get['tag']?}
          <div id="pdopage">
              <div class="rows">
                  {$_modx->runSnippet('pdoPage', [
                      'element' => 'tvssResources',
                      'tv' => '2',
                      'parents' => 0,
                      'ajaxMode' => 'default',
                      'tpl' => '@INLINE <div>{$id} - {$pagetitle}</div>',
                  ]) ?: 'Ресурсов по данному тегу не найдено'}
              </div>
              {$_modx->getPlaceholder('page.nav')}
          </div>
      {else}
          Укажите тег для выборки документов
      {/if}
    • Контент для вывода списка тикетов:
      {if $.get['tag']?}
          <div id="pdopage">
              <div class="rows">
                  {$_modx->runSnippet('pdoPage', [
                      'element' => 'tvssTickets',
                      'tv' => '2',
                      'parents' => 0,
                      'ajaxMode' => 'default',
                  ]) ?: 'Тикетов по данному тегу не найдено'}
              </div>
              {$_modx->getPlaceholder('page.nav')}
          </div>
      {else}
          Укажите тег для выборки документов
      {/if}
  3. В шаблоне (или чанке), в котором у Вас выводится полная статья или тикет, указываем вывод списка тегов:
    {$_modx->runSnippet('tvssTags', [
        'id' => $_modx->resource.id,
        'tv' => 2,
        'pageId' => 2,
    ])}

Инструкция по выводу похожих статей с помощью тегов


  • Похожие ресурсы

    Fenom:
    {$_modx->runSnippet('tvssResources', [
        'tv' => '2',
        'tags' => $_modx->runSnippet('tvssTags', ['id' => $_modx->resource.id, 'tv' => '2', 'tpl' => '@INLINE [[+tag]]', 'outputSeparator' => '||']),
        'parents' => 0,
        'limit' => 4,
    ]) ?: 'Похожих записей не найдено'}
    Стандартный синтаксис:
    [[tvssResources:empty=`Похожих записей не найдено`?
        &tv=`2`
        &tags=`[[tvssTags?id=`[[*id]]`&tv=`2`&tpl=`@INLINE [[+tag]]`&outputSeparator=`||`]]`
        &parents=`0`
        &limit=`4`
    ]]

  • Похожие тикеты

    Fenom:
    {$_modx->runSnippet('tvssTickets', [
        'tv' => '2',
        'tags' => $_modx->runSnippet('tvssTags', ['id' => $_modx->resource.id, 'tv' => '2', 'tpl' => '@INLINE [[+tag]]', 'outputSeparator' => '||']),
        'parents' => 0,
        'limit' => 4,
    ]) ?: 'Похожих записей не найдено'}
    Стандартный синтаксис:
    [[tvssTickets:empty=`Похожих записей не найдено`?
        &tv=`2`
        &tags=`[[tvssTags?id=`[[*id]]`&tv=`2`&tpl=`@INLINE [[+tag]]`&outputSeparator=`||`]]`
        &parents=`0`
        &limit=`4`
    ]]

Немного подробнее о хранении значений в базе

  1. У данного ТВ поля есть своя таблица tvss_options, в ней данные хранятся в таком виде:


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



Первое сделано для удобной фильтрации, второе — для простого вывода.

Обсуждение компонента в сообществе MODX.PRO.

1.3.1-beta (21.01.2019)

  • Исправлен тип колонки tv_id на int в схеме базы данных

1.3.0-beta2 (05.11.2018)

  • Поправлено формирование имени ТВ поля

1.3.0-beta (28.10.2018)

  • Добавлена поддержка MIGX

1.2.2-beta (13.09.2018)

  • Добавлено поле display в ComboBox для разделения отображаемого текста и значения

1.2.1-beta (13.09.2018)

  • Добавлен параметр context_key, передаваемый в процессор

1.2.0-beta (12.09.2018)

  • Добавлена возможность указать ТВ свой коннектор и процессор для вывода кастомных значений

1.1.7-beta (15.12.2017)

  • Поправлены предупреждения в сниппете tvssResources и tvssTickets

1.1.6-beta (03.06.2017)

  • Поправлены баги в сниппете tvssResources и tvssTickets

1.1.5-beta2 (24.04.2017)

  • Корректировки сниппета tvssCloud

1.1.5-beta (24.04.2017)

  • Сниппет tvssCloud

1.1.4-beta (07.12.2016)

  • Поправлена работа с товарами miniShop2 >=2.4
  • Рефакторинг кода плагина

1.1.3-beta (17.06.2016)

  • В сниппеты tvssResources и tvssTickets добавлен параметр &like, который отвечает за способ выборки. Если указан &like=`1`, то при выводе ресурсов по тегу "еда", в результаты будут добавлены ресурсы с тегом "педагог". Если же &like=`0`, то поиск по тегам осуществляется точный. По-умолчанию &like=`0`.

1.1.2-beta2 (07.06.2016)

  • Поправлен баг с удалением данных из таблицы tvssOption при полной очистке поля

1.1.2-beta (19.03.2016)

  • В сниппетах tvssResources и tvssTickets поправил warnings в журнал ошибок
  • Поправлен косяк с кривым отображением input

1.1.1-pl3 (18.03.2016)

  • В tvssTags добавлен параметр &scheme

1.1.1-pl2 (18.03.2016)

  • В сниппетах tvssResources и tvssTickets поправил обработку совмещения параметра &loadModels введённого пользователем

1.1.1-pl (18.03.2016)

  • Восстановлена поддержка PHP 5.3
  • Восстановлена возможность указания пустого &outputSeparator в сниппете tvssTags
  • Добавлен сниппет tvssTickets для вывода списка тикетов (компонент Tickets) по тегу/тегам

1.1.0-pl (17.03.2016)

  • Добавлен сниппет tvssResources для вывода списка ресурсов по тегу/тегам
  • Добавлен сниппет tvssTags для вывода списка тегов ресурса

1.0.1-beta (04.02.2016)

  • Поправлен косяк с кривым отображением кнопок у поля

1.0.0-beta

  • Start

Последние обсуждения в сообществе MODX.pro