multiTV
Documentation
Перейти

multiTV представляет собой пакет для MODX Evolution, предназначеный для управления контентом.

Этот пакет добавляет новый тип переменной шаблона (TV-параметра), состоящий из мульти-элементов.

Пакет содержит три основные части

  • Пользовательская переменная для отображения и редактирования мульти-элементов - списоков или datatable
  • Сниппет для отображения значения переменной шаблона
  • Модуль редактирования содержимого пользовательских таблиц базы данных

а также некоторые дополнения

  • Модификатор PHx
  • Экстендер Ditto multiTvFilter
  • Сниппет для старых установок, чтобы обновить содержимое переменных шаблона в новый формат, введенный с версии 1.4.11.

Установка

Есть две возможности установить multiTV в MODX Evolution

  • Используйте Менеджер Пакетов и установите последний пакет multiTV
  • Или установите вручную:
    1. Загрузите папку assets/tvs/multitv в соответствующую папку в вашей установке.
    2. Создайте новый шаблон и переменную с типом ввода custom input (если имя этой переменной будет multidemo то будет использоваться файл конфигурации multidemo)
    3. Вставьте следующий код в возможные значения @INCLUDE/assets/tvs/multitv/multitv.customtv.php
    4. Создайте новый сниппет с названием multiTV и поместите в него следующий кода <?php return include(MODX_BASE_PATH.'assets/tvs/multitv/multitv.snippet.php'); ?>

Совместимость

  1. Если вы хотите использовать multiTV с ManagerManager до версии MODX 1.0.9 вы должны исправить файл mm.inc.php и вставить case 'custom_tv': в 136 строке перед строкой $t = 'textarea';
  2. Если вы хотите использовать multiTV с YAMS, вы должны исправить yams.plugin.inc.php согласно этой инструкции.
  3. Если вы обновляете 1.4.10 и ниже можно установить сниппет updateTV и изменить данные в вашей переменной multiTV в новый формат. Это необходимо, если вы хотите добавить/удалить столбцы в multiTV или если вы хотите отсортировать результаты по столбцу.
  4. Если вы хотите использовать PHx с multiTV необходимо немного изменить код плагина PHx:
if (!class_exists('PHxParser')) {
    include MODX_BASE_PATH . "assets/plugins/phx/phx.parser.class.inc.php";
}
$e = &$modx->Event;
switch($e->name) {
    case 'OnParseDocument':
        $PHx = new PHxParser($phxdebug,$phxmaxpass);
        $PHx->OnParseDocument();
        break;
}

Переменная шаблона

Все параметры задаются в конфигурационном файле в папке configs с тем же именем, как и переменная шаблона в виде PHP-массива .config.inc.php или JSON файла .config.json (файл JSON имеет приоритет перед PHP-массивом).

Параметр display

Отображение полей ввода настраивается с помощью параметра display

  • horizontal - горизонтальное расположение (пример event.config.inc.php)
  • vertical - вертикальное расположение (пример images.config.inc.php)
  • single - содержит только один элемент
  • datatable - пример links.config.inc.php или multicontent.config.inc.php
  • dbtable - пример dbtabledemo.config.json

Параметр fields

Поля ввода одного элемента списка определяются в параметре fields

Эта переменная содержит массив имен полей и каждое имя поля содержит массив свойств поля.

ПолеОписаниеЗначение по умолчанию
caption Заголовок (при horizontal) или лейбл (при vertical) для поля ввода -
type Тип поля ввода (используются все типы ввода MODX кроме url и richtext, добавлен thumb для отображения эскизов изображений) text
elements Для ввода возможных значений переменной, например, для выпадающего списка всех дочерних документов корневой папки сайта: @SELECT `pagetitle`, `id` FROM `modx_site_content` WHERE parent = 0 ORDER BY `menuindex` ASC -
default Значение по умолчанию. Это значение может содержать вычисления. Может содержать два плэйсхолдера: [+i+] - автоматически увеличивающийся индекс, [+alias+] - псевдоним редактируемого документа. -
thumbof Имя переменной для миниатюры изоображения. Миниатюра будет отображена в этой области. -
width Ширина поля ввода (только если тип отображения полей horizontal) 100

Поддерживаемые типы полей: text, rawtext, email, number, textareamini, textarea, rawtextarea, htmlarea, date, dropdown, listbox, listbox-multiple, checkbox, option, image, file

Параметр columns

В режимах datatable и dbtable могут быть определены в качестве ключа параметры columns. Этот ключ содержит массив параметров столбцов. Каждый столбец содержит массив свойств. Если свойство не задано, в качестве ключа используется fields.

СвойствоОписаниеЗначение по умолчанию
fieldname (обязательный параметр) Имя свойства -
caption Заголовок столбца caption параметра fields
width Ширина столбца width параметра fields
render Enable rengering of the column content with this PHx capable strin -
sortable Включить сортировку по этой колонке, нажав на Заголовок столбца в datatable или dbtable режиме. Активно только при отключенной сортировке в других опциях true

Редактирование слоев

В режимах datatable и dbtable редактирование содержимого слоя может быть определено в ключе form. Этот ключ содержит массив параметров вкладки form.

СвойствоОписаниеЗначение по умолчанию
caption (обязательный параметр) Заголовок вкладки form -
content (обязательный параметр) Ассоциативный массив параметров полей caption параметра fields

Each form tab setting contains an associative array of field properties (the key contains the fieldname in fields). If a field property is not set, the field property in fields is used.

СвойствоОписаниеЗначение по умолчанию
caption Заголовок для input caption параметра fields

Шаблоны по умолчанию

Шаблоны для сниппета multiTV используемые по умолчанию, могут быть определены в параметре templates

СвойствоОписаниеЗначение по умолчанию
rowTpl Шаблон вывода строки. Может быть изменен в вызове сниппета -
outerTpl Шаблон вывода внешнего блока. Может быть изменен в вызове сниппета -

Другие опции

Другие опции могут быть определены в параметре configuration

СвойствоОписаниеЗначение по умолчанию
enablePaste multiTV может содержать ссылку для вставки данных. В этом окне вы могли бы вставить Word/HTML таблицы данных из буфера обмена, Google Docs таблицы и данные в формате csv. true
enableClear Ссылка на удаление всех элементов multiTV true
csvseparator Разделитель столбцов при вставке данных csv. Каждая строка должна начинаться с новой строки. ,
radioTabs Tabs in the datatable editing layer are displayed as radio buttons. The button state is saved in fieldTab key of each multiTV row. false
sorting Включить сортировку по щелчку на заголовке столбца в datatable или dbtable режиме. false
hideHeader Скрыть заголовок в datatable или dbtable режиме. ,

Смотрите файл конфигурации для TV-параметра multidemo для всех используемых вертикальных настроек и multicontent для всех используемых datatable настроек.

Сниппет

Сниппет multiTV отображает содержимое переменной multiTV. Разместите примерно такой вызов сниппета. Параметр &tvName обязателен. Остальные параметры в случае если используются значения по умолчанию, могут быть удалены.

[!multiTV?
&tvName=`yourMultiTVname`
&docid=`[*id*]`
&tplConfig=``
&outerTpl=`@CODE:<ul>((wrapper))</ul>`
&rowTpl=`@CODE:<li>((event)), ((location)), ((price))</li>`
&display=`5`
&offset=`0`
&rows=`all`
&randomize=`0`
&reverse=`0`
&orderBy=``
&toPlaceholder=``
&toJson=`0`
&published=`1`
&emptyOutput=`1`
&noResults=``
&outputSeparator=``
&firstClass=`first`
&lastClass=`last`
&evenClass=``
&oddClass=``
&paginate=`0`
&offsetKey=`page`
!]

Параметры

По умолчанию шаблоны для внешнего блока и строки могут быть определены в файле конфигурации. Эти шаблоны могут быть перезаписаны параметрами rowTpl и outerTpl в вызове сниппета.

Формат: TV-параметр
Значение по умолчанию: пусто
Примечание: Обязательный параметр. Имена столбцов multiTV будут получены из конфигурационного файла
Пример:
&tvName=`yourMultiTVname`
Формат: id документа
Значение по умолчанию: Id текущего документа
Примечание: Необходим при вызове в шаблоне Ditto.
Пример:
&docid=``
Формат:
Значение по умолчанию: нет
Примечание: Будет с префиксом templates
Пример:
&tplConfig=``
Формат: имя чанка | @FILE | @CODE
Значение по умолчанию: @CODE:
Примечание: Имя чанка, имя файла (должно начинаться с @FILE) или код (должно начинаться с @CODE - плэйсхолдеры должны быть в двойных скобках (( и )). (Примечание 3)
Пример:
&outerTpl=``
Формат: имя чанка | @FILE | @CODE
Значение по умолчанию: @CODE:
Примечание: Имя чанка, имя файла (должно начинаться с @FILE) или код (должно начинаться с @CODE - плэйсхолдеры должны быть в двойных скобках (( и )). (Примечание 3)
Пример:
&rowTpl=``
Формат: число | all
Значение по умолчанию: 5
Примечание: all - показать все
Пример:
&display=`all`
Формат: число
Значение по умолчанию: 0
Примечание:
Пример:
&offset=`5`
Формат: число | all
Значение по умолчанию: all
Примечание:
Пример:
&rows=`1,2`
Формат: 0 | 1
Значение по умолчанию: 0
Примечание: Отключает параметры reverse и orderBy
Пример:
&randomize=`1`
Формат: 0 | 1
Значение по умолчанию: 0
Примечание: Отключает orderBy параметр
Пример:
&reverse=`1`
Формат: name:type direction
Значение по умолчанию: name:text asc
Примечание: Тип может быть text или date
Пример:
&orderBy=``
Формат: имя плейсхолдера
Значение по умолчанию: нет
Примечание: Будет создан плейсхолдер с именем, указанным в значении параметра . Отдельные элементы выводятся плейсхолдерами, где к имени добавляется номер строки . Нормальный вывод сниппета подавляется.
Пример:
&toPlaceholder=`myPlaceholder`
Формат: 0 | 1
Значение по умолчанию: 0
Примечание:
Пример:
&toJson=`1`
Формат: 0 | 1 | 2
Значение по умолчанию: 1
Примечание: отображать только multiTV из опубликованных (1), неопубликованных (0) или любых (2) документов
Пример:
&published=`2`
Формат: 0 | 1
Значение по умолчанию: 1
Примечание:
Пример:
&emptyOutput=`0`
Формат: имя чанка | @FILE | @CODE
Значение по умолчанию: нет
Примечание:
Пример:
&noResults=`noResults`
Формат: строка
Значение по умолчанию: пусто
Примечание:
Пример:
&outputSeparator=``
Формат: имя класса
Значение по умолчанию: first
Примечание: Содержимое плейсхолдера row.class для первого элемента
Пример:
&firstClass=``
Формат: имя класса
Значение по умолчанию: last
Примечание: Содержимое плейсхолдера row.class у последнего элемента
Пример:
&lastClass=``
Формат: имя класса
Значение по умолчанию: нет
Примечание: Содержимое плейсхолдера row.class для четных элементов
Пример:
&evenClass=`even`
Формат: имя класса
Значение по умолчанию: нет
Примечание: Содержимое плейсхолдера row.class для нечетных элементов
Пример:
&oddClass=`odd`
Формат: 0 | 1
Значение по умолчанию: 0
Примечание:
Пример:
&paginate=`1`
Формат:
Значение по умолчанию: page
Примечание:
Пример:
&offsetKey=``

Плейсхолдеры rowTpl

ИмяОписание
"fieldname" может быть использовано каждое поле, определенное в конфигурации
iteration содержит номер текущего элемента multiTV
row.number содержит номер строки текущего элемента multiTV
row.class 'first' - для первой отображенной строки, 'last' - для последней отображенной строки
row.total содержит количество всех отображаемых строк
docid значение параметра docid или id текущего документа

Плейсхолдеры outerTpl

ИмяОписание
wrapper место вывода всех строк
rows.offset содержит количество строк от начала, которые не отображаются
rows.total содержит количество всех отображаемых строк
docid значение параметра docid или id текущего документа
pagination содержит постраничное разбиение, если параметр включен

Модуль

Модуль multiTV Database Manager обеспечивает почти те же параметры, как и переменная шаблона multiTV в режиме datatable. Главное отличие - это прямой доступ к таблицам базы данных MODX Evolution.

С Database Manager можно управлять (CRUD) собственными таблицами базы данных.

Конфигурация

Каждый файл конфигурации создаст соответствующую вкладку в модуле Database Manager. Файлы конфигурацйии находятся в папке assets/tvs/multitv/moduleconfigs. Смотрите пример файла конфигурации event_log.moduleconfig.json

Каждый файл конфигурации содержит JSON массив со следующими параметрами:

Таблица

таблица базы данных с ключем table. Имя таблицы будет служить префиксом таблицы MODX.

Заголовок

Название вкладки в модуле Database Manager с ключем caption.

Процессоры

Путь к папке с процессорами можно установить в ключе processors. Если не задано, то по умолчанию используются процессоры assets/tvs/multitv/processors. Если задано, то процессоры извлекаются из вложенной папки assets/tvs/multitv/processors названой по значению ключа. If that subfolder does not exist, the value points to a subfolder of the MODX base path.

Существует пять процессоров, используемых в данный момент.

ПроцессорыОписание
loadtable Загружает в текущую таблицу с limit и offset в datatable
loadrecord Загружает строки таблицы в редактирование слоя
createrecord Создает новую строку таблицы для редактирования слоя
deleterecord Удаляет строку таблицы
saverecord Сохраняет значения редактируемого слоя в строке таблицы

Поля

Поля таблицы базы данных могут быть определены в ключе fields. Этот ключ содержит массив fieldnames и каждый fieldname содержит массив свойств поля.

СвойствоОписаниеЗначение по умолчанию
caption Заголовок (при horizontal) или лейбл (при vertical) для поля ввода -
type Тип поля ввода (используются все типы ввода MODX кроме url и richtext, добавлен thumb для отображения эскизов изображений) и unixtime для конвертации datetime таблицы данных в unixtime и наоборот text
elements Для ввода возможных значений переменной, например, для выпадающего списка всех дочерних документов корневой папки сайта: @SELECT `pagetitle`, `id` FROM `modx_site_content` WHERE parent = 0 ORDER BY `menuindex` ASC -
default Значение по умолчанию. Это значение может содержать вычисления. Может содержать два плэйсхолдера: {i} - автоматически увеличивающийся индекс, {alias} - псевдоним редактируемого документа. -
thumbof Имя переменной для миниатюры изоображения. Миниатюра будет отображена в этой области. -
width Ширина поля ввода 100

During adding/editing one row a layer is displayed. In this editing layer the MODX input type richtext is not usable at the moment (degrades to textarea).

Столбцы

Видимые столбцы datatable могут быть определены в ключе columns. Этот ключ содержит массив параметров столбцов. Каждый параметр столбца содержит массив свойств. Если свойство не задано, используется свойство ключа fields.

СвойствоОписаниеЗначение по умолчанию
fieldname (обязательный параметр) Имя свойства -
caption Заголовок столбца Заголовок для fields
width Ширина столбца Ширина дял fields
render Enable rengering of the column content with this PHx capable string -

Редактирование слоев

Содержимое редактируемого слоя во время добавления/редактирования одной строки может быть определено в ключе form. Этот ключ содержит массив параметров вкладки form.

СвойствоОписаниеЗначение по умолчанию
caption (обязательный параметр) Заголовок вкладки form -
content (обязательный параметр) Ассоциативный массив параметров полей -

Each form tab setting contains an associative array of field properties (the key contains the fieldname in fields). If a field property is not set, the field property in fields is used.

СвойствоОписаниеЗначение по умолчанию
caption Заголовок для ввода Заголовок для fields

Кнопки

Кнопки для модуля Database Manager могут быть определены в ключе buttons. Этот ключ содержит ассоциативный массив конфигурации кнопок.

СвойствоОписаниеЗначение по умолчанию
position (обязательный параметр) Положение кнопок (может быть topleft, topright, bottomleft or bottom right) -
buttons (обязательный параметр) Ассоциативный массив конфигурации кнопок -

Каждая конфигурация конопок содержит ассоциативный массив параметров кнопок.

PropertyDescriptionDefault
caption текст на кнопке -
icon иконка для кнопки, расположенная в assets/tvs/multitv/css/images -
processor имя обработчика файла assets/tvs/multitv/processors/[key] (key contains the group config key) -
form Массив параметров вкладки form (см. редактирование слоев) -

Пример генерации кнопки.

"buttons": {
    "coupons": {
        "position": "topright",
        "buttons": {
            "generate": {
                "caption": "Generate",
                "icon": "wand.png",
                "processor": "generate",
                "form": [
                    {
                        "caption": "Coupon",
                        "content": {
                            "count": {},
                            "discount": {},
                            "validuser": {},
                            "validgroup": {},
                            "validuntil": {},
                            "maxuse": {}
                        }
                    }
                ]
            }
        }
    }
},

Другие опции

Другие опции могут быть определены в ключе configuration.

СвойствоОписаниеЗначение по умолчанию
radioTabs Tabs in the datatable editing layer are displayed as radio buttons. The button state is saved in fieldTab column of each table row (this column has to exist). false
sorting Enable sorting by column header. false
sortindex Column name that ist used as sorting index. The column type has to be integer and it should contain an autoincremented index (see in Fields) as default value. false

Дополнительно

PHx модификатор

Так как строка JSON в multiTV начинается с [[ и заканчивается ]] (Примечание 1), вы не можете проверить multiTV на пустоту, т.е. [*multittvname:ne=``:then=`not empty`*].

Но вы могли бы использовать в этом случае PHx модификаторы из папки phx-modifier. Переместите два файла из этой папки в assets/plugins/phx/modifiers.

Пример использования:

[+phx:multitvisempty=`tvname|docid`:then=`xxx`:else=`yyy`+]
[+phx:multitvisnotempty=`tvname|docid`:then=`xxx`:else=`yyy`+]

Если docid не установлен, по умолчанию используется текущий документ.

multiTvFilter экстендер Ditto

Для фильтрации строк, отображаемых Ditto воспользуйтесь экстендером multiTvFilter.

ПараметрОписание
multiTvFilterBy (обязательный параметр) имя переменной multiTV
multiTvFilterOptions json-массив параметров фильтра

Могут быть использованы следующие параметры фильтра

ПараметрОписание
name имя поля mulitTV, которое используется для фильтрации
type тип содержимого поля multiTV (возможные варианты: date, text)
value Значение поля multiTV для фильтрации
mode режим фильтрации содержимого поля multiTV
conjunction Логическая связь с предыдущим фильтром (AND/OR)

Следующие режимы могут быть использованы для поля типа text:

Тип сравненияОписание
contains фильтровать, если хотя бо одно поле содержит текст критерия
allcontains фильтровать, если все поля содержат текст критерия
containsnot фильтровать, если одно из полей не содержит текст критерия
allcontainsnot фильтровать, если все поля не содержат текст критерия
is фильтровать если одно поле соответствует критерию
allis фильтровать если все поля соответствуют критерию
isnot фильтровать, если одно из полей не соответствует критерию
allisnot фильтровать, если все поля не соответствуют критерию

Следующие режимы могут быть использованы для поля типа date:

Тип сравненияОписание
before фильтровать, если одно поле меньше критерия
beforeall фильтровать, если все поля меньше критерия
equal фильтровать, если одно поле равно критерию
equalall фильтровать, если все поля равны критерию
after фильтровать, если одно поле больше критерия
afterall фильтровать, если все поля больше критерия

Примеры

Показать все дочерние документы контейнеров 3, 4 и 5, у которых переменная шаблона multiTV event в столбце title не содержит Important

[[Ditto?
&parents=`3,4,5`
&display=`all`
&tpl=`...`
&extenders=`@FILE assets/tvs/multitv/dittoExtender/multitvfilter.extender.inc.php`
&multiTvFilterBy=`event`
&multiTvFilterOptions=`[{"name":"title","type":"text","value":"Important","mode":"contains"}]`
]]

Если вы хотите фильтровать по нескольким значениям multiTV, добавьте еще один массив в multiTvFilterOptions. В этом примере отобразятся все дочерние документы контейнеров 3, 4, и 5 у которых переменная шаблона multiTV event в столбце title не содержит Important и все столбцы location соответствуют Outdoor.

[[Ditto?
&parents=`3,4,5`
&display=`all`
&tpl=`...`
&extenders=`@FILE assets/tvs/multitv/dittoExtender/multitvfilter.extender.inc.php`
&multiTvFilterBy=`event,event`
&multiTvFilterOptions=`[{"name":"title","type":"text","value":"Important","mode":"contains"},{"name":"location","type":"text","value":"Outdoor","mode":"allisnot","conjunction":"OR"}]`
]]

Обновление на новый формат данных

Версия 1.4.11 multiTV использует новый формат данных (имена столбцов сохраняются в виде ключ - значение). Переменная и сниппет поддерживают старый и новый форматы, так что вам не придется обновлять multiTVs. Но вам это потребуется, если вы захотите добавить/удалить столбцы в multiTVs. Вызовите сниппет в документе MODX следующим образом:

[!updateTV?
&tvNames=`yourMultiTVname1,yourMultiTVname2`
!]

Параметры

ПараметрОписаниеЗначение по умолчанию
tvNames (обязательно) разделенный запятыми список имен переменных, которые содержат данные multiTV -

Поделитесь ссылкой

Статистика

Яндекс цитирования
© 2011 - 2023 Школа MODX
Напишите нам в Telegram