passage de paramètres dans hook_menu

Catégories:

Bonjour,

j’ai un bloc qui affiche une liste de liens web que je doit pouvoir editer via un bouton editer en face de chaque lien.
le problème est que je ne récupère pas la valeur dans mon formulaire via le hook menu.(Page non trouvée en fait)

la partie dans le block_view :
[CODE]

$content .= '<li class='.$class.' >'.l($record->title, $record->query, array('html' => TRUE, 'attributes' => array('target' => '_blank')));
$content .= l('<img src="'.$path.'/images/icon-favoris-edit.png" alt="editer"/>','favoris/edit?fid='.$record->fid, array('attributes' => array('title' => 'Editer un favori.', 'class' => array("icon-edit")), 'html' => TRUE));
$content .= '</li>';

[/CODE]

Le hook_menu correspondant
[CODE]
function favoris_menu() {
$items[‘favoris/add’] = array(
‘title’ => ‘Ajouter un favori’,
‘page callback’ => ‘drupal_get_form’,
‘page arguments’ => array(‘favoris_add_favoris_form’),
‘access arguments’ => array(‘access content’),
‘type’ => MENU_CALLBACK,
) ;
$items[‘favoris/remove’] = array(
‘title’ => ‘Supprimer des favoris’,
‘page callback’ => ‘drupal_get_form’,
‘page arguments’ => array(‘favoris_remove_favoris_form’),
‘access arguments’ => array(‘access content’),
‘type’ => MENU_CALLBACK,
) ;
$items[‘favoris/edit’] = array(
‘title’ => ‘Editer des favoris’,
‘page callback’ => ‘drupal_get_form’,
‘page arguments’ => array(‘favoris_edit_favoris_form’),
‘access arguments’ => array(‘access content’),
‘type’ => MENU_CALLBACK,
) ;
return $items ;
}

[/CODE]
Le formulaire :
[CODE]
function favoris_edit_favoris_form($form, &$form_state, $fid) {
global $user ;
if (isset($fid)) {

$favoris = load_favoris($fid);
$form['fid'] = array(
'#type' => 'hidden',
'#value' => $fid,
);
$query = db_query("SELECT title, query FROM {favorites} WHERE fid = ".$fid);

}

$form[‘titre’] = array(
‘#type’ => ‘textfield’,
‘#title’ => t(‘Title’),
‘#size’ => 30,
‘#default_value’ => $query->title ,
‘#required’ => TRUE
) ;

$form[‘url’] = array(
‘#type’ => ‘textfield’,
‘#title’ => t(‘URL’),
‘#size’ => 100,
‘#required’ => TRUE,
‘#default_value’ => $query->query ,
) ;

$form[‘submit’] = array(
‘#type’ => ‘submit’,
‘#value’ => t(«Valider la modification»),
‘#submit’ => array(‘favoris_edit_favoris_form_submit’),
) ;

return $form ;
}
[/CODE]

merci pour votre aide

#

Nota : j’ai essayé aussi le % dans favoris/edit avec arguments dans page arguments ça ne marche pas non plus

#

Est-ce que le callback est accessible directement ? Est-ce que quelque chose répond quand tu vas directement sur /favoris/edit ?

Par ailleurs, le code que tu as posté est difficile à lire …

#

Bonjour,

C’est surement plus une question de cache.

Dans l’admin va sur la liste des menus (ce qui permettra de régénérer le cache des menus ) et regarde si ça fonctionne après.

Cordialement,
AyA

Ps : pour un soucis de lecture :

$content .= '<li class='.$class.' >'.l($record->title, $record->query, array('html' => TRUE, 'attributes' => array('target' => '_blank')));
$content .= l('<img src="'.$path.'/images/icon-favoris-edit.png" alt="editer"/>','favoris/edit?fid='.$record->fid, array('attributes' => array('title' => 'Editer un favori.', 'class' => array("icon-edit")), 'html' => TRUE));
$content .= '</li>';

Le hook_menu correspondant

function favoris_menu() {
$items[‘favoris/add’] = array(
‘title’ => ‘Ajouter un favori’,
‘page callback’ => ‘drupal_get_form’,
‘page arguments’ => array(‘favoris_add_favoris_form’),
‘access arguments’ => array(‘access content’),
‘type’ => MENU_CALLBACK,
) ;
$items[‘favoris/remove’] = array(
‘title’ => ‘Supprimer des favoris’,
‘page callback’ => ‘drupal_get_form’,
‘page arguments’ => array(‘favoris_remove_favoris_form’),
‘access arguments’ => array(‘access content’),
‘type’ => MENU_CALLBACK,
) ;
$items[‘favoris/edit’] = array(
‘title’ => ‘Editer des favoris’,
‘page callback’ => ‘drupal_get_form’,
‘page arguments’ => array(‘favoris_edit_favoris_form’),
‘access arguments’ => array(‘access content’),
‘type’ => MENU_CALLBACK,
) ;
return $items ;
}

Le formulaire :

function favoris_edit_favoris_form($form, &$form_state, $fid) {
global $user ;
if (isset($fid)) {

$favoris = load_favoris($fid);
$form['fid'] = array(
'#type' => 'hidden',
'#value' => $fid,
);
$query = db_query("SELECT title, query FROM {favorites} WHERE fid = ".$fid);

}

$form[‘titre’] = array(
‘#type’ => ‘textfield’,
‘#title’ => t(‘Title’),
‘#size’ => 30,
‘#default_value’ => $query->title ,
‘#required’ => TRUE
) ;

$form[‘url’] = array(
‘#type’ => ‘textfield’,
‘#title’ => t(‘URL’),
‘#size’ => 100,
‘#required’ => TRUE,
‘#default_value’ => $query->query ,
) ;

$form[‘submit’] = array(
‘#type’ => ‘submit’,
‘#value’ => t(«Valider la modification»),
‘#submit’ => array(‘favoris_edit_favoris_form_submit’),
) ;

return $form ;
}

#

bon finalement la solution qui marche est :

$items[‘favoris/edit/%’] = array(
‘title’ => ‘Editer des favoris’,
‘page callback’ => ‘drupal_get_form’,
‘page arguments’ => array(‘favoris_edit_favoris_form’,2),
‘access arguments’ => array(‘access content’),
‘type’ => MENU_CALLBACK,
) ;

car avec 1 dans page arguments je récupérais «edit» et pas fid et avec 3 rien du tout :)

Syndiquer le contenu