it-swarm-es.com

Usar node_view () para mostrar un nodo no imprime los elementos del menú local

Cuando se usa node_view () para mostrar un nodo (a través del retorno de una función que se llama en hook_menu ()), faltan las pestañas Ver/Editar habituales.

¿Es este el comportamiento esperado?

2
digital

Sí, esto se espera. La razón por la que están allí es porque la ruta de vista de un nodo está en node/[nid] y la edición/vista está en node/[nid]/edit. Si cambia la ruta de nodo predeterminada con hook_menu_alter, las pestañas de todos los nodos desaparecerían.

La razón por la que están allí es porque son de tipo, MENU_LOCAL_TASK, consulte la documentación en hook_menu , si necesita saber más.

3
googletorp

Es el comportamiento esperado. node_view () El propósito es construir la vista de nodo, no crear también las otras pestañas que normalmente ve en http://example.com/node/<nid>.

Si desea emular lo que se hizo en una página de nodo, debe definir la siguiente estructura de menú (he elegido page al azar):

/**
 * Implements hook_menu().
 */
function mymodule_menu() {
  $items['page/%node'] = array(
    'title callback' => 'node_page_title', 
    'title arguments' => array(1), 
    'page callback' => 'mymodule_page_view', 
    'page arguments' => array(1), 
    'access callback' => 'node_access', 
    'access arguments' => array('view', 1), 
    'type' => MENU_CALLBACK,
  );
  $items['page/%node/view'] = array(
    'title' => 'View', 
    'type' => MENU_DEFAULT_LOCAL_TASK, 
    'weight' => -10,
  );
  $items['page/%node/edit'] = array(
    'title' => 'Edit', 
    'page callback' => 'mymodule_page_edit', 
    'page arguments' => array(1), 
    'access callback' => 'node_access', 
    'access arguments' => array('update', 1), 
    'weight' => 1, 
    'file' => 'node.pages.inc',
    'file path' => drupal_get_path('module', 'node'), 
    'type' => MENU_LOCAL_TASK,
  );

  return $items;
}

mymodule_page_view() es la devolución de llamada de página que llamaría node_view().

3
kiamlaluno

Para mover todas las pestañas potenciales agregadas por los módulos a un nodo y hacerlas visibles en otra nueva ruta personalizada, modifique los enlaces dinámicamente cuando se reconstruya el enrutador de la caché del menú.

Pegue lo siguiente en un módulo:

    /**
 * Implementation of hook_menu_alter().
 */
function example_menu_alter(&$callbacks) { 
  foreach($callbacks as $path => $menu) {
    $callbacks[$path];

    if (strpos($path, 'node/%node/') !== FALSE) {
      $newpath = str_replace('node/%node/', 'customurl/%/%/%/%node/', $path);
      $callbacks[$newpath] = $menu;
      unset ($callbacks[$path]);
    }
  }
}
1
budda