Делаем редактор блоков на Migx

Migx внутри Migx - делаем редактор блоков MODX Revo

Сегодня еще более сложный урок о migx внутри migx — не однородное содержимое, будем делать редактор блоков на подобии недоработанного freed или content block.

Сделать его можно только основе шаблонизатора fenom, следовательно у вас должен быть установлен pdotools и включен fenom.

включаем fenom

Также установлен Migx и ace — для удобства редактирования кода.

Внимание! Это довольно сложная статья, если плохо знакомы с MIGX, обязательно читаем: MIGX — MODX Revo и за одно Migx в Migx, т.к. это логическое продолжение данных уроков.

Статья создана на основе видео: Неоднородное содержимое или конфигуратор лендингов

Видео не мое и у него нет продолжения! Рекомендую сначала посмотреть его, потом уже читать и делать то что описано ниже.

Если вы идете по моим урокам, то у вас должно быть создано минимум 3 блока (состоящих из 4х конфигурации).

Созданные конфигурации MIGX

Соберем их воедино, для этого создадим еще одну конфигурацию с именем «config»», в поле «Замена «Добавить элемент»» пишем «Добавить блоки», в поле «Window Title пишем: «Page Builder v.1» — это заголовок и переходим на вкладку Formtabs.

Создаем общую конфигурацию MIGX

Во вкладке Formtabs и в поле Multiple Formtabs добавляем все наши основные конфигурации, а в поле Multiple Formtabs Label пишем: Выберите блок и переходим в следующую вкладку.

вкладка fromtabs

Добавляйте только основные конфигурации: testimonials_config не добавил т.к. к нему обращается поле из конфигурации testimonials. Конфигурацию hero не стал добавлять, т.к. она используется только на главной и находится вне секции «main», а все остальные блоки в «main».

На вкладке Colums. Добавляем элемент: Header — Название блока и field — MIGX_formname. И сохраняем все нажимая на кнопки «Сохранить и закрыть».

Делаем разметку колонок и сохраняем

В итоге у вас должно получиться следующее.

MIGX элементы

Создание TV с конфигурацией MIGX

Создаем категорию page builder.

создание категории

Создаем пустое TV поле под названием config, Подпись: Конфигурация, Категория: page builder.

Создание пустого TV с конфигурацией

На вкладке Параметры ввода, выбираем Migx и в поле конфигурации пишем config, далее выбираем шаблон и сохраняем.

Создание пустого TV с конфигурациейЕсли сейчас зайти на страницу с шаблоном куда назначено 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 (платный) и после этого установим и настроим визуальный редактор (на него тоже можно сажать простенькие блоки).

Поделиться с друзьями
Алексей

Веб-дизайнер и SEO оптимизатор. Занимаюсь созданием сайтов с 2010 года и их продвижение с 2012 года!

Оцените автора
( 2 оценки, среднее 5 из 5 )
Web-Revenue.ru
Добавить комментарий

  1. Аноним

    Привет, а второе видео (продолжение) вышло? про настройку колонок? заранее спасибо.

    Ответить
    1. Голягин Алексей

      Привет. Нет и не выйдет) Вроде все есть в статье в письменном виде)

      Ответить