Вы здесь

Где документирована структура массива $variables, который передается в template hooks?

0

То ли лыжи не едут, то ли со мной что-то не так...
Категорически нигде не могу найти описание структуры данного массива. В конкретных примерах хуков используются $variables['element'], $variables['attributes'], $variables['data']. По контексту понятно что это, но хотелось бы изучить и осознать полный список. Документация по render arrays на drupal.org почему-то целиком посвящена какой-то другой ерунде, но только не тому, что мне нужно. Попытка распечатать $variables через print_r() изнутри хука валит PHP по нехватке памяти (похоже на рекурсию).
Дайте, пожалуйста, ссылку на то, где описан этот массив. Можно на английском, даже лучше на английском.
Заранее премного.

Версия Drupal: 
8.x
Вопрос задан 02.08.2017 - 19:34

Ответы

1

Рекомендую почитать про hook_theme(), так как все препроцесс функции от этого хука. Как правильно сказал xandeadx, никакой документации нет и быть не может, так как туда попадает только то, что нужно конкретному темплейту от модуля который его обьявил, а также то что вы добавите туда сами. Так что почитайте бегло, хотябы, статейку и вы поймете как это работает и как туда попадают данные.

P.s. как вариант, можно поиском по проекту найти функцию template_preprocess_HOOK (где вместо HOOK название theme hook), так вы найдете функцию которая первая туда добавляет переменные (от модуля который обьявил это), и по коду сможете понять что там происходит и что туда добавляется. А потом отдается уже всем остальным, в том числе и вашему где вы уже можете корректировать массив и взаимодействовать с данными заложенными в начале.

Ответ дан 03.08.2017 - 07:21
Аватар пользователя Niklan
Niklan
436

Спасибо, стало проясняться! Сейчас попробую отдельным вопросом изложить суть конкретной проблемы, которую я пытался решить - возможно найдутся альтернативные пути.

Комментарий оставлен 03.08.2017 - 09:12

туда попадает только то, что нужно конкретному темплейту от модуля который его обьявил

Есть еще переменые которые добавляются во все шаблоны через HOOK_preprocess, который как раз и вызывается первым (перед hook_preprocess_HOOK).

Комментарий оставлен 03.08.2017 - 10:12

Да, об этом в статье также упомянуто.

Стоит упомнять что в препроцесс передаются не только ваши переменные, также туда добавляются некоторые системные, вы также можете их использовать. Но есть три переменных которые имеют особенное поведение.

Комментарий оставлен 03.08.2017 - 11:24
0

Переменные описываются в комментарии twig файла, другой документации нет. Вместо print_r пользуйтесь kint() из модуля Devel.

Ответ дан 02.08.2017 - 20:35
Аватар пользователя xandeadx
xandeadx
1417

Спасибо, Devel поставил, kint($variables) всё равно выдаёт странную ошибку:

The website encountered an unexpected error. Please try again later.
Error: Cannot access protected property Symfony\Component\HttpFoundation\ResponseHeaderBag::$headers in Symfony\Component\HttpFoundation\HeaderBag->set() (line 145 of vendor/symfony/http-foundation/HeaderBag.php).

Но в свете выше- (и ниже-) изложенного очевидно, что я в любом случае не там ищу, так что это уже не страшно ;)
PS Для отдельных элементов (типа $variables['attributes']) kint() работает нормально, так что в будущем пригодится.

Комментарий оставлен 03.08.2017 - 09:10

Попробуйте писать не kint() а ksm(). У них разное поведение, второй не влияет на запрос а отдается через системные сообщения сайта.

Комментарий оставлен 03.08.2017 - 11:29

Попробовал ksm($variables) - ошибки нет, но полностью слетает тема - выдается голый контент примерно как с темой Stark. При этом ожидаемого дампа массива там нет ;)
Ну да бог с ним, это теперь для меня представляет чисто академический интерес ;) Буду благодарен, если поможете одолеть колорбоксы в соседней теме.

Комментарий оставлен 03.08.2017 - 11:46