Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Создание пользовательских шаблонов Twig для пользовательского модуля

05/05/2020, by maria

Общая идея в 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.