मेनू आइटम प्रकार को बदलने के लिए hook_menu_alter () के बराबर क्या है?


10

मैं Drupal 8 में मेनू प्रकार बदलना चाहता हूं। Drupal 7 में हम hook_menu_alter का उपयोग करके इसे प्राप्त कर सकते हैं

function module_menu_alter(&$items) {
  $items['admin/config/people/ip-blocking/default'] = array(
    'title' => 'Block IP Address',
    'type' => MENU_DEFAULT_LOCAL_TASK,
  );
}

इसी तरह मैं Drupal 8 में मेनू प्रकार बदलना चाहता हूं। मैं यह कैसे कर सकता हूं। धन्यवाद।



जैसा कि बर्दिर ने उल्लेख किया है, अब कोई मेनू प्रकार नहीं है। क्या आप निर्दिष्ट कर सकते हैं कि आप क्या संग्रह करने की कोशिश कर रहे हैं?
लाइनस

जवाबों:


7

जबकि लिनुस का उत्तर बहुत अच्छा है, यह आपके विशिष्ट प्रश्न पर प्रतिक्रिया प्रदान नहीं करता है:

इसी तरह मैं Drupal 8 में मेनू प्रकार बदलना चाहता हूं

Drupal 8 में मेनू प्रकार जैसी कोई चीज नहीं है। सब कुछ जो एक प्रकार हुआ करता था, अब पूरी तरह से अलग चीज है। रूट, मेनू लिंक, स्थानीय कार्य, स्थानीय क्रियाएं। और अक्सर, आपके पास कई चीजें हैं। आपके पास हमेशा एक मार्ग है (7.x इस प्रकार के कॉलबैक पर कॉल करने के लिए उपयोग किया जाता है)। और इसके अलावा, आप उस मार्ग के लिए मेनू लिंक, स्थानीय कार्यों या कार्यों को जोड़ते हैं।

इसलिए, आप मेनू लिंक को स्थानीय कार्य के लिए, या यहां तक ​​कि स्थानीय कार्य के लिए मार्ग में परिवर्तित नहीं कर सकते। केवल एक चीज जो आप कर सकते हैं, उदाहरण के लिए दूर एक मेनू लिंक को बदलना (जिसका ऊपर उल्लिखित मार्ग परिवर्तन से कोई लेना-देना नहीं है) और इसके बजाय एक नया स्थानीय कार्य बनाएं।

लिंक के लिए लिनुस का जवाब और उन चीजों में से प्रत्येक के बारे में अधिक जानकारी के लिए देखें।


आप सही हैं, मैं इसका उल्लेख करना पूरी तरह से भूल गया। जोड़ के लिए धन्यवाद।
लाइनस

19

Drupal 8 में एक नया मेनू सिस्टम है, अब hook_menuऔर hook_menu_alterनहीं है।

यदि आप किसी मौजूदा मार्ग को बदलना चाहते हैं, तो यह ड्रुपल 7 की तुलना में थोड़ा अधिक जटिल है।

अपने मॉड्यूल में आप पर एक वर्ग फ़ाइल बनाने के लिए है YOURMODULE/src/Routing/CLASSNAME.phpकि फैली हुई है RouteSubscriberBase:

/**
 * @file
 * Contains \Drupal\YOURMODULE\Routing\RouteSubscriber.
 */

namespace Drupal\YOURMODULE\Routing;

use Drupal\Core\Routing\RouteSubscriberBase;
use Symfony\Component\Routing\RouteCollection;

/**
 * Listens to the dynamic route events.
 */
class RouteSubscriber extends RouteSubscriberBase {

  /**
   * {@inheritdoc}
   */
  protected function alterRoutes(RouteCollection $collection) {
    // Get the route you want to alter
    $route = $collection->get('system.admin_content');

    // alter the route...
  }
}

आप एक उदाहरण के रूप में नोड मॉड्यूल के रूटसब्सबर्स वर्ग ले सकते हैं ।

अपने RouteSubscriber को मान्यता देने के लिए आपको YOURMODULE.services.ymlअपने मॉड्यूल निर्देशिका की जड़ में एक फ़ाइल बनानी होगी :

services:
  node.route_subscriber:
    class: Drupal\YOURMODULE\Routing\RouteSubscriber
    tags:
      - { name: event_subscriber }

नई मेनू प्रणाली के लिए एक बेहतर जानकारी प्राप्त करने के लिए मैं निम्नलिखित लेखों की सिफारिश करूंगा:

संपादित करें: जैसा कि बर्दिर द्वारा उल्लेख किया गया है , मेनू सिस्टम में अब एक अलग संरचना है, जिसका डी 7 के मेनू सिस्टम से कोई लेना-देना नहीं है, इसलिए मेनू प्रकार जैसी कोई चीज अब नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.