Drupal at all

Главные вкладки

Аватар пользователя skiller_07 skiller_07 14 июля 2010 в 15:15

Здравствуйте!

Не мог бы кто-нибудь, кто понимает всю структуру drupal объяснить на понятийном уровне откуда что берется. Например переменная $node. Понятно что она доступна в шаблоне, но где ее инициализация? То есть, скажем, то-то то-то подготавливает переменные, затем они проходят через то-то то-то, и уже в шаблоне мы их можем использовать.

Спасибо.

Комментарии

Аватар пользователя vitg vitg 14 июля 2010 в 15:22

Что конкретно тебя интересует?
Есть ядро Drupal, в нем куча функций. Во время генерации страницы выполняются различные функции, в том числе и инициализация глобальных переменных. Одна из них - $node.
Для использования глобальной переменной не обязательно знать, через какие функции она проходит. Для работы с Drupal существует API. Достаточно мощное.

Аватар пользователя graker graker 14 июля 2010 в 15:51

Переменные попадают в шаблон через preprocess-функции (template_preprocess_$hook, theme_preprocess_$hook, module_preprocess_$hook и т.д.). В случае с нодой, переменная $node генерится через template_preprocess_node(), примерно так:
1. Нода генерится для показа через функцию node_view(), одним из аргументов которой является объект ноды, загруженный через node_load().

2. В конце node_view() происходит обращение к слою темизации через вызов функции theme('node', $node, $teaser, $page).

3. Функция theme() устроена так, что если элемент темизируется через шаблон, все аргументы функции theme() становятся переменными в массиве $variables[] preprocess-функций подготовки шаблона.

4. Всё, что есть в $variables[], станет переменными в шаблоне.

Аватар пользователя Dan Dan 14 июля 2010 в 17:42

"xxandeadxx" wrote:
xdebug + F7 и все вопросы отпадут

Точно. Одного прохода страницы в дебагере могжет заменить несколько дней чтения документации.

Аватар пользователя graker graker 15 июля 2010 в 7:55

Quote:
мне не понятно как шаблоны видят все эти переменные?

Ответ: да, вам не понятно. Шутка.

Так я для кого написал, что их делает видимыми preprocess-функция? Точнее, preprocess подготавливает, а функция рендеринга (theme_render_template по умолчанию) делает видимыми.

Аватар пользователя graker graker 15 июля 2010 в 8:00

Подсказка: если зайти на api.drupal.org, то там можно посмотреть код функции. Ответ на ваш вопрос - первой же строкой. Сделайте хоть что-нибудь сами, нельзя все разжевывать.

Аватар пользователя skiller_07 skiller_07 15 июля 2010 в 8:18

огромное вам спасибо за помощь. Просто я почти понял структуру но чего не хватает, какой то детальки, вот не пойму какой Smile