2010-05-13 19 views

Respuesta

3

El Menu Node module expone una API para hacer esto. Puede leer la documentación (Doxygen) en el código. Creo que la funcionalidad que necesita es proporcionada por el método de menu_node_get_links($nid, $router = FALSE):

/** 
* Get the relevant menu links for a node. 
* @param $nid 
* The node id. 
* @param $router 
* Boolean flag indicating whether to attach the menu router item to the $item object. 
* If set to TRUE, the router will be set as $item->menu_router. 
* @return 
* An array of complete menu_link objects or an empy array on failure. 
*/ 

se devuelve una matriz asociativa de mlid => menu object. Es probable que sólo necesita el primero por lo que podría parecerse a algo como esto:

$arr = menu_node_get_links(123); 
list($mlid) = array_keys($arr); 

De lo contrario, se puede probar la sugerencia en un thread in the Drupal Forums:

Uso node/[nid] como el argumento de la ruta $ para:

function _get_mlid($path) { 
    $mlid = null; 
    $tree = menu_tree_all_data('primary-links'); 
    foreach($tree as $item) { 
    if ($item['link']['link_path'] == $path) { 
     $mlid = $item['link']['mlid']; 
     break; 
    } 
    } 
    return $mlid; 
} 
+0

parece que lo hará, pero creo que es más fácil sql ... Gracias, sin embargo. – sprugman

+0

No hay problema. De hecho SQL podría ser más fácil. :) – sirhc

6

si el árbol del menú tiene múltiples niveles sql parece una mejor opción. una muestra para Drupal 7 se da abajo donde ruta es algo así como 'nodo/x'

function _get_mlid($path, $menu_name) { 

$mlid = db_select('menu_links' , 'ml') 
->condition('ml.link_path' , $path) 
->condition('ml.menu_name',$menu_name) 
->fields('ml' , array('mlid')) 
->execute() 
->fetchField(); 
return $mlid; 
} 
+1

Brillante, gracias. –

Cuestiones relacionadas