problemas de rutas de formularios. No se si esto es un bug, o simplemente que drupal es así.

Events happening in the community are now at Drupal community events on www.drupal.org.
oskar_calvo's picture

Buenas la cosa.
Tengo el módulo migrar, que tiene un hook menu (migrar) que me lleva a una página que explica los pasos de la migración.
Tengo otro módulo llamado categorias, que tiene un hook menu (migrar/categorias), que me lleva a un form.

Por algún motivo el formulario de migrar/categorias no se ejecuta validate y/o submit, en cuanto le cambio la ruta del hook menu a otra (por ejemplo categorias) se ejecuta todo correctamente..

No se si me he explicado correctamente, y no se porque %$·%·"$% ocurre esto.

module a

<?php

/<strong>
*
Implementation hook_menu
*/
function
profesnet_menu() {

 
$items = array();

 
$items['profesnet'] = array(
   
'title'             => 'Profesnet migration',
   
'page callback'     => '_profesnet_start_migration',
   
'access callback'   => 'user_access',
   
'access arguments'  => array('migrate_profesnet'),
   
'type'              => MENU_NORMAL_ITEM,
   
'file'              => 'profesnet.module',     // don't forget to add the file and path
   
'file path'         => drupal_get_path('profesnet', 'profesnet.module'),
   
//'menu'              => 'profestnet-migration',
   
'weight'            => 0,
  );

  return
$items;
}


/</
strong>
* Function
start migration
* description: una página con la explicación y los enlaces para lanzar los diferentes procesos de migracion
*/
function
_profesnet_start_migration() {
 
$output = t('Esta es la página de reparto de cartas');

 
$limit = 10;

 
db_set_active('dbo');
 
$options['target'] = 'dbo';
 
$contar = db_select('categoria','c',$options)
    ->
fields('c',array('ID_CATEGORIA'))
   
//->range($range,$limit)
   
->execute();
 
$cantidad = $contar->rowCount();
 
$output .= '<p>Cantidad ' . $cantidad . '<p>';
 
db_set_active('default');

 
$iteracion = round($cantidad/$limit,0,PHP_ROUND_HALF_UP);
 
//dpm($iteracion);

 
for($i = 0; $i < $limit; $i++) {
   
$rango = ($iteracion * $i) + $i;
   
//dpm($rango);
   
db_set_active('dbo');
   
$result = db_select('categoria','c')
      ->
fields('c',array('ID_CATEGORIA','NOMBRE','ID_PADRE'))
      ->
orderBy('c.ID_CATEGORIA','ASC')
      ->
range($rango,$iteracion)
      ->
execute();
   
db_set_active('default');
   
$a = 0;
 
// dpm($result);
   
foreach ($result as $row){
   
//  dpm($i . ' ' . $a);
     
$a++;


    }
  }
 
//db_set_active('default'); // We need to call the main (drupal) db back


 
return $output;
}

?>

segundo código

<?php

/<strong>
* Implements
hook_menu
*/
function
categorias_menu() {

 
$items = array();

 
$items['profesnet/categorias'] = array(
   
'title'             =>  'Migrate categories',
   
'page callback'     =>  'drupal_get_form',
   
'page arguments'    =>  array('_categorias_migrate_elements'),
   
'access callback'   =>  TRUE, //'user_access',
    //'access arguments'  =>  array('migrate_categories'),
   
'type'              =>  MENU_LOCAL_TASK,
   
'file'              =>  'categorias.module',
   
'file path'         =>  drupal_get_path('categorias', 'categorias.module'),
   
//'menu_name'         =>  'profestnet-migration',
   
'weight'            => 1,
  );

  return
$items;
}


/</
strong>
*
*/
function
_categorias_migrate_elements($form, &$form_state = array()) {

 
$form = array();

 
$form['texto'] = array(
   
'#type'     =>  'markup',
   
'#markup'   =>  '<p>Este es el texto de aviso para el proceso del formulario</p>',
  );

 
$form['opcion'] = array(
   
'#type'     =>  'radios',
   
'#title'    =>  t('Vas ha migrar las categorias.'),
   
'#options'  =>  array(0 => 'Migrar hijos'),
   
'#default_value'  => 0,
   
'#required' =>  TRUE,
  );

 
$form['boton'] = array(
   
'#type'     =>  'submit',
   
'#value'    =>  'Go'
 
);

  return
$form;
}

/**
*
*/
function _categorias_migrate_elements_submit($form, $form_state) {

// no se ejecuta este dpm.
dpm($form_state);


}
?>

Comments

¿Conflicto?

tunic's picture

Si decalras un hook menu en la ruta ejemplo todas las subrutas responderán con el callback que definas.

Es decir, que ejemplo/foo, ejemplo/foo/bar y ejemplo/bar responderían todas con el callback que hayas definido para ejemplo.

Sin embargo, si has definido ejemplo y ejemplo/foo, entonces debería al acceder a ejemplo/foo debería responder el callback correcto. Esto funciona correctamente AL MENOS cuando se definen ambos callbacks en el mismo módulo. Quizá tu problema sea que lo has definido en diferentes módulos y eso afecta. Prueba a meter ambos en el mismo módulo, aunque solo sea para hacer la prueba.

Otra cosas que puedes hacer es usar menu_get_item con las dos rutas a ver si ves algo interesante.

Tunic. Pues debe ser, porque

oskar_calvo's picture

Tunic.

Pues debe ser, porque lo que he hecho ha sido moverlo todo a tabs, y dentro de admin, y la cosa ni gruñe, ni da problemas.

Será algo a tener en cuenta y mirar para el futuro y evitar disgustos y horas mirando porque algo no funciona.

Oskar

Madrid

Group organizers

Group notifications

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