it-swarm-ko.tech

보기를 위해 특정 노드 개정로드

최종 사용자가 볼 수 있도록 특정 개정판을로드하려고합니다. Drupal 7.

내 .module에 다음이 있습니다.

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하면 완벽하고 올바른 개정이지만 렌더링에 관해서는 페이지가 이전 개정을 선택합니다. 따라서 이러한 기능과 페이지 렌더링 사이에 무언가가 발생합니다. 뭐야? 그리고 어떻게 멈출 수 있습니까?

미리 감사드립니다.

EDIT 후크로드 순서 차트가 어딘가에 있는지 아는 사람 있나요? 그것은 매우 편리합니다.

편집 # 2 node.tpl.php도 정확한 개정판을 가지고 있지만 표시되는 것은 정확한 개정판이 아닌 것 같습니다 ... 이미지보기 (body [ 'und'] [0] [ ' value ']! = 표시되는 내용.) enter image description here

편집 # 좋아, 그래서 나는 그것을하는 방법 (아래 코드) 그 끔찍한 해결책을 찾았고 그 때문에 Workbench 모듈을 살펴볼 것입니다. 내가 필요한 것을하세요. 모든 도움에 감사드립니다!

/**
 * 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'];
  }
}
3
Christian

Mongolito404가 말하는 것은 옳습니다. hook_node_load()hook_node_view()은 노드 개체에 이미로드 된 필드를 변경하는 데 사용되지 않습니다.

문서 보고서로 추가 정보를 추가하는 데 사용해야합니다.
이러한 후크에 대한 문서에는 다음 문장이 포함되어 있습니다.

이 후크는 노드 또는 노드 개정 테이블에없는 정보를 추가하는 데만 사용해야하며 이러한 테이블 […]에있는 정보를 바꾸는 데 사용해야합니다. [ hook_node_load () ]

모듈은 렌더링 전에 $ node-> content에 요소를 추가 할 수 있습니다. [ hook_node_view () ]

일부 조건에 따라 노드의 다른 개정판을 실제로 표시하려면 hook_menu_alter () 를 구현하여 node/%node를 처리하는 메뉴 콜백을 변경하고이를 자신의 것으로 대체 할 수 있습니다. 표시해야하는 노드의 개정을 확인하고 표시하는 메뉴 콜백입니다.

1
kiamlaluno

hook_node_load 의 사용법과 의도를 오해하신 것 같습니다. 노드가 완전히로드 된 후 개정 ID (vid)를 변경합니다. hook_node_view() 의 경우와 동일합니다. 여기서 $node를 대체해서는 안되지만 $node->content에 렌더링 할 콘텐츠를 추가하면됩니다.

1
Pierre Buyle