मॉड्यूल को व्यवस्थापक / कॉन्फ़िगर पृष्ठ पर कैसे जोड़ें?


27

मैं Drupal 7 में एक मॉड्यूल पर काम कर रहा हूँ। मैंने एक हुक_मेनू कार्यान्वयन जोड़ा है:

$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 के लिए एक कॉन्फ़िगर लिंक अब व्यवस्थापक / मॉड्यूल पेज दिखाई देता है , लेकिन मैं व्यवस्थापक / कॉन्फ़िगरेशन पृष्ठ पर सूचीबद्ध मॉड्यूल भी कैसे कर सकता हूं ? या केवल कोर मॉड्यूल के लिए व्यवस्थापक / कॉन्फिग पृष्ठ आरक्षित है?

जवाबों:


9

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

पहली क्वेरी पथ व्यवस्थापक / कॉन्फ़िगरेशन से जुड़े मेनू के लिए menu_name फ़ील्ड का चयन करती है, जो डिफ़ॉल्ट रूप से प्रबंधन है; दूसरी क्वेरी उन सभी मेनू का चयन करती है, जिनका menu_name के लिए समान मूल्य है, और जिनके माता-पिता व्यवस्थापक / कॉन्फ़िगर हैं।

जैसा कि आपका मेनू menu_name के लिए एक भिन्न मान का उपयोग करता है, यह दूसरी क्वेरी से चयनित नहीं है, और यह व्यवस्थापक / कॉन्फ़िगर पृष्ठ में नहीं दिखाया गया है।


24

यदि आप इसे इस तरह से करते हैं, तो मूल आइटम के लिए system.module कॉलबैक के साथ, आपको 'व्यवस्थापक / कॉन्फ़िग / ममॉड्यूल' पर जाने पर अच्छा लिस्टिंग पृष्ठ मिलता है

/**
 * 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
मत भूलो कि आपको प्रभावी होने के लिए मेनू परिवर्तनों के लिए मॉड्यूल को अक्षम और सक्षम करना होगा।
— jevon

5
@ जेवॉन: परिवर्तनों को देखने के लिए मेनू (मेनू) कैश को साफ़ करना पर्याप्त है।
— बार्ट

मेनू कैश को कमांड लाइन पर ड्रश का उपयोग करके साफ़ किया जा सकता है drush cc menu- रेफ: drupal.stackexchange.com/a/58621/1082
— therobyouknow

3

'Menu_name' भाग निकालें, यह आवश्यक नहीं है।


1

मुझे इसके बारे में भी बहुत परेशानी थी। जिस तरह से मैं कॉन्फ़िगर पृष्ठ पर लिंक जोड़ने में सक्षम था, वह दो मेनू आइटम घोषित करना था, जैसे कि 'एडमिन / कॉन्फिगर / मॉड्यूल' पर पैरेंट लिंक और 'एडमिन / कॉन्फिगर / मॉड्यूल / मैनेज' में एक चाइल्ड लिंक। ।

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

यह मेरे लिए काम किया।
मैं वास्तव में लगभग आधे घंटे तक संघर्ष कर रहा था जब तक मुझे एहसास हुआ कि मैं $ आइटम वापस नहीं कर रहा था .... मुझे हमेशा ऐसा लगता है।


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
यह प्रश्न का उत्तर नहीं देता है, क्योंकि यह नहीं कहता कि ओपी उनके मॉड्यूल को व्यवस्थापक पृष्ठ में सूचीबद्ध क्यों नहीं देख रहा है; साथ ही, कोड-ओनली उत्तर ज्यादा मददगार नहीं हैं। : (आप कुछ लेखन त्रुटि कोड की जाँच करें।)
— kiamlaluno
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.