То ли лыжи не едут, то ли со мной что-то не так...
Категорически нигде не могу найти описание структуры данного массива. В конкретных примерах хуков используются $variables['element'], $variables['attributes'], $variables['data']. По контексту понятно что это, но хотелось бы изучить и осознать полный список. Документация по render arrays на drupal.org почему-то целиком посвящена какой-то другой ерунде, но только не тому, что мне нужно. Попытка распечатать $variables через print_r() изнутри хука валит PHP по нехватке памяти (похоже на рекурсию).
Дайте, пожалуйста, ссылку на то, где описан этот массив. Можно на английском, даже лучше на английском.
Заранее премного.
Ответы
Рекомендую почитать про hook_theme(), так как все препроцесс функции от этого хука. Как правильно сказал xandeadx, никакой документации нет и быть не может, так как туда попадает только то, что нужно конкретному темплейту от модуля который его обьявил, а также то что вы добавите туда сами. Так что почитайте бегло, хотябы, статейку и вы поймете как это работает и как туда попадают данные.
P.s. как вариант, можно поиском по проекту найти функцию template_preprocess_HOOK
(где вместо HOOK название theme hook), так вы найдете функцию которая первая туда добавляет переменные (от модуля который обьявил это), и по коду сможете понять что там происходит и что туда добавляется. А потом отдается уже всем остальным, в том числе и вашему где вы уже можете корректировать массив и взаимодействовать с данными заложенными в начале.
Переменные описываются в комментарии twig файла, другой документации нет. Вместо print_r пользуйтесь kint() из модуля Devel.
Спасибо, 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() работает нормально, так что в будущем пригодится.
Попробуйте писать не kint() а ksm(). У них разное поведение, второй не влияет на запрос а отдается через системные сообщения сайта.
Попробовал ksm($variables) - ошибки нет, но полностью слетает тема - выдается голый контент примерно как с темой Stark. При этом ожидаемого дампа массива там нет ;)
Ну да бог с ним, это теперь для меня представляет чисто академический интерес ;) Буду благодарен, если поможете одолеть колорбоксы в соседней теме.
Спасибо, стало проясняться! Сейчас попробую отдельным вопросом изложить суть конкретной проблемы, которую я пытался решить - возможно найдутся альтернативные пути.
Есть еще переменые которые добавляются во все шаблоны через HOOK_preprocess, который как раз и вызывается первым (перед hook_preprocess_HOOK).
Да, об этом в статье также упомянуто.