Сегодня еще более сложный урок о migx внутри migx — не однородное содержимое, будем делать редактор блоков на подобии недоработанного freed или content block.
Сделать его можно только основе шаблонизатора fenom, следовательно у вас должен быть установлен pdotools и включен fenom.
Также установлен Migx и ace — для удобства редактирования кода.
Внимание! Это довольно сложная статья, если плохо знакомы с MIGX, обязательно читаем: MIGX — MODX Revo и за одно Migx в Migx, т.к. это логическое продолжение данных уроков.
Видео не мое и у него нет продолжения! Рекомендую сначала посмотреть его, потом уже читать и делать то что описано ниже.
Если вы идете по моим урокам, то у вас должно быть создано минимум 3 блока (состоящих из 4х конфигурации).
Соберем их воедино, для этого создадим еще одну конфигурацию с именем «config»», в поле «Замена «Добавить элемент»» пишем «Добавить блоки», в поле «Window Title пишем: «Page Builder v.1» — это заголовок и переходим на вкладку Formtabs.
Во вкладке Formtabs и в поле Multiple Formtabs добавляем все наши основные конфигурации, а в поле Multiple Formtabs Label пишем: Выберите блок и переходим в следующую вкладку.
Добавляйте только основные конфигурации: testimonials_config не добавил т.к. к нему обращается поле из конфигурации testimonials. Конфигурацию hero не стал добавлять, т.к. она используется только на главной и находится вне секции «main», а все остальные блоки в «main».
На вкладке Colums. Добавляем элемент: Header — Название блока и field — MIGX_formname. И сохраняем все нажимая на кнопки «Сохранить и закрыть».
В итоге у вас должно получиться следующее.
Создание TV с конфигурацией MIGX
Создаем категорию page builder.
Создаем пустое TV поле под названием config, Подпись: Конфигурация, Категория: page builder.
На вкладке Параметры ввода, выбираем Migx и в поле конфигурации пишем config, далее выбираем шаблон и сохраняем.
Если сейчас зайти на страницу с шаблоном куда назначено TV config, то увидим — появилась возможность выбора нужных блоков.
Заполним их данными и сохраним ресурс.
На этом работа с MIGX окончена, остается это все вывести.
Вывод данных MIGX на сайте
Теперь нам нужно создать чанки с оформлением (ну или переписать имеющиеся (для тех кто делал все на стандартном синтаксисе)). Для того чтобы упростить задачу сделаем в шаблоне следующий вызов:
{var $data = $_modx->resource['config'] | fromJSON}
{$data | print}
Перейдем на страницу (где заполняли данные), должен вывестись массив.
Здесь MIGX_forname => название чанка, который нужно создать (ну или созданный переименовать). Остальное это название полей. У сложных полей (MIGX в MIGX) внутри еще массивы значений (в данном случае у slides).
Скопируйте данный массив и сохраните в текстовый документ — он пригодится.
У вас будет немного другой массив значений, ну вернее названия полей конфигураций MIGX (я свои немного переименовал: вместо h1 или h2 написал title, вместо Подзаголовков h2 или h3 написал subtitle и т.д.).
Создание чанков с оформлением блоков
Создадим новые чанки (или у кого созданы со стандартным шаблонизатором отредактируем их) — их имена должны быть такими же как у MIGX элементов.
1й чанк: about:
<!-- ======= About Section ======= -->
<section id="about" class="about">
<div class="container" data-aos="fade-up">
<div class="row gx-0">
<div class="col-lg-6 d-flex flex-column justify-content-center" data-aos="fade-up" data-aos-delay="200">
<div class="content">
<h3>{$data['subtitle']}</h3>
<h2>{$data['title']}</h2>
<p>{$data['text']}</p>
<div class="text-center text-lg-start">
<a href="{$data['link']}" class="btn-read-more d-inline-flex align-items-center justify-content-center align-self-center">
<span>{$data['name_buttons']}</span>
<i class="bi bi-arrow-right"></i>
</a>
</div>
</div>
</div>
<div class="col-lg-6 d-flex align-items-center" data-aos="zoom-out" data-aos-delay="200">
<img src="{$data['image']}" class="img-fluid" alt="{$data['title']}">
</div>
</div>
</div>
</section><!-- End About Section -->
Это легкий блок без доп. конфигураций, тут поля выводятся так {$data['name_poly']}
.
2-й чанк testimonials:
<!-- ======= Testimonials Section ======= -->
<section id="testimonials" class="testimonials">
<div class="container" data-aos="fade-up">
<header class="section-header">
<h2>{$data['title']}</h2>
<p>{$data['subtitle']}</p>
</header>
{var $items = $data['slides'] | fromJSON}
<div class="testimonials-slider swiper" data-aos="fade-up" data-aos-delay="200">
<div class="swiper-wrapper">
{foreach $items as $idx => $item}
<div class="swiper-slide">
<div class="testimonial-item">
<div class="stars">
<i class="bi bi-star-fill"></i><i class="bi bi-star-fill"></i><i class="bi bi-star-fill"></i><i class="bi bi-star-fill"></i><i class="bi bi-star-fill"></i>
</div>
<p>{$item['text_reviews']}</p>
<div class="profile mt-auto">
<img src="/assets/img/{$item['foto']}" class="testimonial-img" alt="{$item['name']}">
<h3>{$item['name']}</h3>
<h4>{$item['professiya']}</h4>
</div>
</div>
</div><!-- End testimonial item -->
{/foreach}
</div>
<div class="swiper-pagination"></div>
</div>
</div>
</section><!-- End Testimonials Section -->
Ну и еще в качестве примера оставлю еще конфигурации из старого (переписанного урока):
Название чанка: Слайдер (см Bootstrap слайдер на MIGX)
Код чанка:
{var $items = $data['bs_carusel'] | fromJSON}
<div id="carouselExampleCaptions" class="carousel slide" data-ride="carousel">
<div class="carousel-inner">
{foreach $items as $idx => $item}
<div class="carousel-item{if $idx == 0} active{/if}">
<img src="img/{$item['slide']}" class="d-block w-100" alt="{$item['zagolovok']}">
<div class="carousel-caption d-none d-md-block">
<h5>{$item['zagolovok']}</h5>
<p>{$item['opisanie']}</p>
</div>
</div>
{/foreach}
</div>
<a class="carousel-control-prev" href="#carouselExampleCaptions" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Предыдущий</span>
</a>
<a class="carousel-control-next" href="#carouselExampleCaptions" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Следующий</span>
</a>
</div>
Важно! Migx не подтягивает путь источников файлов, и если у вас стоит неродной источник (Filesystem), то вам как и мне нужно вручную дописывать путь до него: img/{$item[‘slide’]}, здесь img/ — путь до источника файлов.
Проверка на пустоту
Вы можете делать вот такие условия: {if $data['subtitle']} {$data['subtitle']} {/if}
, где subtitle
это название поля. Здесь условие if проверяет на заполненность subtitle
, т.е. если подзаголовка нет, ничего не выведется.
Вывод Содержимого во фронтенд
Теперь меняем наш код (который выводил массив), на:
{var $data = $_modx->resource['config'] | fromJSON}
{foreach $data as $item}
{$item['MIGX_formname'] | chunk : [
'data' => $item
]}
{/foreach}
После этого должно все заработать.
Если не получилось, смотрите видео еще раз (под спойлером в начале статьи), перечитайте две предыдущие статьи про MIGX. В следующем уроке разберем более юзабильную альтернативу MIGX, компонент PageBlock (платный) и после этого установим и настроим визуальный редактор (на него тоже можно сажать простенькие блоки).
Привет, а второе видео (продолжение) вышло? про настройку колонок? заранее спасибо.
Привет. Нет и не выйдет) Вроде все есть в статье в письменном виде)