Dudas al programar menús en bloques

We encourage users to post events happening in the community to the community events group on https://www.drupal.org.
yemore's picture

Necesito una ayuda de alguien, porfis. Estoy empezando en esto de Drupal yo solita y estoy a punto de volverme loca porque en ocasiones no se qué hacer ante un problema y para colmo no soy muy buena con el Ingles.

Necesito hacer un grupo de menús, acomodados por bloques como la de la imagen 1.

Para empezar el menú no me crea los distintos submenús y colóquelo como lo coloque, llamándolo desde un bloque lo más que he logrado es que siga apareciendo en el menú de navegación como en la imagen 2.

//Implementación del menu
function provincia_menu(){
$items['provincia'] = array(
'title' => 'Gestionar Provincia',
'page callback' => 'provincia_gestionar',
'acces arguments' => array ('prov_gestionar'),
'access callback' => TRUE,
'type' => MENU_NORMAL_ITEM,
'weight' => -1,
);

$items['provincia/crear'] = array(
    'title' => 'Añadir',
    'page callback' => 'formulario_provincia_crear',
    'acces arguments' => array ('prov_gestionar'),
    'access callback' => TRUE,
    'type' => MENU_NORMAL_ITEM,
);

$items['provincia/listar'] = array(
    'title' => 'Listar',
    'page callback' => 'provincia_listar',
    'acces arguments' => array ('prov_gestionar'),
    'acces callback' => TRUE,
    'type' => MENU_NORMAL_ITEM,
);

return $items;

}

function provincia_gestionar (){
return t('Modulo para gestionar provincias');
}

function formulario_provincia_crear(){
$form = array();

$form['nom_prov'] = array(
    '#type' => 'textfield',
    '#title' => 'Nombre de la Provincia',
    '#size' => 50,
    '#maxlength' => 50,
    '#required' => TRUE,
);

$form['crea'] = array(
    '#type' => 'submit',
    '#value' => t('Crear'),
);

return $form;

}

function provincia_listar(){
return t('La lista que se mostrará');
}

Estoy a punto de querer evaporar la gotica de Drupal. Espero que me puedan ayudar y perdónenme si es que soy tan bruta como canuta :-D

AttachmentSize
Sin título-1.jpg47.95 KB
Sin título-2.jpg40.18 KB

Comments

En el .install de tu modulo

Ruby232's picture

En el .install de tu modulo define el hook install y crea el menú o los que quieras.
/**
* Implements of hook_install().
/
function provincia_install() {
$menu = array(
'menu_name' => 'provincia',
'title' => t('Provincia menu'),
'description' => t('este es el menu de provincias'),
);
menu_save($menu);
cache_clear_all('
', 'cache_menu', TRUE);
}

después a los item en el hook menu agregale 'menu_name' => 'provincia'

Y ya automáticamente debe salirte el bloque, aclaro que debes limpiar cache o desactivar y volver a activar el modulo para que coja los cambios, hay veces que con limpiar cache no es suficiente.

Mas información en http://stackoverflow.com/questions/8007777/drupal-hook-to-create-module-...

Gracias por la ayuda.

yemore's picture

Gracias por la ayuda. Conseguí ya que se viera el menú provincia, aparte del menú navegación. Lo desinstale e instale nuevamente para que pudiera crearse, como estaba trabajando en el hook_install. Pero me sigue arrastrando el error de que no me reconoce el link de listar, solo el de crear.

$items['provincia/crear'] = array(
    'title' => 'Añadir',
    'page callback' => 'formulario_provincia_crear',
    'acces arguments' => array ('prov_gestionar'),
    'access callback' => TRUE,
    'type' => MENU_NORMAL_ITEM,
    'menu_name' => 'provincia',
    'weight' => 1,
);

$items['provincia/listar'] = array(
    'title' => 'Listar',
    'page callback' => 'provincia_listar',
    'acces arguments' => array ('prov_gestionar'),
    'acces callback' => TRUE,
    'type' => MENU_NORMAL_ITEM,
    'menu_name' => 'provincia',
    'weight' => 2,
);

Puedes ser mas especifica

Ruby232's picture

Puedes ser mas especifica cuando dices 'no me reconoce el link de listar, solo el de crear.', que no puedes acceder o que te da error cuando intentas entrar o que no se ve en el menú cuando lo muestras??

Disculpa por no explicarme bien.

yemore's picture

Disculpa por no explicarme bien. Lo que sucede es que no se ve en el menú el link. No me da ningún error, simplemente no se muestra. El de añadir si y funciona perfecto mostrándome el formulario.

Resulta que en el listar

Ruby232's picture

Resulta que en el listar tienes el 'acces' con una sola (s) y es 'access'.

:-o

yemore's picture

:-o Tonta de mí, me lo comí y no lo vi.

Otra cosa en el 'access

Ruby232's picture

Otra cosa en el 'access callback' se especifica que función comprueba los permisos y 'access arguments' los argumentos que se le pasan a esa función, si la funcion defuelve TRUE se tiene acceso de otra forma no.
Hora si especificas a 'access callback' como TRUE siempre se tiene acceso, la función por defecto es 'user_access' que se le pasa un arreglo de permisos y comprueba si el usuario logeado tiene permisos, por eso es que si solo se van a verificar permisos no es necesario definir 'access callback', lo puede quitar.

Muchas gracias.

yemore's picture

Muchas gracias. Voy aclarándome con esto de Drupal poco a poco. Yo no soy muy buena estudiando sola y para colmo, casi toda bibliografía esta en ingles.

Otra preguntica

yemore's picture

Otra preguntica, si no es molestar mucho. ¿Qué debería hacer para crear ahí mismo un menú desplegable? Supongamos que en vez de crear y listar, en el menú Provincia se me visualizara ahora los link provincia y municipio, y al marcar cualquiera de ellas se desplegara un submenú con otras opciones como Añadir y Listar.

  • Provincia
    • Añadir
    • Listar
  • Municipio

He probado con los distintos tipos de menú y nada. Solo he conseguido que me abra una nueva página con las opciones de Añadir y Listar en forma de pestañas.

Intenta crear un nuevo

Ruby232's picture

Intenta crear un nuevo ítem

$items['provincia'] = array(
'title' => 'Provincia',
'acces arguments' => array ('prov_gestionar'),
'access callback' => TRUE,
'type' => MENU_NORMAL_ITEM,
'menu_name' => 'provincia',
'weight' => 1,
);

No he probado crear un item sin calback, pero si te puedo decir que para que un item sea hijo de otro en el hook_menu, solo hay que hacer esto.

$items['padre'] ....
$items['padre/hijo'] ....

Ya está

yemore's picture

El problema era que en el type de los hijos los tenía como MENU_CALLBACK. Decididamente no puedo seguir guiándome por el ejemplo que me dieron aquí en el trabajo, jajajajaja.

Argentina

Group organizers

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds:

Hot content this week