Здравствуйте!
Не мог бы кто-нибудь, кто понимает всю структуру drupal объяснить на понятийном уровне откуда что берется. Например переменная $node. Понятно что она доступна в шаблоне, но где ее инициализация? То есть, скажем, то-то то-то подготавливает переменные, затем они проходят через то-то то-то, и уже в шаблоне мы их можем использовать.
Спасибо.
Комментарии
Что конкретно тебя интересует?
Есть ядро Drupal, в нем куча функций. Во время генерации страницы выполняются различные функции, в том числе и инициализация глобальных переменных. Одна из них - $node.
Для использования глобальной переменной не обязательно знать, через какие функции она проходит. Для работы с Drupal существует API. Достаточно мощное.
Переменные попадают в шаблон через 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[], станет переменными в шаблоне.
Спасибо!
Но где всетаки впервые объявляются глобальные переменные?
Какие глобальные переменные?
$node - это не глобальная переменная.
xdebug + F7 и все вопросы отпадут
Точно. Одного прохода страницы в дебагере могжет заменить несколько дней чтения документации.
Зато будет поход к хирургу, лечить палец, который жмакал на Next step
первое объявление глобальной переменной
/sites/default/settings.php
...
$db_url
$db_prefix
$base_url
...
Хорошо, тогда такой вопрос: мне не понятно как шаблоны видят все эти переменные?
Ответ: да, вам не понятно. Шутка.
Так я для кого написал, что их делает видимыми preprocess-функция? Точнее, preprocess подготавливает, а функция рендеринга (theme_render_template по умолчанию) делает видимыми.
да но, как понять видимыми? ) как один файл видит переменные другого?
Подсказка: если зайти на api.drupal.org, то там можно посмотреть код функции. Ответ на ваш вопрос - первой же строкой. Сделайте хоть что-нибудь сами, нельзя все разжевывать.
огромное вам спасибо за помощь. Просто я почти понял структуру но чего не хватает, какой то детальки, вот не пойму какой
Установил XDebug, установил WEbGrind. Только вот не пойму как функцию phptemplate_preprocess посмотреть?
WEbGrind это профайлер, вам нужен дебагер
Xdebug стоит.. как им пользоваться?
скачайте любую php ide поддерживающую отладку
поставил eclipse PDT
как теперь все это настроить? )
http://programmingbulls.com/debugging-drupal-php--xdebug-eclipse
via google.com
спасибо!
Попробуй Codelobster PHP Edition.
Это бесплатная PHP IDE с дебаггером и специальным плагином для Drupal.