Drupal 7.のモジュールで作業しています。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',
];
...そしてmymodule.infoへのconfigure行:
configure = admin/config/content/mymodule
MyModuleのConfigureリンクがadmin/modulesページに表示されますが、モジュールを- admin/configページ?それともadmin/configページはコアモジュールのみに予約されていますか?
Admin/configのページコールバックである system_admin_config_page() のコードを見ると、次の行が含まれていることがわかります。
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;
}
// ...
}
// ...
}
最初のクエリは、パスadmin/configに関連付けられたメニューのmenu_nameフィールドを選択します。これはデフォルトでは管理です。 2番目のクエリは、menu_nameの値が同じで、その親がadmin/configであるすべてのメニューを選択します。
メニューはmenu_nameに別の値を使用しているため、2番目のクエリから選択されず、admin/configページに表示されません。
このようにして、親アイテムのsystem.moduleコールバックを使用して、「admin/config/mymodule」にアクセスすると、Niceリストページが表示されます。
/**
* 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;
}
「menu_name」の部分を削除します。これは必要ありません。
$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;
これは私のために働いた。
$ itemsを返していないことに気づくまで、私は実際に30分ほど苦労していました...いつもそうしているようです。
私も設定ページでこれで問題がありました。構成ページへのリンクを追加することができた唯一の方法は、「admin/config/module」に親リンクを、「admin/config/module/manage」に子リンクを使用して、2つのメニュー項目を宣言することでした。 。
$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);
}