Страницы генерируются до узлов в Drupal 7? - PullRequest
1 голос
/ 11 февраля 2011

Когда я перехожу в Drupal 7, я внезапно очень растерялся из-за того, что, как мне показалось, я понял (или мне не нужно было понимать из-за значительного количества времени, которое я провел в Drupals 5 и 6 -

Я буду работать над модулем и в процессе разработки кода добавлю несколько вызовов dsm () и / или drupal_set_message (). В моей предыдущей работе эти вызовы всегда работали так, как я ожидал - при отправке на следующей странице dsm запускались, производили все, что производили, и результаты оказывались на странице. В Drupal 7 я делаю то же самое, но обнаруживаю, что они появляются на одной странице слишком поздно - мне нужно обновить страницу, чтобы увидеть их. Это заставляет меня думать, что оценочная модель Drupal 7 состоит в том, что выбранный шаблон страницы оценивается, а затем - и только тогда - загружается и отображается узел, отображаемый на странице. Конечно, несколько тестов с использованием watchdog () и sleep () подтверждают это - шаблон страницы определенно начинает обрабатываться до того, как обрабатывается узел внутри страницы. (Это только с очень-чуть-чуть измененными версиями стандартного шаблона страницы D7 и без каких-либо хитрых настроек внутреннего поведения D7, кстати, и я ничего не делаю с кэшированием - все параметры кэширования в Config> Development> Производительность отключена.)

Это объясняет поведение сообщения - шаблон страницы выводит все доступные ему сообщения в начале процесса рендеринга страницы, а затем работает на узле. Если какие-либо сообщения генерируются во время визуализации узла, они попадают в стек сообщений, но они не будут отображаться в этой версии страницы, поскольку стек сообщений уже был обработан (и очищен) шаблоном страницы. Но это кажется неправильным - я хочу, чтобы эти сообщения появлялись как часть немедленного рендеринга страницы. Я также уверен, что D6 не ведет себя так - сообщения dsm () будут появляться сразу. Это не просто вопрос отладки; это также портит некоторый код проверки формы, где ошибка проверки не появляется на странице, созданной отправкой формы, именно по этой причине.

Или я так думаю, в любом случае. Я сумасшедший, или заблуждаюсь, или что-то еще? Было ли изменение в D7, которое привело к этому, казалось бы, новому поведению, или я просто запутался? Большое спасибо за любые разъяснения, которые могут быть там ...

1 Ответ

2 голосов
/ 11 февраля 2011

Куда именно вы добавляете свои вызовы dsm ()?

Сообщения о статусе тематизируются в http://api.drupal.org/api/drupal/includes--theme.inc/function/template_process_page/7 (Была ли страница template_preprocess_ в D6)

Все сообщения, которые добавляются послеэтот шаг, например, в файле page.tpl.php, отображается только на следующей странице.Понятия не имею о D5, но в D6 это было точно так же.

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

...