tvSuperSelect

Тип TV, позволяющий вбивать значения «на ходу».
Версия 1.3.1-beta
Дата выпуска 21.01.2019
Загрузки 1 408
Просмотры 12 261
Внимание, этот компонент требует версию PHP 5.4 или выше! Если ваш сайт использует PHP ниже требуемого, установка этого дополнения может его сломать.
Внимание, этот компонент требует версию MODX не ниже 2.3 !



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

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

Сниппет 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