Что такое чанк modx
Перейти к содержимому

Что такое чанк modx

  • автор:

Что такое чанк

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

Как правило в шаблонах используется несколько чанков, которые содержат совпадающее оформление. Например можно вынести шапку, подвал, основное меню, крошки. Благодаря этому изменения можно будет вносить в одном чанке, а не нескольких шаблонах. Это и проще и нет риска оставить какой-то шаблон без важного изменения.

Второе наиболее частое использование чанка — шаблоны для сниппетов. Благодаря этому происходит разделение управляющего кода и оформления. В зависимости от сложности сниппета количество шаблонов может отличаться. Например для создания формы обратной связи может потребоваться 3 основных шаблона — форма, текст об успешном приеме формы, текст письма администратору с полученной информацией. Для того, чтобы чанк был не просто куском HTML-кода, а работал как шаблон, необходимо отметить в нем соответствующие места, куда сниппет запишет свою информацию. Роль таких мест выполняют плейсхолдеры.

Пример содержимого чанка с плейсхолдерами:

Кроме указанных двух вариантов, чанк можно использовать для хранения какой-то специальной информации. Например можно хранить некий набор параметров для сниппета (допустим список файлов), который может формироваться вручную или другими средствами MODx.

Создание и редактирование чанка

Все чанки находятся в следующем месте:

Ресурсы → Управление ресурсами → Чанки Список чанков выглядит примерно так:

Список чанков в MODX EVO

Для создания необходимо нажать на ссылку Новый чанк, а для редактирования существующего чанка достаточно нажать на ссылку с его названием. Появится следующая форма:

Новый чанк в MODX EVo

Название чанка — используется для вызова чанка. Можно использовать как английский так и русский язык, а также дефис (-) и знак подчеркивания (_). Пробел использовать нельзя!

Описание — выводится рядом с названием чанка в общем списке. Используется только для описания назначения чанка и для заполнения не обязательно.

Создать категорию — позволяет выбрать существующую категорию, в которую будет помещен чанк. Категория позволяет отделить чанк от остальных в общем списке. Если ни одна категория не выбрана, то чанк попадет в общую категория Без категории.

Новая категория — если в списке существующих категорий нет подходящей, то можно создать ее просто написав название в этом поле.

Ограничить доступ к редактированию чанка — если включить флажок, то никто кроме администраторов не сможет редактировать этот чанк.

Код чанка (html) — сюда размещается само содержимое чанка.

Редактор — позволяет выбрать визуальный редактор. По умолчанию он отключен, но при необходимости можно включить. Есть также редакторы, которые позволяют подсветить синтаксис.

Обратим внимание на возможности при сохранении. Для этого есть следующие управляющие кнопки:

Управление чанком в MODX EVO

С основными кнопками все понятно:

Сохранить — создаст новый чанк

Отмена — вернет нас в список чанков без сохранения результата.

Сделать копию — появляется только в режиме редактирования. Смотрите пункт Создание копии чанка.

Удалить — появляется только в режиме редактирования. Смотрите пункт Удаление чанка.

Но MODx позволяет определить еще действие после сохранения чанка:

Создать новый — сразу после сохранения чанка откроется форма для создания нового. Таким образом можно быстро создать серию чанков.

Продолжить редактирование — после сохранения чанк снова откроется для редактирования. В этом режиме удобно вносить небольшие правки в чанк и проверять конечный результат.

Закрыть — после сохранения мы вернемся в общий список чанков.

Создание копии чанка

Иногда бывает необходимо создать копию существующего чанка. Сделать это очень просто. Для этого необходимо зайти в редактирование нужного чанка и нажать на кнопку Сделать копию.

Управление чанком в MODX EVO

На всякий случай система попросит от вас подтверждение:

Копия чанка в MODX EVO

После этого откроется для редактирования копия чанка. Копия отличается тем, что к ее названию добавляется Duplicate of. Вам остается только исправить название на более подходящее и внести другие необходимые правки.

Копия создается сразу после подтверждения, поэтому если вы нажмете отмену, то в списке чанков копия все равно останется.

Для удаления необходимо зайти в режим редактирования соответствующего чанка и нажать кнопку Удалить.

Управление чанком в MODX EVO

После этого система попросит от вас подтверждение:

Внимание! Чанки удаляются полностью и возможности их восстановить нет.

В шаблоне и другом чанке

Существующий чанк в шаблоне (или другом чанке) вызывается очень просто. Для этого используется конструкция в виде названия чанка окруженного фигурными скобками:

> При этом стоит помнить, что название чувствительно к регистру (НазваниеЧанка и названиеЧанка — разные чанки с точки зрения MODx).

MODX — Чанки

Чанк — это элемент MODX, который представляет собой кусок текста или HTML-кода. Предназначен он для формирования некоторого фрагмента (куска, части) HTML-страницы. Например, чанк можно использовать для вывода раздела head HTML-документа, меню, блоков информации в основной и дополнительной области сайта, футера и многих других частей страницы.

Например, чанк (его содержимое), который используется для вывода меню сайта:

[[pdoMenu? &parents=`0` &level=`1` ]]

Кроме этого чанки в MODX Revolution также используются в качестве шаблонов для вывода результатов работы сниппета.

Например, чанк (tpl.Tickets.list.row), который используется в качестве шаблона сниппета getTickets :

[[!getTickets? &tpl=`tpl.Tickets.list.row`]]

Внутри чанках, как и во многих других элементах MODX Revolution (шаблонах, TV-параметрах, полях ресурса), нельзя непосредственно размещать php-код. Размещение в этих элементах динамического содержимого осуществляется посредством вызовов сниппетов, которые исполняют хранящийся внутри них PHP-код.

Совет: не храните повторяющийся код (раздел head , шапку сайта, меню, подвал, контактную информацию и др. блоки страницы) в шаблонах. Более предпочтительно всё это оформить в виде чанков, а затем использовать их в необходимых шаблонах. Это позволит сократить значительное количество времени, если потребуется внести изменения в некоторый блок. Вместо редактирования большого количества шаблонов, в данном случае потребуется всего внести изменения только в один чанк.

Где хранятся чанки

Чанки, как и остальные объекты MODX, хранятся в базе данных. Чанки содержатся в таблице modx_site_htmlsnippets (modx — это префикс таблиц, заданный во время установки системы).

MODX - Таблица базы данных, в которой хранятся чанки

Работа с чанками в админке MODX

Чанки в админке MODX Revolution расположены на левой панели во вкладке «Элементы».

MODX - Чанки в админке

Создание чанка

Создание чанка осуществляется с помощью кнопки «+». После нажатию на эту кнопку открывается страница, содержащая форму. Среди полей этой формы, основными являются имя и код чанка (html). Имя — это название, посредством которого этот чанк можно будет вызывать в шаблоне, содержимом ресурса или в другом месте. Код чанка (html) — это контент, который парсер будет выводить на месте вызова чанка.

MODX - Создание чанка

Кроме этого система MODX позволяет хранить содержимое чанка во внешнем файле. Для этого необходимо установить галочку в поле статичный, выбрать источник файлов и указать его расположение.

MODX - Создание статичного чанка

Редактирование чанка

Для редактирования некоторого чанка в админке необходимо нажать на него левой кнопкой мыши. После этого откроется форма полями чанки, в которую необходимо внести изменения и нажать на кнопку «Сохранить».

Как использовать чанки в MODX

Вставка чанка в шаблон или содержимое ресурса осуществляется с помощью следующего тега MODX:

[[$chunkName]]

Во время обработки страницы, парсер MODX заменит тег чанка его содержимым.

Чанк и его параметры

Чанки в MODX могут иметь параметры. Например, рассмотрим чанк «intro», имеющий следующее содержимое:

Привет, [[+name]]. У Вас [[+messageCount]] сообщений.

Он имеет 2 плейсхолдера: [[+name]] и [[+messageCount]]. Передать значения этим плейсхолдерам можно с помощью указания соответствующих параметров вызову чанка:

[[$intro? &name=`Роман` &messageCount=`7`]]

В результате, получим следующее содержимое:

Привет, Роман. У Вас 7 сообщений.

Если пойти немного дальше, то можно, например, создать TV-параметры name и messageCount , и добавить их (эти переменные) к соответствующему шаблону. После этого у каждого ресурса, имеющего этот шаблон, появятся эти TV-параметры. Значения этих TV-параметров можно использовать в качестве значений параметров чанка:

[[!$intro? &name=`[[*name]]` &messageCount=`[[*messageCount]]` ]]

или в содержимом чанка:

Привет, [[*name]]. У Вас [[*messageCount]] сообщений.

Условия в чанках

Условия и другие фильтры MODX можно использовать в любых специальных тегах этой системы.

Например, внутри чанка в зависимости от идентификатора родителя текущего ресурса вывести один или другой чанк.

[[*parent:is=`10`:then=` [[$chunk1]] `:else=` [[$chunk2]] `]]

Но с фильтрами в MODX надо быть очень осторожными, т.к. они могут сильно увеличить время генерации страницы. Это происходит потому, что условия в тегах MODX работают не так как обычные условия в php. Например, в вышеприведённом примере оба чанка вызовутся, не зависимого от того какой идентификатор имеет родитель текущего ресурса. А уже только потом будет определяться какой из этих чанков будет выведен на страницу. Поэтому в MODX они и называются фильтрами. А теперь давайте представим, что в этих чанках есть вызовы некэшируемых сниппетов. В результате в не зависимости от идентификатора родителя текущего ресурса эти вызовы будут выполняться как в первом, так и во втором чанке. Это может привести к значительному увеличению времени генерации страницы и нагрузке на сервер. В таких случаях лучше фильтры не использовать, а выполнять эти действия с помощью сниппета.

resource->parent==10) { $output = 'chunk1'; } return $modx->getChunk($output);

Обработка чанка с помощью API

Чанки часто выступают в качестве шаблонов для вывода результатов работы сниппета. Обрабатывается чанк в сниппете через функцию getChunk().

Например, рассмотрим, как использовать чанк «rowTpl» в сниппете.

Чанк «rowTpl», имеет следующее содержимое:

 [[+pagetitle]] [[+introtext]]  

Содержимое (php-код) сниппета, который получает все опубликованные ресурсы на сайте и выводит их в таблицу. Для вывода данных отдельного ресурса (одной строки таблицы, состоящей из 2 ячеек) используется шаблон rowTpl.

// получить массив (коллекцию) опубликованных ресурсов $resources = $modx‐>getCollection('modResource',array('published' => true)); // переменная-счётчик $i = 0; // переменная, хранящая результат $output = ''; // перебрать все ресурсы foreach ($resources as $resource) { // создать ассоциативный PHP массив из полей ресурса $properties = $resource‐>toArray(); // установить ключу rowCls ассоциативного массива $properties значение alt, если ресурс чётный $properties['rowCls'] = $i % 2 ? '' : 'alt'; // получить содержимое чанка rowTpl, передав в него массив полей ресурса в качестве параметров $output .= $modx‐>getChunk('rowTpl',$properties); // увеличить значение переменной на 1 $i++; } // вернуть в качестве результата таблицу опубликованных ресурсов return ''.$output.'
';

Управление чанком через API

Управлять чанками в MODX можно через API:

newObject('modChunk'); // 1.2. Установить этому новому чанку имя NewChunkName $chunk‐>set('name','NewChunkName'); // 1.3. Установить этому чанку контент $chunk‐>setContent('

Это мой новый чанк!

'); // 1.4. Сохранить этот чанк в базу данных $chunk‐>save(); /* 2. Получить существующий чанк, изменить содержимое этого чанка. Сохранить изменения в базу данных */ // 2.1. Получить чанк, имеющий имя NewChunkName $chunk = $modx‐>getObject('modChunk', array('name' => 'NewChunkName')); // 2.2. Если чанк с таким именем существует, то. if ($chunk) { // 2.3. Установить ему следующий контент $chunk‐>setContent('

Это мой чанк, но уже с новым контентом!

'); // 2.4. Сохранить изменения $chunk‐>save(); } /* 3. Получить существующий чанк и удалить его из базы данных */ // 3.1. Получить чанк, имеющий имя NewChunkName $chunk = $modx‐>getObject('modChunk', array('name' => 'NewChunkName')); // 3.2. Если чанк с таким именем существует, то удалить его. if ($chunk) $chunk‐>remove();

MODX чанки

MODX чанки — это элемент в CMS MODX Revolution предназначенный для упрощения и ускорения работы веб-разработчиков. Наша статья предназначена для новичков и показывает простые способы использования данного инструмента.

Оставить заявку Оставить заявку —>

  • Работа на результат
  • Выгодные цены
  • Сжатые сроки
  • Долгосрочный эффект
  1. Что такое чанк
  2. Для чего нужен чанк
  3. Как создать свой чанк
  4. Как вывести чанк на странице
  5. Где чанк хранится в базе данных
  6. Прочие фишки
  7. Итог

Что такое чанк в MODX

Чанк от англ. chunk — это элемент CMS MODX revolution с помощью которого можно выводить кусок HTML кода в любой части сайта. Благодаря этому инструменту Вы можете солидно сэкономить время при внесении простых правок в отдельные элементы на сайте и даже при создании кучи поддоменов основного сайта.

Читайте свежий материал

Для чего нужен чанк

Это самый главный абзац всей статьи который сильно может облегчить жизнь начинающим и осваиющим MODX разработчикам.

Давайте смоделируем ситуацию. Вы делаете сайт, как положено, на чистом HTML, CSS и JS, стараетесь его оптимизировать, уникальные теги и все остальное. Как правило за MODX берутся из-за этого. Но вот проблема, допустим у Вас на сайте 25-30 страниц, не большой корпоративный сайт и вдруг добавился адрес электронной почты, изменились контакты, надо добавить одну новую иконку соцсети и тд. Ничего не остается кроме вручную лезть и редактировать все эти страницы. А это уйма времени потраченного впустую. А если у Вас проект на 450-500 страниц? Или интернет-магазин на 5000-7000 страниц? Даже страшно подумать.

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

Чанк призван сэкономить Ваше время. Вы можете разбить свой сайт на куски HTML кода на отдельные чанки и потом с помощью них выводить информацию на всем сайте. И если вдруг случиться так, что Вам надо что-то подредактировать, то Вам будет достаточно внести правку в одном месте и она применится ко всему сайту где прописан код чанка. То есть сквозным образом.

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

Как создать свой чанк

Создание чанка — производится двумя способами из админки MODX и из БД. Выбирайте какой Вам удобнее, но очевидно что если вы только осваиваете данный инструмент то проще будет из админки.

чанк MODX

Для создания чанка откройте вкладку «элементы» в админке MODX и нажмите плюс. После этого откроется новая страница где Вам потребуется ввести название нового чанка и сам html код или текст вашего будущего чанка.

Название чанка — может быть любое, но обязательно на латинице. Можно использовать цифры в названии. Как правило лучше всего называть чанк соответствующим образом.

Если Вы занесли footer в чанк то и называйте данный чанк footer, чтобы потом Вам проще было ориентироваться в них.

Допустим Вы хотите внести все меню в чанк тогда создаем чанк с названием «menu» и для его вызова на странице в нужном месте просто выводим его переменную
[ [$menu] ] .

Как вывести чанк на странице

Вывод чанка — производится очень легко. Для этого есть оператор двойная квадратная скобка и знак долалра, все без пробелов.

Таким образом Вы можете выводить в чанк все. Область мета-тегов, за исключением keywords если вы пишите ключи для каждой страницы. Остальные мета-теги будут автоматом выводится если Вы внесете их переменные в допустим чанк [ [$head] ] .

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

Также вы можете выводить чанк в чанке. Таким образом Вы можете вынести весь header в чанк, а потом уже «разрезать» его на более мелкие куску, отделив меню, слайдер и другие элементы.

Где чанк хранится в базе данных

Хранится чанк — в файлике modx_site_htmlsnippets. Его можно экспортировать и импортировать на другие сайты MODX. И это очень важно! Данная опция способна сэкономить кучу времени если у Вас сайт с поддоменами где как правило единственное изменение это региональная привязка сайтов. Как упростить разработку таких больших проектов при помощи чанков и их копирование через базу данных сейчас покажем.

Для экспорта чанков просто откройте пункт modx_site_htmlsnippets, затем нажмите экспорт и Ваш файл скачается.

Далее импортируйте данный файл в нужную базу данных предварительно удалив старый файл modx_site_htmlsnippets иначе у Вас произойдет ошибка загрузки

Итоги

Чанки в CMS MODX Revolution — это незаменимый инструмент для разработчика благодаря которому можно сэкономить много времени и сил.

Наш совет, создавайте резервные копии своих чанков на тот случай если Вы случайно что-то сломаете в рабочем. Это поможет откатить поломку и восстановить работу сайта.

MODX чанки (chunks)

Лучший хостинг для CMS

MODX чанки (chunks)

MODX Revo

Автор Алексей На чтение 5 мин Просмотров 9.4к. Опубликовано 06.08.2020 Обновлено 30.10.2023

В прошлых уроках мы разобрали различный синтаксис модх парсера и fenom, а также перенесли HTML шаблон в MODX Revo (там можно скачать шаблон на основе которого пойдут дальнейшие уроки). Сейчас код шаблона статичный и чтобы что то поправить нужно править код — начнем это исправлять. В данном уроке разобьем код на отдельные части — MODX чанки, чтобы в будущем с кодом шаблона было проще работать.

Что такое

MODX чанки – это контейнеры для HTML/CSS/JS-кода (нельзя добавлять php-скрипты, вернее можно но они будут игнорироватся, для этого есть сниппеты). В чанке можно вызывать другие чанки, tv и сниппеты (можно вкладывать другие элементы).

Где хранятся

Чанки, хранятся в БД, в таблице modx_site_htmlsnippets (где modx_ — это префикс таблиц, который задан во время установки движка).

Как создать

Есть несколько способов создания чанков, рассмотрим каждый из них.

Переходим во вкладку «Элементы» и кликаем:

создание чанка в MODx Revolution

  1. На иконку «Новый чанк».
  2. На плюс напротив пункта «Чанки».
  3. ПКМ кликаем по пункту Чанки и выбираем «Создать» либо «Быстро создать».
  4. Воспользоваться пакетом TagElementPlugin .

Как вызывать

Выводятся чанки в шаблоне при помощи следующей конструкции:

  • [[$name_chunks]] – кэшируемый вызов (рекомендуется в большинстве случаев).
  • [[!$name_chunks]] , не кэшируемый вызов — выводится каждый раз из БД MODX парсером — что замедлит сайт.
  • , вызов чанка при помощи fenom. Также Fenom позволяет включать одни чанки в другие и даже расширять их. Пример вызова чанка с набором параметров: . Подробнее про читайте в оф. документации.

Чанк с параметрами

Допустим у нас есть чанк «info», со следующим содержимым:

Привет, [[+name]]. У Вас [[+mesCount]] сообщений.

Он имеет 2 плейсхолдера: [[+name]] и [[+mesCount]]. Передать значения данным плейсхолдерам можно при помощи указания соответствующих параметров вызову чанка:

[[$info? &name=`Алексей` &mesCount=`11`]]

В результате, получим следующее содержимое:

Привет, Алексей. У Вас 11 сообщений.

Условия в чанках

Условия и другие phx фильтры / модификаторы MODX можно использовать в любых специальных тегах. Например, нам нужно вывести чанк в чанке (один или другой) в зависимости от идентификатора родителя текущего ресурса.

[[*parent:is=`7`:then=` [[$chunk1]] `:else=` [[$chunk2]] `]]

Внимание! Будьте осторожными, условия могут сильно увеличить время генерации страницы.

Натягиваем шаблон — логика разбивки шаблона

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

Обычно весь внешний вид сайта строится на одном дизайне, т.е. шапка, меню, подвал сайта на всех страницах одинаковые (сквозные), меняется внутренне наполнение, самый идеальный вариант разбития на мой взгляд следующий.

Выносим весь код шаблона (у на пока только один шаблон базовый, смотрите урок Перенос HTML шаблона в MODX Revo) в отдельный чанк tpl и вызываем чанк tpl в самом шаблоне [[$tpl]] или .

Перенос кода шаблона в чанк

Если сейчас перейти на главную страницу — у нас не чего не поменялось — она также открывается с перенесенным html дизайном.

Что делать если вы вывели при помощи fenom и видите белую страницу с вызовом.

Причин этому может быть несколько:

  1. Вы не включили fenom (настройки должны быть такими).
    настройки pdotools
  2. Конфликт с фигурными скобками, что конфликтует можно увидеть в журнале ошибок:
    журнал ошибок

Ищем в коде ошибку (или фигурную скобку) и ставим перед ней и после нее пробелы.

Пример правки ошибки

Если проблема не решена идете в журнал, обновляете его, видите новые ошибки и правим, и так пока не заработает.

Обновление журнала

Далее открываем чанк tpl и вырезаем из него весь контент который меняется (обычно это все кроме шапки и подвала), после чего создаем чанк tpl.1 и вставляем в него вырезанный код, а на месте вырезанного кода вставляем вот такую конструкцию [[$tpl.[[*template]]]] или тоже самое на fenom: resource.template)> .

Вставляем конструкцию подтягивающую чанки по id шаблонов

После этого сохраняем и переходим на главную страницу — она должна точно также загружаться, как и до разбивки на чанки.

Для чего все это?

Тэг «template» выводит id примененного шаблона, а выше приведенная конструкция обращается к соответственному чанку и выводит его. Так мы в дальнейшем сэкономим кучу времени при внесении изменений в верстку сайта.

В дальнейшем мы будем создавать дополнительные шаблоны (для типовых страниц, для статей, для портфолио и т.д.), вызывать во всех будем чанк tpl — там у нас шапка, подвал и другие элементы которые присутствуют на всех остальных страницах. У каждого нового шаблона будет свой id, следовательно, мы будем создавать дополнительные чанки tpl.2, tpl.3, …, tpl.7 и уже в них вносить недостающий контент. Забегая вперед, у нас получится примерно такая структура.

схема для создания чанков

Если выбрали феном, то пожалуй лучше разбивать немного по другому. Переименовываем начальный шаблон в base и помещаем в него все из чанка tpl. А на месте вызова resource.template)> , пишем < block 'content' > < / block >

Базовый шаблон

Дольше создаем новый шаблон home и вставляем туда вот такую конструкцию:

  здесь код из чанка tpl.1 

Шаблон home

После этого меняем шаблон главной страницы на home и сохраняем ее, смотрим главную все также должно работать! Получается мы вообще от чанков избавились — они потом появятся по ходу дела). Это раздел расширение шаблонов из статьи про fenom. К стати, если хотите работать через IDE (например phpstorm), есть возможность хранить чанки, шаблоны, сниппеты файловыми элементами.

В следующем уроке изучим сниппеты.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *