Создание пользовательских шаблонов Twig для пользовательского модуля
Общая идея в Drupal 8 состоит в том, что вы хотите избежать создания HTML непосредственно в коде PHP вашего пользовательского модуля. Вы хотите, чтобы это вошло в шаблоны Twig. Чтобы создать новые шаблоны Twig в вашем модуле, выполните следующие шаги.
Шаг № 1: Определите hook_theme в файле .module
Создайте файл [module] .module, если он еще не существует, и добавьте код, который определяет каждый из ваших шаблонов Twig. Ключ каждого элемента в массиве - это то, что вам потребуется для вызова шаблона позже. Не используйте тире в имени файла.
function test_twig_theme($existing, $type, $theme, $path) { return [ 'my_template' => [ 'variables' => ['test_var' => NULL], ], ]; }
Смотрите документацию для hook_theme().
Шаг № 2: вызов шаблона
В том месте, куда вы возвращаете свой рендер-массив (из метода контроллера, который вызывается из yml-файла вашего маршрутизатора, или где-либо еще), вызовите шаблон Twig. Ниже приведен пример модуля тестирования, который вызывается из файла маршрутизации yml в модуле. (нужна дополнительная информация по этой части)
/** * @file * Contains \Drupal\test_twig\Controller\TestTwigController. */ namespace Drupal\test_twig\Controller; use Drupal\Core\Controller\ControllerBase; class TestTwigController extends ControllerBase { public function content() { return [ '#theme' => 'my_template', '#test_var' => $this->t('Test Value'), ]; } }
Вы также можете использовать метод рендеринга для построения выходных данных, если вам нужно использовать это как часть другого рабочего процесса в вашем коде: -
$renderable = [ '#theme' => 'my_template', '#test_var' => 'test variable', ]; $rendered = \Drupal::service('renderer')->renderPlain($renderable);
Имейте в виду, что это базовая реализация, которая не выполняет никакого кэширования. Документы Render API Overview содержат дополнительную информацию о том, как вы можете добавить к этому кеширование. Говоря о кешировании - имена переменных будут кэшироваться, и если вы измените их (скажем, «test_var» на «my_var»), вам придется обновить кеш.
Шаг № 3: Создать шаблон Twig
В вашем модуле, внутри папки с шаблонами, создайте шаблон веточки. Имя файла должно совпадать с тем, что вы положили в hook_theme() (замените подчеркивание тире). В этом случае имя файла будет my-template.html.twig.
Вот файл, который я использовал для тестирования:
<p>Test twig template!</p> <p>test_var: {{ test_var }}</p>
Прелесть этого в том, что файл шаблона, определенный в вашем модуле, будет использоваться, если такого файла еще нет в вашей теме. Просто поместите файл в папку с шаблонами вашей темы, очистите кеш (drush cache-rebuild), и он будет читать этот файл.
Вы можете поместить файл в любую вложенную подпапку темы сайта, чтобы все было организовано.
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.