Выполнение PHP кода в шаблонах Drupal 8

Аватар пользователя Old Human Old Human 17 мая 2016 в 15:58

Подскажите, пожалуйста, как создать свое расширение для twig, позволяющее запустить php код.

Комментарии

Аватар пользователя Old Human Old Human 17 мая 2016 в 18:10

Plazik wrote:

http://drupal.stackexchange.com/a/185224/26441


я эту тему уже вдоль и поперек изучил с утра )
этот код:

To disable the cache add:
$build['#cache']['max-age'] = 0;

по всему интернету разбросан, но нигде не сказано, куда конкретно его надо вставлять, в какой файл?
Опять же, кеш надо запретить для всех, в том числе для гостей без сессии - коими являются роботы ПС.
А это уже другая история - http://drupal.stackexchange.com/questions/151254/how-can-i-prevent-a-par...

Аватар пользователя Plazik Plazik 17 мая 2016 в 18:16

По идеи в альтер блока вставить нужно.

По сессии - посмотрите как в D7 сделано и сделайте также. Насколько я помню просто кеш страниц ставите на 1 день и оно обновляется постепенно, сапа не ругается на такое.

Аватар пользователя Old Human Old Human 17 мая 2016 в 18:28

Plazik wrote:

По идеи в альтер блока вставить нужно.

Я не силен в хуках и альтерах. Подскажите, пожалуйста, в какой файл и что именно надо вставить.

Аватар пользователя Old Human Old Human 17 мая 2016 в 18:54

Вот как-то так:

function hook_block_view_sape_alter(array &$build, \Drupal\Core\Block\BlockPluginInterface $block) {
$build['#cache']['max-age'] = 0;
}

но не работает, рандомное число на всех страницах одинаковое выводит

Аватар пользователя Plazik Plazik 17 мая 2016 в 20:58

Вот http://valuebound.com/resources/blog/drupal-8-how-to-create-a-custom-blo...
Создайте свой блок, и туда вставьте код сапы.

> Я не силен в хуках и альтерах
Читайте гугл, там это все расписано.

> function hook_
hook тут надо заменить на название своего модуля.

Аватар пользователя Old Human Old Human 17 мая 2016 в 22:10

Plazik wrote:

Читайте гугл, там это все расписано.

А зачем тогда форум?
Я всего лишь попросил сформировать название функции function hook_block_build_BASE_BLOCK_ID_alter в том случае если блок называется sape.
https://api.drupal.org/api/drupal/core!modules!block!block.api.php/funct...

По теме:
К сожалению, пришлось сделать модуль. Причем, единственным вариантом снимающим кеширование является:

           '#cache' => [
                'max-age' => 0,
                        ],

Варианты:
$build['#cache']['max-age'] = 0;
\Drupal::service('page_cache_kill_switch')->trigger();
в модуле не работают

Аватар пользователя Old Human Old Human 20 мая 2016 в 11:40

Стандартный код сапы не работает в модуле:
$sape = new SAPE_client();
вызывает ошибку:
mod_fcgid: stderr: PHP Fatal error: Class 'Drupal\\sape\\Plugin\\Block\\SAPE_client' not found
Что можно с этим сделать?

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