Je construirais un écran de confirmation. J'ai donc initialisé le chemin dans le hook_menu
comme il se doit mais pour une raison quelconque, l'argument $node
n'est pas envoyé avec la fonction ... Qu'est-ce que je fais mal?
C'est mon hook_menu
:
$items['node/%/revisions/%/offline'] = array(
'title' => 'Offline,
'description' => 'Confirm the action "Fiche offline".',
'page callback' => 'drupal_get_form',
'page arguments' => array('_mymodule_confirm_offline'),
'type' => MENU_LOCAL_TASK,
'weight' => -4,
);
return $items;
Et voici ma fonction:
function _redactie_omgeving_confirm_offline($form, $form_state, $node) {
$question = t('Take fiche offline. ');
return confirm_form($form,
$question,
'node/7', t('You\'re about to depublish this fiche. <br />Are you sure you want to depublish this fiche?'),
t('Yes'), t('Cancel'));
}
Mais le $node
- la variable de ma fonction reste vide ... Que dois-je faire pour remplir cette variable?
Votre rappel de page est drupal_get_form
, Et votre argument de page est _mymodule_confirm_offline
, Donc l'appel Drupal fait est drupal_get_form('_mymodule_confirm_offline');
, ce qui ne fait pas du tout semble être ce que vous voulez faire.
Vous avez plutôt besoin d'un rappel personnalisé.
Dans hook_menu:
'page callback' => '_confirmation_form_page',
'page arguments' => array(1, 3),
Et alors
function _confirmation_form_page($node) {
$question = t('Take fiche offline. ');
return confirm_form($form, $question, 'node/' . $node->nid, t('You\'re about to depublish this fiche. <br />Are you sure you want to depublish this fiche?'), t('Yes'), t('Cancel'));
}
Pour "charger automatiquement" un objet à partir de l'url, il doit être nommé , sinon Drupal can ne sais pas comment effectuer le chargement. Sur une URL comme "node /% nid", l'argument est nommé "nid". En réalité, l'argument serait généralement appelé% node, mais je voulais distinguer les parties. Drupal recherchera alors une fonction appelée load_nid, transmettra le numéro à partir de l'URL et cette fonction est chargée de renvoyer l'objet entièrement chargé. Core a une fonction "load_node", donc les arguments nommés% node seront être chargé automatiquement sans autre effort de votre part.
Pour ajouter le chargement automatique à votre rappel, vous devez
$items['node/%node/revisions/%/offline'] = array(
Cependant, cela ne vous donnera toujours que le bon nœud, pas la bonne révision. node_load () supporte un deuxième argument, $vid
, que nous devons utiliser pour obtenir la bonne révision. Dire Drupal pour transmettre des arguments supplémentaires est utilisé avec la clé load arguments
, Et nous devons utiliser le quatrième argument de l'url node/%node/revision/%/offline
Pour cela.
Donc en conclusion, l'implémentation hook_menu devient:
$items['node/%node/revisions/%/offline'] = array(
'title' => 'Offline',
'description' => 'Confirm the action "Fiche offline".',
'page callback' => '_confirmation_form_page',
'page arguments' => array(1),
'load arguments' => array(3),
);
return $items;
hook_menu n'obtient pas $ node object comme paramètre. Node dans 'node /%/revisions /%/offline' est juste un chemin, ce n'est pas un nœud.