Дата публикации
21 Августа 2019
Дата изменения
5 Июля 2020
Уникальных просмотров
1.984

Оглавление

pdoTools умеет загружать и использовать элементы из файлов, используя методы getChunk и runSnippet с биндингом @FILE.

Файловые элементы

Можно делать это через API:

if ($pdoTools = $modx->getService('pdoTools')) {
    $chunk = $pdoTools->getChunk('@FILE chunks/my_chunk.tpl', array('placeholder' => 'value'));

    $snippet = $pdoTools->runSnippet('@FILE snippets/my_snippet.php', array('param' => 'value'));
}

Все элементы загружаются из директории, указанной в системной настройке pdotools_elements_path.

Вы можете указать и произвольную директорию прямо при вызове метода:

$chunk = $pdoTools->getChunk('@FILE chunks/my_chunk.tpl', array(
    'placeholder' => 'value',
    'elementsPath' => MODX_ASSETS_PATH . 'mydir/',
));

Загрузка элементов разрешена только из файлов с расширением .tpl.html и .php.

Работа с Fenom

Для загрузки чанков и сниппетов в Fenom вы можете использовать такой синтаксис для чанков:

{$_modx->getChunk('@FILE chunks/my_chunk.tpl', [
    'placeholder' => 'value',
    'elementsPath' => MODX_ASSETS_PATH . 'mydir/',
])}

// или

{'@FILE chunks/my_chunk.tpl' | chunk : [
   'placeholder' => 'value',
   'elementsPath' => MODX_ASSETS_PATH . 'mydir/',
]}

и для сниппетов:

{$_modx->runSnippet('@FILE snippets/my_snippet.php', [
    'param' => 'value',
    'elementsPath' => MODX_ASSETS_PATH . 'mydir/',
])}

// или

{'@FILE snippets/my_snippet.php' | snippet : [
    'param' => 'value',
    'elementsPath' => MODX_ASSETS_PATH . 'mydir/',
]}

Кэширование файловых элементов

Файловые сниппеты не кэшируются, но можно включить кэширование скомпилированных шаблонов Fenom, используя настройку pdotools_fenom_cache.

При включение этой настройки все скомпилированные чанки, загруженные через @FILE будут сохраняться в кэш MODx. По умолчанию, это директория MODX_CORE_PATH . 'cache/default/pdotools'. При очистке кэша всего сайта эта директория также очищается.

Очистить кэш только скомпилированных чанков, не затрагивая кэш других элементов можно через API MODx:

<?php
$modx->cacheManager->clearCache(
  array('default/pdotools/')
);

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

Простая загрузка шаблона:

{include 'file:chunks/my_chunk.tpl'}

Расширение шаблона:

{extends 'file:chunks/my_chunk.tpl'}

{block 'myblock'}
    Hello world!
{/block}

Есть еще источник template, который создаёт чанки из объектов modTemplate системы:

{include 'template:MyTemplate'}
// или по id
{include 'template:1'}

Если же не указывать никакой источник, то будет загружен обычный чанк из БД:

{include 'myChunk'}
// или по id
{include '10'}

Кэширование отключено по умолчанию.

Также можно кэшировать только файлы, не кэшируя обычные чанки из БД. Для этого вам нужно отключить pdotools_fenom_cache и указать параметры напрямую Fenom через настройку pdotools_fenom_options:

{"force_compile": false, "disable_cache": false, "force_include": false, "auto_reload": true}

Примеры

Каким же образом можно вынести оформление сайта в файлы, используя pdoTools и Fenom?

Для полной функциональности вам обязательно нужно включить системную настройку pdotools_fenom_parser.

Шаблоны

Создайте нужное количество шаблонов в системе и укажите их ресурсам. В самих шаблонах нужно написать просто:

{include 'file:templates/my_template1.tpl'}

После этого ваш шаблон будет загружаться с диска и обновляться без очистки кэша.

К сожалению, полностью отказаться от создания шаблонов в БД, даже с одной строкой нельзя, так как они назначаются ресурсам по id.

Чанки

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

Например, мы можем прописать в нашем шаблоне templates/my_template1.tpl вот такие строки:

{include 'file:chunks/head.tpl'}
{include 'file:chunks/body.tpl'}
{include 'file:chunks/footer.tpl'}

и весь шаблон будет загружен из этих чанков-файлов.

Сниппеты

Тоже самое и со сниппетами. Ничего кроме файлов создавать не нужно. Так как это PHP код, нужно использовать метод pdoTools:

{$_modx->runSnippet('@FILE snippets/my_snippet.php')}

При возврате данных из сниппета нужно использовать return;

Плагины

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

После этого просто вызывайте свой файловый сниппет из этого плагина через API:

<?php
if ($pdoTools = $modx->getService('pdoTools')) {
    $pdoTools->runSnippet('@FILE plugins/my_plugin.php', $scriptProperties);
}

Он будет проверять и обрабатывать события. Например:

<?php
switch ($modx->event->name) {
    case 'OnLoadWebDocument':
        echo '<pre>'; print_r($modx->resource->toArray()); die;
        break;
}

Этому плагину нужно назначить событие OnLoadWebDocument.

Заключение

Таким образом вы можете вынести свои шаблоны, чанки, плагины и сниппеты в файлы.

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

Благодарность автору

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

Один из самых популярных способов поблагодарить автора, воспользоваться сервисом Яндекс.Деньги.

Время работы: 0,1288 s
Время запросов: 0,1288 s
Количество запросов: 24
Источник: cache