Je travaille sur un module dans Drupal 7. J'ai ajouté une implémentation hook_menu:
$items['admin/config/content/mymodule'] = [
'title' => 'MyModule',
'description' => 'Configure MyModule settings.',
'page callback' => 'mymodule_get_form',
'page arguments' => ['mymodule_admin_settings'],
'file' => 'mymodule.admin.inc',
'access arguments' => ['administer mymodule'],
'menu_name' => 'mymodule',
];
... et une ligne de configuration vers mymodule.info:
configure = admin/config/content/mymodule
Un lien Configurer pour MyModule apparaît maintenant sur la page admin/modules, mais comment puis-je également afficher le module sur la - admin/config page? Ou la page admin/config est-elle réservée aux seuls modules principaux?
En regardant le code de system_admin_config_page () , qui est le rappel de page pour admin/config, je remarque qu'il contient les lignes suivantes:
if ($admin = db_query("SELECT menu_name, mlid FROM {menu_links} WHERE link_path = 'admin/config' AND module = 'system'")->fetchAssoc()) {
$result = db_query("
SELECT m.*, ml.*
FROM {menu_links} ml
INNER JOIN {menu_router} m ON ml.router_path = m.path
WHERE ml.link_path != 'admin/help' AND menu_name = :menu_name AND ml.plid = :mlid AND hidden = 0", $admin, array('fetch' => PDO::FETCH_ASSOC));
foreach ($result as $item) {
_menu_link_translate($item);
if (!$item['access']) {
continue;
}
// ...
}
// ...
}
La première requête sélectionne le champ nom_menu pour le menu associé au chemin admin/config, qui par défaut est la gestion; la deuxième requête sélectionne tous les menus qui ont la même valeur pour nom_menu et dont le parent est admin/config.
Comme votre menu utilise une valeur différente pour nom_menu, il n'est pas sélectionné dans la deuxième requête et il n'est pas affiché dans la page admin/config.
Si vous le faites comme ça, avec le rappel system.module pour l'élément parent, vous obtenez la page de liste Nice lorsque vous visitez 'admin/config/mymodule'
/**
* Implements hook_menu().
*/
function MYMODULE_menu() {
$items = [];
$items['admin/config/mymodule'] = [
'title' => 'My configuration section',
'description' => 'This is the parent item',
'position' => 'left',
'weight' => -100,
'page callback' => 'system_admin_menu_block_page',
'access arguments' => ['administer site configuration'],
'file' => 'system.admin.inc',
'file path' => drupal_get_path('module', 'system'),
];
// Need at least one child item before your section will appear.
$items['admin/config/mymodule/item'] = [
'title' => 'First item',
'description' => 'This is the first child item in the section',
'page callback' => 'mymodule_item_callback',
'access arguments' => ['administer site configuration'],
];
return $items;
}
Supprimez la partie 'nom_menu', qui n'est pas nécessaire.
$items['admin/config/user-interface/mymodule'] = array(
'title' => 'My Module',
'description' => 'description',
'page callback' => 'drupal_get_form',
'page arguments' => array('my_admin_function'),
'access arguments' => array('administer site configuration'),
);
$items['admin/config/user-interface/mymodule/manage'] = array(
'title' => 'My Module',
'type' => MENU_DEFAULT_LOCAL_TASK,
'description' => 'description',
'weight' => -10,
);
return $items;
cela a fonctionné pour moi.
.
J'ai également eu des problèmes avec cela sur la page de configuration. La seule façon dont j'ai pu ajouter le lien vers la page de configuration était de déclarer deux éléments de menu comme ça, avec le lien parent dans 'admin/config/module' et un lien enfant dans 'admin/config/module/manage' .
$items['admin/config/whh-maps'] = array(
'title' => 'World Hiphop configuration',
'description' => 'Allows administrators to configure maps for WHH.',
'position' => 'left',
'weight' => -30,
'page callback' => 'drupal_get_form',
'page arguments' => array('whh_maps_form'),
'access arguments' => array('administer whh maps'),
'file' => 'whh_maps.admin.inc',
);
$items['admin/config/whh-maps/manage'] = array(
'title' => 'Manage countries',
'description' => 'Allows admins to edit country information',
'page callback' => 'drupal_get_form',
'page arguments' => array('whh_maps_form'),
'access arguments' => array('administer whh maps'),
'file' => 'whh_maps.admin.inc',
'weight' => -10,
);
/**
* Implements hook_menu().
*/
function notification_menu() {
$items = [];
$items['admin/customize'] = [
'title' => 'Send Comment notifications',
'discription' => 'Admin will send notification to user about updates',
'type' => MENU_NORMAL_ITEM,
'page callback' => 'drupal_get_form',
'page arguments' => ['notification_form'],
'access arguments' => ['access adminstration page'],
'access callback' => TRUE,
];
return $items;
}
/**
* Custom form.
*/
function notification_form($form, &$form_state) {
$form['send_mail_to'] = [
'#title' => 'Send Mail To',
'#discription' => 'To whom you want to send form',
'#size' => 40,
'#type' => 'textfield',
'#required' => TRUE,
'#default_value' => variable_get('send_mail_to'),
];
//here the admin can wite subject for the mail.
$form['mail_subject'] = [
'#title' => 'Subject',
'#discription' => 'the purpous of this mail',
'#type' => 'textfield',
'#size' => 40,
'#maxlenght' => 120,
'#required' => TRUE,
'#default_value' => variable_get('mail_subject'),
];
$form['mail_body'] = [
'#title' => 'Body',
'#discription' => 'the body of your mail.',
'#type' => 'textarea',
'#row' => 10,
'#columns' => 40,
'#required' => TRUE,
'#default_value' => variable_get('mail_body'),
];
$form['mail_bcc'] = [
'#title' => 'BCC this mail to all',
'#type' => 'checkbox',
];
return system_settings_form($form);
}