أنا أعمل على وحدة في 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 = admin/config/content/mymodule
يظهر رابط تكوين لـ MyModule الآن صفحة admin/modules ، ولكن كيف يمكنني أيضًا إدراج الوحدة النمطية في - admin/config صفحة؟ أم هل الصفحة admin/config مخصصة للوحدات الأساسية فقط؟
بالنظر إلى كود system_admin_config_page () ، وهو استدعاء الصفحة لـ admin/config ، ألاحظ أنه يحتوي على الأسطر التالية:
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 ، وأصلها هو admin/config.
نظرًا لأن القائمة الخاصة بك تستخدم قيمة مختلفة لقائمة menu_name ، فلا يتم تحديدها من الاستعلام الثاني ، ولا تظهر في صفحة المسؤول/التكوين.
إذا قمت بذلك على هذا النحو ، مع استدعاء system.module للعنصر الرئيسي ، تحصل على صفحة قائمة نيس عندما تزور "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;
}
قم بإزالة جزء "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;
عملت هذا بالنسبة لي.
كنت أصارع منذ حوالي نصف ساعة حتى أدركت أنني لن أعيد عناصر $ ... يبدو أنني دائمًا أفعل ذلك.
واجهت مشكلة في هذا أيضًا في صفحة التكوين. كانت الطريقة الوحيدة التي تمكنت من إضافة الرابط إلى صفحة التكوين هي الإعلان عن عنصري قائمة مثل ذلك ، باستخدام الرابط الرئيسي في "admin/config/module" ورابط فرعي في "admin/config/module/manager" .
$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);
}