Drupal 7: ¿cómo agregar un menú en el área principal de administración?
Hola. Hoy les muestro rápidamente como crear nuevas áreas en la zona de administración. A mí en particular se me hace especialmente útil para ciertos proyectos en los cuales tengo muchos módulos con muchas configuraciones y pantallas de administración. Al principio no estaba mal usar el área de administración de drupal, pero pronto mas que tarde se me hizo un quilombo (algo inmanejable) porque no solo estaban mis implementaciones propias, sino las de modulos de terceros.. En fin, que necesitaba un área propia en la que organizar mis cosas.
Sin más dilación, para definir un menú en el área de administración tenemos que definir un menú por medio del “hook_menu();” pero dotándolo de un par de cosas fuera de lo “normal”:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
< ?php $items['admin/propio'] = array( 'title' => 'Propio', 'description' => 'Zona de implementaciones propias.', //Primer cosa extra. esa funcion es la que recoje todas //las definiciones para el area de administracion 'page callback' => 'system_admin_menu_block_page', //No queremos que acceda todo el mundo, asi que lo //restringimos a quien pueda acceder al area de administracion 'access arguments' => array('access administration pages'), //system_admin_menu_block_page() es una funcion externa por //lo que necesitamos decirle al menu donde está para poder usarla. 'file' => 'system.admin.inc', 'file path' => drupal_get_path('module', 'system'), //Dashboard es el menu mas liviano dentro del core. le ganamos el lugar 'weight' => -16, ); |
Lo anterior lo he puesto en un modulo de pruebas llamado “commons”, y quedaria asi:
1 2 3 4 5 6 7 8 9 10 11 |
< ?php /** * Implements hook_menu(). */ function commons_menu() { $items['admin/propio'] = array( 'title' => 'Propio', 'description' => 'Zona de implementaciones propias.', 'page callback' => 'system_admin_menu_block_page', 'access arguments' => array('access administration pages'), 'file' => 'system.admin.inc', 'file path' => drupal_get_path('module', 'system'), 'weight' => -16, ); return $items; } |
El resultado de lo anterior seria el siguiente:
Ya tenemos area de administración. vamos a poner algo dentro:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
< ?php /** * Implements hook_menu(). */ function commons_menu() { $items['admin/propio'] = array( 'title' => 'Propio', 'description' => 'Zona de implementaciones propias.', 'page callback' => 'system_admin_menu_block_page', 'access arguments' => array('access administration pages'), 'file' => 'system.admin.inc', 'file path' => drupal_get_path('module', 'system'), 'weight' => -16, ); $items['admin/propio/prueba'] = array( 'title' => 'Prueba', 'description' => 'Esta es una prueba de la definicion de menues internos para <b>admin/propio</b>', 'page callback' => 'prueba', 'access arguments' => array('access administration pages'), ); return $items; } function prueba() { return "La vida es bella!"; } |
Genial, ya tenemos algo dentro. No es de lo más útil pero dado este ejemplo ya sabrán ustedes que poner en lugar de un comentario tonto XD
El resultado es el siguiente:
PD antes que me pregunten porque no se ve reflejado en Drupal. BORREN EL CACHE (en admin/config/development/performance).
Listo, que lo disfruten.