Вставки — что за зверь?

«Что это за новый модуль Вставки?» — обсуждается у нас на форуме. Мы создали инструмент, который выводит HTML-код, в том числе шаблонные теги на сайте, используя в качестве якоря выведенные на сайте шаблонные теги.

Демонстрирую. В правой колонке на главной странице сайта выводится блок новостей. Нам нужно вывести перед ним информационный блок. Теперь это просто!

Добавляем вставку. Название видит только администратор. Мы знаем как выводится блок новостей. Указываем в качестве метки шаблонный тег <insert name="show_block" module="news">. Вставку нам нужно разместить перед меткой.

И пишем любой HTML:

<div class="block">
   <div class="block_header">Бонусная карта</div>
   <img src="/edu/img/bonus_card.jpg" width="100%">
</div>

Быстро? Просто?

Давайте выведем еще одну вставку на этот же тег. Теперь это будет шаблонный тег купон на скидку.

<div class="block">
   <insert name="show_add_coupon" module="shop">
</div>

Вот и вывелось. Понятно, что сортировка вставок в админке выведена не просто так. А для того, чтобы поменять блоки местами.

Мы можем еще поработать с полем «Размещение». Здесь есть перед меткой, после и вместо. Если мы укажем размещение «вместо метки» и ничего не укажем в содержании, что будет? Правильно — блок будет скрыт.

Давайте скроем поиск на сайте.

Сработало!

А вот применение модуля, больше связанное с действительностью. На главной странице у нас выводятся баннеры. Это почти во всех шаблонах. Допустим, на Новый год нам нужно временно разместить здесь праздничный баннер.

Выведем праздничный баннер также через модуль «Баннеры». Создадим категорию «Новогодний слайдер» (ID — 4). Теперь в неё добавим баннер.

Теперь указываем, что мы заменяем блок баннеров. Конкретизируем вставку атрибутом cat_id, чтобы все баннеры не заменить. И выводим наш баннер.

Якорь:

<insert name="show_block" module="bs" cat_id="1">

Вставка:

<insert name="show_block" module="bs" cat_id="4" template="slider">

Красота!

И главное! Давайте сделаем эту вставку прямо сейчас. А период показа укажем 15 декабря по 10 января. Удобно? Удобно!

А теперь самое интересное. Зачем все это нужно? Сейчас мы создали этот модуль как инструмент для дополнений. Если дополнение выводит готовый сверстанный блок, то после установки администратор его должен сразу увидеть на сайте.

В файле установки модуля дополнения указываем какую вставку нужно сделать. Для этого теперь есть свойство $inserts. Это массив всех вставок. Каждая вставка в виде массива. Мы можем указать страницы, к котором прикреплена вставка — массив идентификаторов страниц. Так как в инстолле модуля мы не знаем наверняка идентификаторы страниц, то здесь скорее всего вы будете указывать только 1 — главная страница.

// modules/mymodule/mymodule.install.php – файл установки модуля дополнения
class Mymodule_install extends Install
{
    public $inserts = array(
        array(
            // название вставки видно только администратору
            "name" => "Блок моего модуля",

            // шаблонный тег – якорь
            "tag" => '<insert name="show_block" module="bs" cat_id="1">',

            // размещение – после якоря
            "prefix" => 'after',

            // добавляемый визуальный блок – содержит шаблонный тег устанавливаемого модуля
            "text" => '<insert name="show_block" module="mymodule">',

            // выводить только на главной странице (ID 1)
            "site_rel" => array(1),
        )
    );
    //...

Если вставка нужна только в режиме «Заполнить сайт примерами», то переносим этот массив в свойство $demo под ключ 'inserts'.

class Mymodule_install extends Install
{
    //часть устанавливающаяся только, если отмечена опция «Заполнить сайт примерами»
    public $demo = array(
        "inserts" => array(
            array(
                "name" => "Блок моего модуля",
                "tag" => '<insert name="show_block" module="bs" cat_id="1">',
                "prefix" => 'after',
                "text" => '<insert name="show_block" module="mymodule">',
                "site_rel" => array(1),
            )
        ),
        //...
    );

Но как же мы можем знать наверняка какие шаблонные теги используются? Не всегда, но можем. Скорее всего пользователь, установивший готовый баннер из дополнений использует готовый шаблон. Тогда можно смело привязываться к шаблонному тегу баннера. В большинстве случаев это сработает. В меньшинстве вы дадите дополнительную инструкцию для вставки в описание установки.

Ну а если вам нужен pop-up, код которого выводится в конце страницы, то можно смело привязываться к шаблонному тегу <insert name="show_js">.

Если ваш модуль заменяет наш поиск, привязывайтесь к тегу <insert name="show_search" module="search">.

Ну вы поняли?

В общем, пробуйте. Надеюсь, вам понравится.

Комментарии
22 августа 2019 г.
Отлично, сделайте только тогда рядом с полем Быстрого редактирования кнопку Показать вставленные блоки и тогда все <insert> сделаются просто тегами, не выводя контент
22 августа 2019 г.
Александр, в правильном направлении мыслите. Вставки - задел под конструктор блоков. Мы не просто выведем информацию о вставках, мы дадим их добавлять, переносить и пр. Полноценный визуальный конструктор у нас в среднесрочном плане.
28 августа 2019 г.
Хорошо бы сделать разделение вставок на группы
28 августа 2019 г.
Мысль Надо посмотреть как на сайтах это будет выглядеть. Мне кажется, не на группы нужно будет делить, а по тегам-якорям группировать.
15 сентября 2019 г.
Марина, вы пишите про планы на визуальный конструктор. А в итоге это не будет похоже на Shop-Script? Мы 4 года назад ушли оттуда на диафан и на тот момент там была реализована идея визуального размещения блоков на сайте с привязкой к каждому блоку своего функционала.
15 сентября 2019 г.
Александр, у меня тоже негативные эмоции, когда я вспоминаю работу с позициями модулей в Joomla. Мы прекрасно понимаем чем чревато завязывание размещения на блоках. Но мы делаем конструктор не вместо, мы делаем его как дополнительный инструмент.

Более того мы это уже сделали. "Блоки на сайте" и "Вставки" уже есть. Разве они мешают Вам разрабатывать сайты? Хотите не использовать их, не используйте. Считайте никакого конструктора нет. Хотите дать своим клиентам выключать какие-то блоки, устанавливать их по времени, сортировать. Пожалуйста, покажите им "Блоки на сайте", покажите им "Вставки".

Что будет сделано? Удобное управление с фронтенда. При включении определенного режима в панели администрирования Вы увидите какие шаблонные теги использованы, где (в каком файле) они выведены, появиться возможность что-то добавить до них, после, вместо или скрыть. Это ведь и программистам будет удобно. Сейчас нам приходится предполагать в каком файле мы шаблонный тег задавали. А клиент (представляете!) сможет вывести блок товаров вот так в два клика где ему нужно.

Проблема ведь в чем с блоками - если под них нужно верстку подбивать, они усложняют интеграцию. Вторая - если не понятно где что выведено, где что править. Первой проблемы у нас нет. Шаблонные теги уже давно используются и всем удобны. Второй проблемы у нас не будет, если мы сделаем удобный редактор. Более того минимизируем эту проблему вообще.

Подчеркну, что эта задачу у нас в среднесрочном плане. Не стоит конструктор ждать в ближайшее время.
15 сентября 2019 г.
Цитата
Что будет сделано? Удобное управление с фронтенда. При включении определенного режима в панели администрирования Вы увидите какие шаблонные теги использованы, где (в каком файле) они выведены, появиться возможность что-то добавить до них, после, вместо или скрыть. Это ведь и программистам будет удобно. Сейчас нам приходится предполагать в каком файле мы шаблонный тег задавали. А клиент (представляете!) сможет вывести блок товаров вот так в два клика где ему нужно.

Очень удобно.
Цитата
Проблема ведь в чем с блоками - если под них нужно верстку подбивать, они усложняют интеграцию. Вторая - если не понятно где что выведено, где что править. Первой проблемы у нас нет. Шаблонные теги уже давно используются и всем удобны. Второй проблемы у нас не будет, если мы сделаем удобный редактор. Более того минимизируем эту проблему вообще.

Про отсутствие проблем с версткой не совсем понятно, скорее даже совсем непонятно, ну да разберемся..
Большое спасибо за развернутый ответ.

Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.