Загрузка определенной редакции узла для просмотра
Я пытаюсь загрузить определенную редакцию для просмотра конечным пользователем. Друпал 7.
У меня в .модуле есть следующее;
function mymodule_node_load($nodes, $types) {
if ($nodes[821]->vid != 5928) {
$nodes[821] = node_load(821, 5928);
}
}
function mymodule_node_view($node, $view_mode, $langcode) {
$node = node_load(821, 5928);
}
Если я dpm/var_dump узел после этого, он идеален и является правильной редакцией, но когда дело доходит до рендеринга, страница выбирает более старую редакцию. Таким образом, что-то происходит между этими функциями и отображением страницы. Что это? И как я могу это остановить?
Заранее большое спасибо оцененный.
РЕДАКТИРОВАТЬ Кто-нибудь знает, есть ли где-нибудь диаграмма порядка загрузки крючков? Это было бы очень удобно.
РЕДАКТИРОВАТЬ #2 Кажется, что даже node.tpl.php имеет правильную редакцию, но то, что отображается, не является правильной редакцией... См. Изображение (тело ['und'][0]['значение']!= то, что отображается.)
РЕДАКТИРОВАТЬ #3 Хорошо, поэтому я понял, как это сделать (код ниже), это ужасное решение, и из-за этого я собираюсь взглянуть на модуль верстака, потому что я думаю, что он может просто сделать то, что мне нужно. Спасибо за всю помощь!
/**
* Implements hook_node_view_alter().
*/
function mymodule_node_view_alter(&$build) {
$latest_revision = _get_latest_published_revision($build['#node']);
if ($latest_revision) {
$build['#node'] = node_load($build['#node']->nid, $latest_revision);
node_build_content($build['#node']);
$build['body'] = $build['#node']->content['body'];
}
}
2 answers
То, что говорит mongolito404, верно; hook_node_load()
и hook_node_view()
не считаются используемыми для изменения полей, уже загруженных объектом узла.
Как сообщается в документации, их следует использовать для добавления дополнительной информации.
Документация по этим крючкам содержит следующие предложения:
Этот крючок следует использовать только для добавления информации, которой нет в таблице изменений узла или узла, а не для замены информации, содержащейся в этих таблицах [...]. [hook_node_load_загрузка()]
Модуль может добавлять элементы в $node->содержимое перед визуализацией. [просмотр_нода крюка()]
Если вы действительно хотите показать другую версию узла на основе некоторых условий, вы можете реализовать hook_menu_alter(), чтобы изменить обратный вызов меню, который обрабатывает node/%node
, и заменить его своим собственным обратным вызовом меню, который проверяет, какая версия узла должна быть показана, и показывает ее.
Я думаю, что вы неправильно поняли использование и намерение hook_node_load
. Что вы делаете, так это меняете идентификатор редакции (vid) после полной загрузки узла. То же самое для hook_node_view()
, вы не должны заменять $node
там, но добавлять дополнительный контент для визуализации в $node->content
.