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


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.