Modx подключить файл в сниппете
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
pdoTools умеет загружать и использовать элементы из файлов, используя методы getChunk и runSnippet с биндингом @FILE .
Можно делать это через API:
Все элементы загружаются из директории, указанной в системной настройке pdotools_elements_path.
Вы можете указать и произвольную директорию прямо при вызове метода:
Загрузка элементов разрешена только из файлов с расширением .tpl , .html и .php .
Для загрузки чанков и сниппетов в Fenom вы можете использовать такой синтаксис для чанков:
и для сниппетов:
Файловые сниппеты не кэшируются, но можно включить кэширование скомпилированных шаблонов Fenom, используя настройку pdotools_fenom_cache.
При включение этой настройки все скомпилированные чанки, загруженные через @FILE будут сохраняться в кэш MODX. По умолчанию, это директория MODX_CORE_PATH . 'cache/default/pdotools' . При очистке кэша всего сайта эта директория также очищается.
Стоит отметить, что процедура кэширования чанков через биндинг @FILE в системе MODX является несколько избыточной, учитывая, что Fenom изначально рассчитан на работу с шаблонами из файлов. Для того, чтобы в полной мере использовать это преимущество (и родной файловый кэш Fenom) вам нужно загружать элементы через источник file и синтаксис Fenom.
Простая загрузка шаблона:
Есть еще источник template , который создаёт чанки из объектов modTemplate системы:
Если же не указывать никакой источник, то будет загружен обычный чанк из БД
Кэширование отключено по умолчанию.
Также можно кэшировать только файлы, не кэшируя обычные чанки из БД. Для этого вам нужно отключить pdotools_fenom_cache и указать параметры напрямую Fenom через настройку pdotools_fenom_options:
Все параметры Fenom можно найти в его документации.
Каким же образом можно вынести оформление сайта в файлы, используя pdoTools и Fenom?
Для полной функциональности вам обязательно нужно включить системную настройку pdotools_fenom_parser.
Создайте нужное количество шаблонов в системе и укажите их ресурсам. В самих шаблонах нужно написать просто
После этого ваш шаблон будет загружаться с диска и обновляться без очистки кэша.
К сожалению, полностью отказаться от создания шаблонов в БД, даже с одной строкой нельзя, так как они назначаются ресурсам по id .
А вот чанки использовать гораздо проще. Их можно спокойно вызывать и расширять из любого места.
Например, мы можем прописать в нашем шаблоне templates/my_template1.tpl вот такие строки:
и весь шаблон будет загружен из этих чанков-файлов.
Тоже самое и со сниппетами. Ничего кроме файлов создавать не нужно. Так как это PHP код, нужно использовать метод pdoTools:
При возврате данных из сниппета нужно использовать return ;
А вот плагины, как и шаблоны, нужно сначала создать в БД, чтобы назначить им события, на которые они будут реагировать.
После этого просто вызывайте свой файловый сниппет из этого плагина через API:
Он будет проверять и обрабатывать события. Например:
Этому плагину нужно назначить событие OnLoadWebDocument.
Таким образом вы можете вынести свои шаблоны, чанки, плагины и сниппеты в файлы.
Это позволит подключить систему управления версиями и более удобно разрабатывать сайт из любимого редактора.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
pdoTools умеет загружать и использовать элементы из файлов, используя методы getChunk и runSnippet с биндингом @FILE .
Можно делать это через API:
Все элементы загружаются из директории, указанной в системной настройке pdotools_elements_path.
Вы можете указать и произвольную директорию прямо при вызове метода:
Загрузка элементов разрешена только из файлов с расширением .tpl , .html и .php .
Работа с Fenom
Для загрузки чанков и сниппетов в Fenom вы можете использовать такой синтаксис для чанков:
и для сниппетов:
regClientScript¶
Действует аналогично regClientStartupScript за исключением того, что он работает перед закрывающим тегом BODY:
Заключение
Таким образом вы можете вынести свои шаблоны, чанки, плагины и сниппеты в файлы.
Это позволит подключить систему управления версиями и более удобно разрабатывать сайт из любимого редактора.
Продолжаю эксперименты с загрузкой чанков и сниппетов из файлов. Мой первый эксперимент с парсером оказался не очень удачный. Хотя задачу он решал, но ожидания были немного другие. А поближе познакомившись с феномом, нашел, как мне кажется, хорошее решение — модификаторы. Дальше для тех, кому это интересно.
Немного о причинах
Решение
Базовый функционал pdoTools позволяет работать с файлами только для чанков, а также добавлять в феном свои модификаторы, правда используя для этого сниппет MODX. Поэтому я немного расширил этот функционал и создал 2 класса, расширяющих pdoTools и FenomX.
Теперь мой шаблон выглядит так
Я специально оставил старые вызовы чанков и сниппетов MODX для наглядности. В конце можно увидеть вызов сниппета из компонента Orphoman с параметрами. Т.е. можно не только свои сниппеты вызывать.
Я не ставил задачу увеличить скорость. Даже был готов к небольшому повышению времени загрузки страницы. Всё-таки MODX кэширует всю страницу, а тут чанки грузятся каждый раз. Но оказалось, что разницы нет. Возможно из-за отсутствия обращения к базе данных.
Вызовы сниппетов pdoTools я также переделал на обращение к файлу, используя модификатор @FILE.
Инструкция
Кладём файлы pdotoolsplus.class.php и _fenomplus.php в папку core/components/pdotools/model/pdotools/ рядом с базовыми классами pdotools.
Дальше в системной настройке pdoTools.class указываем наш новый класс pdotools.pdotoolsplus.
Теперь вы спокойно может вызывать чанки и сниппеты из файлов в шаблонах и чанках используя следующий синтаксис
По-умолчанию, директория для чанков — core/elements/chunks/. А для сниппетов — core/elements/snippets/. Но её можно переопределить в параметре tplPath.
У чанков допустимые расширения html и tpl. У сниппетов php. Расширения tpl и php можно не указывать.
Для загрузки чанков из файла используется базовый функционал pdoTools. А вот для загрузки сниппетов добавлен метод includeSnippet() по аналогии с runSnippet(). Его, кстати, можно использовать и в обычных сниппетах для загрузки нужного сниппета из файла — $pdoTools->includeSnippet('name', array('param1'=>'value1')).
Заключение
- Чанки и сниппеты хранятся на диске, поэтому MODX не тратит время на запросы в базу данных.
- Теперь не надо заходить в админку. Например, я редактирую элементы в phpStorm, а он их заливает на сайт.
- При изменении элемента кэш сайта не сбрасывается — результат виден сразу, на время загрузки страницы это никак не влияет.
- Модули теперь поддерживают версионность.
- Теперь удобно искать свои чанки и сниппеты в phpStorm (CTRL+SHIFT+F).
- Ну и возможность скрыть от менеджеров функционал, чтобы не напортачили. Главное, чтобы вкладка с файлами была выключена.
П.С. Наверно, можно было сделать один модификатор file и в зависимости от расширения загружать чанки или сниппеты.
Итак, у вас есть сниппет, который вы пишете, и вы хотите добавить CSS и/или JavaScript на свои страницы, но вам не нужно настраивать пользовательскую переменную шаблона и редактировать ее на каждом ресурсе, который используется в вашем сниппете. Ты хочешь, чтобы Сниппет сделал это! На самом деле это довольно просто, используя некоторые методы MODX API.
Другие CMS Это общая потребность в любой CMS, поэтому, если вы переходите с другой платформы, вот некоторые из связанных функций, например WordPress использует функции:
- wp_enqueue_script ,
- wp_register_script ,
- wp_enqueue_style ,
- wp_register_style .
Добавление до конца BODY¶
Существуют также методы, которые можно использовать для вставки Javascript или HTML в конце каждой страницы, прямо перед закрытием тега BODY. Они часто полезны для пользовательских сценариев аналитики или JS, которые необходимо запускать на уровне тела, а не в HEAD.
regClientHTMLBlock¶
Действует аналогично regClientStartupHTMLBlock за исключением того, что он работает перед закрывающим тегом BODY:
Вывод¶
MODX предлагает разработчикам дополнительных возможностей множество способов вставки пользовательских CSS/JS в их страницы на уровне фрагмента. Тем не менее, MODX также рекомендует в любых распространяемых вами дополнениях, чтобы убедиться, что вставка CSS или JS в страницу является переключаемой опцией, так что пользователь может настроить контент или инфраструктуру JavaScript, если они того пожелают.
Итак, у вас есть сниппет, который вы пишете, и вы хотите добавить CSS и/или JavaScript на свои страницы, но вам не нужно настраивать пользовательскую переменную шаблона и редактировать ее на каждом ресурсе, который используется в вашем сниппете. Ты хочешь, чтобы Сниппет сделал это! На самом деле это довольно просто, используя некоторые методы MODX API.
Другие CMS Это общая потребность в любой CMS, поэтому, если вы переходите с другой платформы, вот некоторые из связанных функций, например WordPress использует функции:
- wp_enqueue_script ,
- wp_register_script ,
- wp_enqueue_style ,
- wp_register_style .
regClientStartupHTMLBlock¶
Эта функция полезна, если вам нужно установить некоторые переменные JS или вывести HTML в HEAD:
Добавление до конца BODY¶
Существуют также методы, которые можно использовать для вставки Javascript или HTML в конце каждой страницы, прямо перед закрытием тега BODY. Они часто полезны для пользовательских сценариев аналитики или JS, которые необходимо запускать на уровне тела, а не в HEAD.
Добавление к HEAD¶
Существует несколько методов, которые автоматически добавляют CSS и/или JavaScript в HEAD текущей страницы. Они будут работать в том порядке, в котором они были добавлены, поэтому, если они вам нужны в определенном порядке, убедитесь, что вы выполняете методы также в этом порядке.
regClientCSS¶
Эта функция позволяет зарегистрировать любой файл CSS в HEAD содержимого, указав URL-адрес в методе:
Или, более правильно, вы бы использовали константу MODX_ASSETS_URL , чтобы ваш сниппет или плагин работал даже на сайте, который был настроен для использования нестандартного расположения ресурсов.
Примеры
Каким же образом можно вынести оформление сайта в файлы, используя pdoTools и Fenom?
Для полной функциональности вам обязательно нужно включить системную настройку pdotools_fenom_parser.
Шаблоны
Создайте нужное количество шаблонов в системе и укажите их ресурсам. В самих шаблонах нужно написать просто
После этого ваш шаблон будет загружаться с диска и обновляться без очистки кэша.
К сожалению, полностью отказаться от создания шаблонов в БД, даже с одной строкой нельзя, так как они назначаются ресурсам по id .
Чанки
А вот чанки использовать гораздо проще. Их можно спокойно вызывать и расширять из любого места.
Например, мы можем прописать в нашем шаблоне templates/my_template1.tpl вот такие строки:
и весь шаблон будет загружен из этих чанков-файлов.
Сниппеты
Тоже самое и со сниппетами. Ничего кроме файлов создавать не нужно. Так как это PHP код, нужно использовать метод pdoTools:
При возврате данных из сниппета нужно использовать return ;
Плагины
А вот плагины, как и шаблоны, нужно сначала создать в БД, чтобы назначить им события, на которые они будут реагировать.
После этого просто вызывайте свой файловый сниппет из этого плагина через API:
Он будет проверять и обрабатывать события. Например:
Этому плагину нужно назначить событие OnLoadWebDocument.
Вывод¶
MODX предлагает разработчикам дополнительных возможностей множество способов вставки пользовательских CSS/JS в их страницы на уровне фрагмента. Тем не менее, MODX также рекомендует в любых распространяемых вами дополнениях, чтобы убедиться, что вставка CSS или JS в страницу является переключаемой опцией, так что пользователь может настроить контент или инфраструктуру JavaScript, если они того пожелают.
regClientHTMLBlock¶
Similar to regClientStartupHTMLBlock за исключением того, что он работает перед закрывающим тегом BODY:
regClientStartupScript¶
Эта функция позволяет зарегистрировать любой произвольный JavaScript-код для HEAD документа:
regClientStartupHTMLBlock¶
Эта функция полезна, если вам нужно установить некоторые переменные JS или вывести HTML в HEAD:
regClientCSS¶
Эта функция позволяет зарегистрировать любой файл CSS в HEAD содержимого, указав URL-адрес в методе:
Или, более правильно, вы бы использовали константу MODX_ASSETS_URL , чтобы ваш сниппет или плагин работал даже на сайте, который был настроен для использования нестандартного расположения ресурсов.
regClientScript¶
Similar to regClientStartupScript за исключением того, что он работает перед закрывающим тегом BODY:
regClientStartupScript¶
Эта функция позволяет зарегистрировать любой произвольный JavaScript-код для HEAD документа:
Добавление к HEAD¶
Существует несколько методов, которые автоматически добавляют CSS и/или JavaScript в HEAD текущей страницы. Они будут работать в том порядке, в котором они были добавлены, поэтому, если они вам нужны в определенном порядке, убедитесь, что вы выполняете методы также в этом порядке.
Кэширование
Файловые сниппеты не кэшируются, но можно включить кэширование скомпилированных шаблонов Fenom, используя настройку pdotools_fenom_cache.
При включение этой настройки все скомпилированные чанки, загруженные через @FILE будут сохраняться в кэш MODX. По умолчанию, это директория MODX_CORE_PATH . 'cache/default/pdotools' . При очистке кэша всего сайта эта директория также очищается.
Стоит отметить, что процедура кэширования чанков через биндинг @FILE в системе MODX является несколько избыточной, учитывая, что Fenom изначально рассчитан на работу с шаблонами из файлов. Для того, чтобы в полной мере использовать это преимущество (и родной файловый кэш Fenom) вам нужно загружать элементы через источник file и синтаксис Fenom.
Простая загрузка шаблона:
Есть еще источник template , который создаёт чанки из объектов modTemplate системы:
Если же не указывать никакой источник, то будет загружен обычный чанк из БД
Кэширование отключено по умолчанию.
Также можно кэшировать только файлы, не кэшируя обычные чанки из БД. Для этого вам нужно отключить pdotools_fenom_cache и указать параметры напрямую Fenom через настройку pdotools_fenom_options:
Все параметры Fenom можно найти в его документации.
Читайте также: