it-swarm-es.com

Cargando una revisión de nodo específica para ver

Estoy intentando cargar una revisión específica para que la vea el usuario final. Drupal 7.

Tengo lo siguiente en mi .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);
}

Si dpm/var_dump el nodo después de hacer esto, es perfecto y es la revisión correcta, pero cuando se trata de renderizar, la página elige la revisión anterior. Entonces, algo está sucediendo entre estas funciones y la representación de la página. ¿Qué es? ¿Y cómo puedo detenerlo?

Gracias de antemano, muy apreciado.

EDITAR ¿Alguien sabe si hay una tabla de orden de carga de gancho en alguna parte? Eso sería muy útil.

EDIT # 2 Parece que incluso el node.tpl.php tiene la revisión correcta pero lo que se muestra no es la revisión correcta ... Ver imagen (body ['und'] [0] [' valor ']! = lo que se muestra.) enter image description here

EDITAR # Ok, entonces resolví cómo hacerlo (código a continuación) es una solución terrible y es por esto que voy a echar un vistazo al módulo Workbench porque creo que podría solo haz lo que necesito. ¡Gracias por toda la ayuda!

/**
 * 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

Lo que dice mongolito404 es correcto; hook_node_load() y hook_node_view() no se cree que se utilicen para alterar los campos ya cargados del objeto de nodo.

Al igual que los informes de documentación, deben usarse para agregar información adicional.
La documentación de esos ganchos contiene las siguientes oraciones:

Este enlace solo debe usarse para agregar información que no está en el nodo o en la tabla de revisiones del nodo, no para reemplazar información que está en estas tablas […]. [ hook_node_load () ]

El módulo puede agregar elementos a $ node-> content antes de renderizar. [ hook_node_view () ]

Si realmente desea mostrar una revisión diferente de un nodo basándose en algunas condiciones, puede implementar hook_menu_alter () para alterar la devolución de llamada del menú que maneja node/%node, y reemplácelo con su propia devolución de llamada de menú que verifica qué revisión del nodo debe mostrarse y lo muestra.

1
kiamlaluno

Creo que ha entendido mal el uso y la intención de hook_node_load . Lo que hace es cambiar el ID de revisión (vid) después de que el nodo se haya cargado por completo. Lo mismo para hook_node_view() , no se supone que reemplace $node Allí, pero agregue contenido adicional para representar en $node->content.

1
Pierre Buyle