Зачем нам MIGX на сайте?
Если вам необходимо в каком-либо блоке на сайте вывести несколько элементов одного типа, не обязаетльно одинаковых по стилю, но очень схожих по своему назначению, то в большинстве случаев, для этих целей как нельзя лучше подходит бесплатный компонент MIGX, особенно, если вы заранее не знаете, сколько таких блоков-элементов будет на странице.
![Например, эти 4 блока. Вы не знаете заранее, будет ли их ровно 4. Возможно в будущем, вы захотите добавить еще 2.](assets/files/images/res_73/2020_02_21_14_20_51.jpg)
Помимо прочего данный компонент также позволяет добавлять и редактировать значения, хранимые в кастомных таблицах БД, но это выходит за рамки экспресс-руководства.
Первое, что пришло бы в голову: организовать такие элементы как набор заранее подготовленных TV (например, вы можете сделать заранее 20 TV для заголовков и 20 TV для описаний, но это крайне неоптимально и неудобно). Как раз, чтобы не заниматься такими глупостями, но при этом не тратить большое количество времени на создание дополнительных таблиц в БД и настройке админки, чтобы эти поля редактировать, был придуман MIGX с возможностью добавлять такого рода дополнительные поля:
![Вы можете добавлять новые элементы в список, заранее не зная, сколько в итоге будет элементов](assets/files/images/res_73/2020_02_21_14_20_22.jpg)
Подготавливаем конфигурацию
После установки MIGX в админке появится новый одноименный пункт меню. Именно туда нам и нужно. На вкладке "MIGX" добавляем новую конфигурацию, нажав на "Добавить элемент".
![](assets/files/images/res_73/2020_02_21_14_41_01.jpg)
Самое главное дальше, не испугаться такого количество вкладок и полей. Мы будем заполнять только необходимые и их не так много. Вкладки и поля, которые нам не пригодятся для примера выше, мы будем пропускать. Таким образом, у вас появится первый навык применения MIGX для простых списковых TV-полей. В дальнейшем вы сможете изучить MIGX более подробно для применения его в более сложных случаях.
Даем имя нашей конфигурации. Ее можно назвать произвольным образом. Главное, дайте ей осмысленное название, которое отражает ее назначение.
![Наша конфигурация нужна для хранения элементов информационной секции. Отсюда и такое название.](assets/files/images/res_73/2020_02_21_14_42_59.jpg)
Добавляем поля всплывающего окна редактирования
На вкладке "Formtabs" мы можем настроить содержимое формы, которая будет открываться при добавлении нового элемента или редактировании существующего. Сначала мы добавляем вкладки формы (tabs), а затем на каждую вкладку добавляем поля.
Сначала добавляем новую вкладку:
![](assets/files/images/res_73/2020_02_21_14_44_04.jpg)
Затем внутри новой вкладки добавляем поля один за одним, нажимая "добавить элемент":
![Можно также указать поле Caption — это название вкладки. Можно его оставить пустым.](assets/files/images/res_73/2020_02_21_14_45_23.jpg)
В нашем случае нам требуется всего 2 поля:
- Для заголовка (поле типа text)
- Для описания (поле типа textarea–текстовая область или richtext–текстовый редактор)
Поле заголовка:
![](assets/files/images/res_73/2020_02_21_14_46_08.jpg)
Если вы хотите добавить в окно редактирования значения поле, тип которого совпадает уже с каким-то ранее подготовленным дополнительным полем (TV), то вы можете использовать имя этого TV в поле Input TV. Например, у вас уже есть TV для ввода даты и времени под названием myDateTime, для этого вам достаточно будет в поле Input TV ввести "myDateTime" и нажать "Выполнено", оставив остальные поля пустыми.
В поле Input TV type вводится тип поля. Список типов можно посмотреть на странице документации modx.
![](assets/files/images/res_73/2020_02_21_14_47_06.jpg)
После того, как мы выполнили добавление поля title, повторяем такую же процедуру для поля description, указав его тип как textarea или richtext
![](assets/files/images/res_73/2020_02_21_14_52_06.jpg)
После этого считаем, что добавление полей для всплывающего окна добавления и редактирования записей мы завершили.
Теперь нужно определить, какие поля будут отображаться в таблице списка.
Добавляем колонки таблицы
В разделе "columns" настраиваются колонки таблицы, которые будут отображаться на месте TV в админке. Сюда добавляются, как правило, колонки, соответствующие полям из вкладки "Formtabs" и дополнительные колонки для прочих целей (например для вывода кнопок редактирования записи или отображающие какие-то сводные данные).
Нам необходимо добавить колонку для вывода поля title.
![](assets/files/images/res_73/2020_02_21_15_16_15.jpg)
![](assets/files/images/res_73/2020_02_21_15_16_41.jpg)
Если мы хотим иметь возможность редактировать значение прямо из таблицы, кликнув дважды на само значение, можно на вкладке Cell Editor указать тип редактора значений:
![](assets/files/images/res_73/2020_02_21_15_17_44.jpg)
Аналогичную процедуру повторяем для поля description, указав в поле Field значение description. Затем, мы можем добавить для удобства еще одну колонку, в которой выведем три кнопки: Редактировать, Дублировать, Удалить.
Для этого добавляем еще одну колонку, задав ей заголовок "Действия", поле Field оставляем пустым, так как она не содержит никаких данных. А во вкладке "Renderer" нам необходимо выбрать функцию this.renderRowActions.
![](assets/files/images/res_73/2020_02_21_15_18_33.jpg)
А для того, чтобы выбрать, какие именно действия необходимо отобразить в этой колонке, на вкладке Columnbuttons указываем те действия, которые хотим отобразить:
![](assets/files/images/res_73/2020_02_21_15_27_41.jpg)
На этом можем считать, что наша первая конфигурация MIGX готова. Мы опустили рассмотрение многих полей, так как в данном кейсе они не используются, иначе бы данный мануал нельзя было назвать экспресс-руководством.
Сохраняем нашу конфигурацию и приступаем теперь непосредственно к созданию TV-поля.
Подробнее про MIGX
Кстати, почти такой же пример с подробным разъяснением способов его реализации я разбираю в курсе по созданию лендинга на MODx Revolution.
![](assets/files/images/res_73/modx_marafon_landing_cover.jpg)
Добавление TV-поля
Здесь все максимально просто: вы создаете новое дополнительное поле точно так же, как делали это раньше, указав тип поля: migx, а в поле "Конфигурации" указав название нашей конфигурации, созданное на предыдущем этапе.
![](assets/files/images/res_73/2020_02_21_15_33_04.jpg)
При этом стоит понимать, что название данного TV-поля и название конфигурации никак между собой технически не связаны. Поэтому они могут как одинаковыми, так и разными. Обычно, я создаю одну конфигурацию на одно TV-поле и названия даю им одинаковые, но вы вольны применять и другую концепцию.
Прицепив данное поле к соответствующему шаблону и сохранив его, вы увидите его теперь на вкладке дополнительных полей ресурса:
![](assets/files/images/res_73/2020_02_21_14_20_22.jpg)
Отображение в шаблоне
Я применяю в своем коде синтаксис Fenom, в связи с этим представленный ниже код будет написан именно на нем.
При выводе значений из MIGX TV-полей стоит помнить, что данные таких полей хранятся в виде JSON-строки. Нам необходимо преобразовать эту строку в массив и затем в цикле вывести на странице, используя необходимые обрамления в виде html-тегов.
В моем случае, где требуется, чтобы первый элемент был выведен в увеличенном виде, а все последующие в виде одинаковых колонок, такой код мог бы выглядеть так:
MIGX представляет возможность вручную вставлять конфигурацию TV и каждого поля на форме редактирования в JSON-формате, но это всего лишь возможность, а не обязательное условие его использования
{var $elements = $_modx->resource.infoSectionElements | json_decode}
{if $elements}
{foreach $elements as $index => $element}
{if $index > 0}
{break}
{/if}
<section class="text-center" id="about">
<div class="container">
<div class="row">
<div class="col-md-10 col-lg-8">
<h2>{$element.title}</h2>
<p class="lead">
{$element.description}
</p>
</div>
</div>
</div>
</section>
{/foreach}
<section>
<div class="container">
<div class="row">
{foreach $elements as $index => $element}
{if $index == 0}
{continue}
{/if}
{if $index % 3 == 1 && $index > 3}
</div>
<div class="row">
{/if}
<div class="col-md-4">
<div class="feature">
<h4>{$element.title}</h4>
<p>
{$element.description}
</p>
</div>
</div>
{/foreach}
</div>
</div>
</section>
{/if}
Все не так сложно
По итогу, для того, чтобы создать MIGX-поле, потребовалось совсем не много времени. Минимально необходимый набор действий заключается в:
- Настройке полей на форме, требуеющей на каждое поле несколько кликов и заполнение трех-четырех настроек
- Настройке колонок таблицы, требующей на каждое поле также несколько кликов и заполнения двух настроек
- Создании TV поля с указанием названия MIGX-конфигурации
Да, MIGX представляет возможность вручную вставлять конфигурацию TV и каждого поля на форме редактирования, но это всего лишь возможность, а не обязательное условие его использования. Так что, даже не разбираясь во всех тонкостях и возможностях MIGx вы можете успешно применять его на своих проектах.
Спасибо за внимание!
Вы должны авторизоваться, чтобы оставлять комментарии.