crear pestañas con hook_menu () para el módulo personalizado

14

Desde hace dos horas estoy tratando de crear pestañas en mi backend de módulos personalizados.

He intentado varias sugerencias pero no pude hacer que ninguna de ellas funcionara.

Este es mi hook_menu actual ():

    function social_links_menu() {
  $items['admin/config/system/social_links'] = array(
    'title' => 'social_links',
    'description' => 'Configure to fit clients needs',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('social_links_settings'),
    'access arguments' => array('administer site configuration'),
    'file' => 'social_links.admin.inc',
  );

  return $items;
}

Simplemente quiero dos pestañas llamadas: 'tab1' y 'tab2'.

¿Alguien puede darme un ejemplo de trabajo? Esto debería ser realmente simple, pero ahora parece imposible

mhmdrupal
fuente

Respuestas:

44

Debe definir una ruta 'raíz' que sea un elemento de menú normal y luego agregar otro elemento para cada una de las pestañas. El primero de ellos heredará las propiedades del elemento raíz, y el segundo definirá sus propias devoluciones de llamada.

Combinado con las constantes MENU_LOCAL_TASKy MENU_DEFAULT_LOCAL_TASKtipo, debe obtener las pestañas que espera:

function social_links_menu() {
  $items['admin/config/system/social_links'] = array(
    'title' => 'social_links',
    'description' => 'Configure to fit clients needs',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('social_links_settings'),
    'access arguments' => array('administer site configuration'),
    'file' => 'social_links.admin.inc',
  );

  $items['admin/config/system/social_links/tab1'] = array(
    'title' => 'Tab 1',
    'type' => MENU_DEFAULT_LOCAL_TASK,
    'weight' => -10
  );

  $items['admin/config/system/social_links/tab2'] = array(
    'title' => 'Tab 2',
    'type' => MENU_LOCAL_TASK,
    'page callback' => 'some_callback',
    'access arguments' => array('some permission')
  );

  return $items;
}
Clive
fuente
2
gracias por la lección clive! Buena explicación. Me acabas de salvar unas horas :)
mhmdrupal