drupal संपादन कैसे छिपाएं | टैब देखें?




drupal-6 (8)

क्या मैं छुपा सकता हूँ

संपादित करें | राय

प्रत्येक नोड के शीर्ष पर टैब?

मैंने थीम विकल्प में इस विकल्प की खोज की है (वैश्विक और मानक दोनों थीम लेकिन मुझे यह नहीं मिला)।

मैं अभी भी अपने ग्राहक को सामग्री को संपादित / प्रशासित करने में सक्षम होना चाहता हूं, इसलिए मैं इसके लिए अनुमति को हटा नहीं सकता हूं।

धन्यवाद


यह वास्तव में एक प्रस्तुतिपूर्ण चीज है, कार्यक्षमता की बात नहीं, इसलिए इसे थीम स्तर पर किया जाना चाहिए।

theme_menu_local_tasks() को ओवरराइड करने में समस्या यह है कि आप पूरे स्थानीय कार्य डिस्प्ले पर एक theme_menu_local_tasks() लेते हैं / लेते हैं, जब आप वास्तव में केवल दो विशिष्ट स्थानीय कार्यों को हटाने के लिए स्केलपेल के साथ वहां जाना चाहते हैं। तो, आपको थोड़ा और विशिष्ट प्राप्त करने की आवश्यकता है।

theme_menu_local_tasks() वर्तमान पृष्ठ के स्थानीय कार्यों को प्राप्त करता है और उन्हें menu_local_tasks() पर menu_local_tasks() । यहां, दो थीम फ़ंक्शंस का उपयोग किया जाता है:

  1. theme_menu_item_link() , जो कार्य के लिए लिंक मार्कअप प्राप्त करता है
  2. theme_menu_local_task() , जो कार्य के लिए <li> तत्व प्राप्त करता है।

इसलिए, आप theme_menu_item_link() और theme_menu_local_task() को ओवरराइड करके वास्तव में मजबूत तरीके से स्थानीय कार्यों को देखें और संपादित करें, उनके लिए अपनी जांच शामिल करने के लिए:

function mytheme_menu_item_link($link) {
  // Local tasks for view and edit nodes shouldn't be displayed.
  if ($link['type'] & MENU_LOCAL_TASK && ($link['path'] === 'node/%/edit' || $link['path'] === 'node/%/view')) {
    return '';
  }
  else {
    if (empty($link['localized_options'])) {
      $link['localized_options'] = array();
    }

    return l($link['title'], $link['href'], $link['localized_options']);
  }
}

function mytheme_menu_local_task($link, $active = FALSE) {
  // Don't return a <li> element if $link is empty
  if ($link === '') {
    return '';
  }
  else {
    return '<li '. ($active ? 'class="active" ' : '') .'>'. $link ."</li>\n";  
  }
}

इस तरह, आप मेनू राउटर पथ पर निर्भर हैं, मेनू राउटर आइटम को संशोधित नहीं कर रहे हैं, और मूल कार्यक्षमता या थीमिंग में न्यूनतम परिवर्तनों के साथ परिणाम प्राप्त करना चाहते हैं।


यहां आपके लिए एक बहुत ही आसान समाधान है। (Drupal 7)

  • अपने वर्तमान टेम्पलेट में अपना पेज . tpl.php खोलें और $ टैब वैरिएबल की खोज करें

  • यदि आप इसे पूरी तरह छिपाना चाहते हैं तो रेंडर कोड निकालें।

  • यदि आप इसे केवल प्रदर्शनकर्ताओं को प्रदर्शित करना चाहते हैं तो इस कोड का उपयोग करें

    <?php if ($tabs and $is_admin): ?>
    <div class="tabs">
      <?php print render($tabs); ?>
    </div>
    

    उपरोक्त कोड जांचता है कि उपयोगकर्ता प्रशासक है या नहीं। यदि यह है तो यह टैब प्रस्तुत करेगा। अगर नहीं तो यह उन्हें प्रस्तुत नहीं करेगा।


टैब को छिपाने का सबसे आसान समाधान इस विषय को अपने विषय सीएसएस में जोड़ना है

.tabs{ display:none;}

इसके लिए एक मॉड्यूल है: टैब टमर टैब को छुपाने या अक्षम करने और उन्हें नाम बदलने की अनुमति देता है।


अंतिम उत्तर के लिए धन्यवाद। लेकिन इस विस्तार से अवगत रहें: यदि आप इसे आजमाते हैं-तो यह काम नहीं कर सकता है: शाब्दिकों को सिर्फ "या" के साथ गोलाकार किया जाना चाहिए, दोनों ही पूरी तरह से नहीं। इसलिए यह होना चाहिए:

/**
 * Implements hook_menu_local_tasks_alter() to unset unwanted tabs
 */
function MYMODULE_menu_local_tasks_alter(&$data) {
  foreach ($data['tabs'][0]['output'] as $key => $value) {
    if ($value['#link']['path'] == "node/%/view") {
      unset($data['tabs'][0]['output'][$key]);
    }
  }
}

एक बार इसका ख्याल रखा, यह काम करता है :)


डी 7 समाधान की तलाश करते समय सभी लोग इस प्रश्न पर ठोकर खा रहे हैं: जैसा कि https://drupal.stackexchange.com/a/77964/15055 पर बताया गया है, यह है hook_menu_local_tasks_alter()

/**
 * Implements hook_menu_local_tasks_alter() to unset unwanted tabs
 */
function MYMODULE_menu_local_tasks_alter(&$data) {
  foreach ($data['tabs'][0]['output'] as $key => $value) {
    if ($value['#link']['path'] == 'node/%/view') {
      unset($data['tabs'][0]['output'][$key]);
    }
  }
}

देखें और संपादित करें कार्यात्मक विशेषताएं हैं। उनके पास होने का कारण है।

उन्हें "निकालने" का सबसे अच्छा तरीका है, उस कार्यक्षमता को "हटाएं"। आखिरकार: कार्यक्षमता के टुकड़े के इंटरफ़ेस को क्यों हटाएं, लेकिन कार्यक्षमता स्वयं नहीं? इसके अलावा, बस टैब प्रिंट नहीं करते हैं, यूआरएल एंडपॉइंट्स को नहीं हटाते हैं। दूसरे शब्दों में: यदि आप संपादन टैब मुद्रित नहीं करते हैं, तो लोग अभी भी संपादन पृष्ठ तक पहुंच सकते हैं।

दोबारा: उस कार्यक्षमता को हटाना सबसे अच्छा है: तथ्य यह है कि आप संपादन टैब नहीं चाहते हैं, ऐसा लगता है कि आप कुछ उपयोगकर्ताओं के लिए संपादन कार्यक्षमता नहीं चाहते हैं। यदि ऐसा है, तो उस भूमिका के लिए बस उस अनुमति को हटा दें। बस इतना ही। टैब चले जाएंगे।

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

"स्थानीय-कार्य" के लिए अपना स्वयं का HTML बनाने के लिए बस theme_menu_local_tasks() को ओवरराइड करें। और अपने पेज-टीपीएल में, बस $tabs वैरिएबल को किसी स्थान पर ले जाएं, जहां आप उन्हें चाहते हैं।

लेकिन फिर: इंटरफ़ेस-तत्वों को हटाकर, ऐप के व्यवहार को बदलने की कोशिश न करें। ऐसा करने के लिए सही बात नहीं है: व्यवहार को बदलने के लिए आपको व्यवहार बदलना चाहिए :)


मॉड्यूल पक्ष पर, आप कुछ ऐसा कर सकते हैं जो संपादन कार्यों के मेनू को स्थानीय कार्यों से नोड के लिए डीक्यूलेट करता है:

function custom_menu_alter(&$items) {
  $items['node/%node/edit']['type'] = MENU_CALLBACK;
}

संपादन पथ अभी भी है, लेकिन अब यह व्यू टैब से जुड़ा नहीं है। इसमें संपादन पृष्ठ भी शामिल है - वहां कोई टैब नहीं है।





drupal-6