[Résolu]Problème hook_menu()

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Tout d'abord je vous présente les lignes qui ne fonctionnent pas:

<?php
$items
['admin/settings/ad-banner/%bid/delete'] = array(
    
'title' => 'Supprimer pub',
    
'page arguments' => array(3),
    
'access arguments' => array('administrer ad_banner'),
    
'page callback' => 'ad_banner_delete_view',
    
'type' => MENU_CALLBACK,
);
$items['admin/settings/ad-banner/%bid/edit'] = array(
    
'title' => 'Editer une pub',
    
'page arguments' => array(3),
    
'access arguments' => array('administrer ad_banner'),
    
'page callback' => 'ad_banner_edit_view',
    
'type' => MENU_CALLBACK,
);
?>

Mes fonctions "ad_banner_delete_view()" et "ad_banner_edit_view()" existe bien dans des fichiers externes (je fais des require_once au début de mon fichier .module). Pourtant pour mes autres menu du hook_menu() je n'ai aucun problème à accéder à mes fonctions qui sont dans des fichiers .inc externes.

Le but de mon opération :

Dans une page d'administration du module, j'ai un tableau avec le nom d'une bannière, la bannière et deux liens (Editer et Supprimer). Les liens pointent sur admin/settings/ad-banner/{id de la bannière dans la base}/(edit ou delete). Mais quand je clique sur ses liens je retourne à ma page d'administration par défaut.

Je ne comprend pas pourquoi il n'affiche pas le return de mes fonctions vers lesquelles pointent les items configurés ci-dessus. Avez-vous une réponse?

Merci d'avance.

Forum : 
Version de Drupal : 

Salut,
pour appeler mon fichier truc.fichier.inc, j'utilise :
'file' => 'truc.fichier.inc'.

Je ne sais pas comment est défini ta variable %bid, mais si elle n'existe pas à l'appel du menu il faut créer une fonction que tu nomes:
bid_to_arg() pour la définir.
Jim

Salut guitarman,

Oui je peut aussi utilisé l'attribut 'file', c'est pas faut.

Par contre je ne comprends pas trop ton histoire de fonction bid_to_arg(), pourrais-tu développer?
Je pensais que le %cequetuveux permettait de remplacer ce texte par un argument de ton choix (ici un id) et que l'attribut 'page arguments' => array(3) donnait l'indication de la position de cette variable dans l'URL. Mais j'ai sans doute tort car en fait j'en sais rien.

Salut après ce petit weekend voila la suite.

Je préfère utiliser l'attribut file parce que je pense que seuls les fichiers en cours d'utilisation sont chargés. Inutile d'encombrer la mémoire avec des trucs qui ne serviront pas. (Enfin je crois que ça marche comme ça si je me trompe ne pas hésiter à me le dire).

Sinon en ce qui concerne le %:(Merci à mouize et à nyl auster pour le complément d'info quand j'essayé de comprendre le fonctionnement de l()).

Tu peut effectivement utiliser le % n'importe ou dans ton url et Drupal décompose l'url grâce aux slashs pour en faire un array. En comptant à partir de zero dans l'array, tu determine sa position comme tu le dis.

Pour l'utiliser, plusieurs possibilités, tout dépend à quel moment tu passes ton argument.
1)

<?php
$bid
= 1; //Ton argument
$items['admin/settings/ad-banner/%/delete'] = array(
    
'title' => 'Supprimer pub',
    
'page arguments' => array(3 => $bid), // passer l'argument
    
'access arguments' => array('administrer ad_banner'),
    
'page callback' => 'ad_banner_delete_view',
    
'type' => MENU_CALLBACK,
);

function
ad_banner_delete_view($bid = NULL){// N'oublie pas de récupérer l'argument
...}
?>

2)

<?php
$items
['admin/settings/ad-banner/%bid/delete'] = array(
    
'title' => 'Supprimer pub',
    
'page arguments' => array(3), //
    
'access arguments' => array('administrer ad_banner'),
    
'page callback' => 'ad_banner_delete_view',
    
'type' => MENU_CALLBACK,
);

function
bid_to_arg($arg) {// Fonction implémenter dans Drupal pour passer des arguments
// set $bid;
return $bid;
}
function
ad_banner_delete_view($bid = NULL){// N'oublie pas de récupérer l'argument
...}
?>

3)
Tu n'est pas obligé de definir un 'page arguments' en passant comme ça par exemple:

<?php
$items
['admin/settings/ad-banner/%/delete'] = array(
    
'title' => 'Supprimer pub',
    
'access arguments' => array('administrer ad_banner'),
    
'page callback' => 'ad_banner_delete_view',
    
'type' => MENU_CALLBACK,
);

function
ad_banner_delete_view($bid = NULL){// N'oublie pas de récupérer l'argument
...}
?>

Appel du menu:

<?php
l
(t('Delete'),'admin/settings/ad-banner/'.$bid.'/delete');
?>

Ouf ! ! j'espère ne rien avoir oublié et ne pas m'être trompé.
Bon courage
Jim