Làm cách nào để thêm mô-đun vào trang admin / config?


27

Tôi đang làm việc trên một mô-đun trong Drupal 7. Tôi đã thêm một triển khai 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',
];

... và một dòng cấu hình để mymodule.info:

configure = admin/config/content/mymodule

Một Configure liên kết cho MyModule bây giờ xuất hiện các admin / modules trang, nhưng làm thế nào tôi có thể cũng có các module niêm yết trên Sở admin / cấu hình trang? Hoặc là trang quản trị / cấu hình chỉ dành riêng cho các mô-đun cốt lõi?

Câu trả lời:


9

Nhìn vào mã của system_admin_config_page () , đó là trang gọi lại cho admin / config, tôi nhận thấy nó chứa các dòng sau:

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;
    }
    // ...
  }
  // ...
}

Truy vấn đầu tiên chọn trường menu_name cho menu được liên kết với đường dẫn admin / config, theo mặc định là quản lý; truy vấn thứ hai chọn tất cả các menu có cùng giá trị cho menu_name và có cha mẹ là admin / config.

Vì menu của bạn sử dụng một giá trị khác cho menu_name, nó không được chọn từ truy vấn thứ hai và nó không được hiển thị trong trang admin / config.


24

Nếu bạn làm như vậy, với hàm gọi lại system.module cho mục cha, bạn sẽ có trang danh sách đẹp khi bạn truy cập '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;
}

3
Đừng quên rằng bạn sẽ cần phải vô hiệu hóa và kích hoạt mô-đun để các thay đổi trong menu có hiệu lực.
jevon

5
@jevon: xóa bộ nhớ cache (menu) là đủ để xem các thay đổi.
Bart

bộ nhớ cache của menu có thể được xóa bằng cách sử dụng drush tại dòng lệnh bằng cách sử dụng drush cc menu- ref: drupal.stackexchange.com/a/58621/1082
trị liệu

3

Xóa phần 'menu_name', điều đó là không cần thiết.


1

Tôi đã gặp rắc rối với điều này quá trên trang cấu hình. Cách duy nhất tôi có thể thêm liên kết vào trang cấu hình là khai báo hai mục menu như vậy, với liên kết chính tại 'admin / config / module' và liên kết con tại '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,
  ); 

1
$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;

Điều này làm việc cho tôi.
Tôi đã thực sự vật lộn trong khoảng nửa giờ cho đến khi tôi nhận ra rằng tôi sẽ không trả lại các mặt hàng $ .... Tôi dường như luôn luôn làm điều đó.


0
/**
 * 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);
}

1
Điều này không trả lời câu hỏi, vì nó không nói tại sao OP không thấy mô-đun của họ được liệt kê trong trang quản trị; cộng với, câu trả lời chỉ có mã không hữu ích nhiều. (Kiểm tra mã: Bạn có một số lỗi chính tả.)
kiamlaluno
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.