it-swarm-es.com

Obtener el título de la pestaña activa

¿Es posible obtener el título de la pestaña secundaria actualmente activa?

Me gustaría reutilizar el título de esta pestaña más adelante en el contenido. Encontré menu_local_tasks(1) que se acerca, pero esto devuelve una salida temática completa. Solo quiero el título como lo he definido en hook_menu().

Editar:
Mi hook_menu estructura (recortada solo a los elementos de, sin incluir elementos hermanos):

$items['events/%node'] = array(
    'title' => 'Events',
    'page callback' => 'page_events',
    'page arguments' => array(1),
    'type' => MENU_NORMAL_ITEM,
);

$items['events/%node/stats'] = array(
  'title' => 'Stats',
  'access callback' => TRUE,
  'page callback' => 'page_stats',
  'page arguments' => array(1),
  'type' => MENU_LOCAL_TASK,
  'weight' => 3,
);

$items['events/%node/stats/year'] = array(
  'title' => 'This Year',
  'access callback' => TRUE,
  'type' => MENU_DEFAULT_LOCAL_TASK,
  'weight' => 0,
);

$items['events/%node/stats/lastyear'] = array(
  'title' => 'Last Year',
  'access callback' => TRUE,
  'page callback' => 'page_stats',
  'page arguments' => array(1),
  'type' => MENU_LOCAL_TASK,
  'weight' => 1,
); 

Por ejemplo, cuando en la página events/%node/stats/year, Me gustaría conseguir 'This Year'.

3
ack

menu_get_active_title () debe ser la función que está buscando.

function menu_get_active_title() {
  $active_trail = menu_get_active_trail();

  foreach (array_reverse($active_trail) as $item) {
    if (!(bool) ($item['type'] & MENU_IS_LOCAL_TASK)) {
      return $item['title'];
    }
  }
}

Debería funcionar para menús para los que el tipo de menú contiene la bandera MENU_LOCAL_TASK (Que incluye también el tipo de menú MENU_DEFAULT_LOCAL_TASK).

La función también está definida en Drupal 7.

Actualización: Noté que para menús como/nodo /% nodo/vista, menu_get_active_title() devuelve el título de/nodo /% nodo . El siguiente código debería devolver el título correcto también en esos casos, incluso en el caso de que el título sea dado por una devolución de llamada de título. Acabo de probar en Drupal 7; en realidad no tengo Drupal 6 en el sitio de prueba que utilizo.

$item = end(menu_get_active_trail());

if (!empty($item['title_callback'])) {
  $args = array();
  if (!empty($item['title_arguments'])) {
    foreach ($item['title_arguments'] as $value) {
      if (is_int($value)) {
        // Get the value from the menu item map.
        if (!empty($item['map'])) {
          $args[] = $item['map'][$value];
        }
      }
      else {
        $args[] = $value;
      }
    }
  }

  $title = call_user_func_array($item['title_callback'], $args);
} 
 else {
   $title = $item['title'];
 }
4
kiamlaluno

Debería poder hacer esto con drupal_get_headers () , y luego analizar los resultados.

1
greggles

Pruebe menu_get_item ($ ruta = NULL, $ router_item = NULL) http://api.drupal.org/api/drupal/includes --menu.inc/function/menu_get_item/6 . Debería poder pasar el valor de la ruta, lo que dará como resultado una matriz devuelta que contiene detalles de la entrada de la pestaña del menú, incluido el valor del 'título'.

Utilice $ _GET ['q'] para obtener la ruta actual.

1
DeeZone