मेनू आइटम के रूप में मॉड्यूल


11

मुझे खोज मॉड्यूल को मेनू आइटम (डिफ़ॉल्ट मेनू मॉड्यूल) के रूप में सम्मिलित करने की आवश्यकता है।

मुझे इस आउटपुट की आवश्यकता है:

<ul>
    <li>menu item</li>
    <li>menu item</li>
    <li>SEARCH MODULE</li>
    <li>menu item</li>
    ...
</ul>

मेरा पहला विचार डिफ़ॉल्ट मेनू मॉड्यूल को दो बार डुप्लिकेट करना होगा:

  1. समापन </ul>टैग के बिना खोज मॉड्यूल से पहले मेनू आइटम प्रदर्शित करने के लिए
  2. उद्घाटन <ul>टैग के बिना खोज मॉड्यूल के बाद मेनू आइटम प्रदर्शित करने के लिए एक अन्य

और उनके बीच में सर्च मॉड्यूल डालें। यह मेरे उद्देश्य को प्राप्त करने का सबसे आसान और सबसे आसान तरीका नहीं है क्योंकि इसके लिए यह आवश्यक है:

  • मेनू के लिए 3 मॉड्यूल स्थिति
  • मेनू प्रबंधक में 2 अलग मेनू

मुझे पता है कि मैं ऐसा करने के लिए कुछ मेगा मेनू मॉड्यूल का उपयोग कर सकता हूं लेकिन मैं तीसरे पक्ष के एक्सटेंशन से बचना चाहूंगा और कस्टम कोड का उपयोग कर सकता हूं जिसे मैं नियंत्रित कर सकता हूं।

मैं डिफ़ॉल्ट मेनू में मेनू आइटम के रूप में एक मॉड्यूल कैसे जोड़ सकता हूं?


आप कुछ सीएसएस ट्रिक्स के साथ दो अलग-अलग मेनू + एक खोज का उपयोग कर सकते हैं, लेकिन यदि आप उपरोक्त संरचना चाहते हैं, तो आप jQueryऐसे कार्यों पर विचार कर सकते हैं append()या prepend()जो जावास्क्रिप्ट-अक्षम ब्राउज़र पर काम नहीं करेंगे।
फरहमान

मैं इसके बजाय तत्वों को इधर-उधर करने के लिए jQuery का उपयोग नहीं करूंगा और यदि मेरे पास बेहतर तरीके से नहीं होने पर सवाल में वर्णित तकनीक का उपयोग किया जाता है ...
वेब-टिकी

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

बहुत यकीन है कि ब्रायन का अधिकार है। आपको या तो मेनू को ओवरराइड करना होगा और इसे फिर से लिखना होगा, या आपको किसी तीसरे पक्ष का उपयोग करना होगा। NoNumber आपका कम से कम फूला हुआ तृतीय पक्ष विकल्प होगा।
फेय

आप अभी मॉड्यूल से लिंक कैसे बना रहे हैं? क्या आपके पास मेनू में काम करने का लिंक है?
डेविड फ्रिट्च

जवाबों:


4

आपके मेनू में खोज मॉड्यूल को लोड करने का एक विकल्प यहां दिया गया है। इसके लिए कुछ सरल चरणों की आवश्यकता है:

1. अपने mod_menuमॉड्यूल को ओवरराइड करें

  • अपने टेम्प्लेट फ़ोल्डर में एक ओवरराइड बनाएँ \templates\YOURTEMPLATE\html\mod_menu\default_url.php
  • निम्न सामग्रियों को फ़ाइल में कॉपी करें:

default_url.php

 <?php
 /**
 * @package     Joomla.Site
 * @subpackage  mod_menu
 *
 * @copyright   Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights   reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

// Note. It is important to remove spaces between elements.
$class = $item->anchor_css ? 'class="' . $item->anchor_css . '" ' : '';
$title = $item->anchor_title ? 'title="' . $item->anchor_title . '" ' : '';

if ($item->menu_image)
    {
        $item->params->get('menu_text', 1) ?
        $linktype = '<img src="' . $item->menu_image . '" alt="' . $item->title . '"   /><span class="image-title">' . $item->title . '</span> ' :
        $linktype = '<img src="' . $item->menu_image . '" alt="' . $item->title . '"  />';
 }
 else
 {
    $linktype = $item->title;
 }

 $flink = $item->flink;
$flink = JFilterOutput::ampReplace(htmlspecialchars($flink));
if ($linktype == "CustomSearchBox"){
    $document   = &JFactory::getDocument();
    $renderer   = $document->loadRenderer('modules');
    $options    = array('style' => 'xhtml');
    $position   = 'CustomSearchBox';
    echo $renderer->render($position, $options, null);
}
else {

switch ($item->browserNav) :
    default:
    case 0:
?><a <?php echo $class; ?>href="<?php echo $flink; ?>" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
        break;
    case 1:
        // _blank
?><a <?php echo $class; ?>href="<?php echo $flink; ?>" target="_blank" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
        break;
    case 2:
        // window.open
        $options = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,'.$params->get('window_open');
            ?><a <?php echo $class; ?>href="<?php echo $flink; ?>" onclick="window.open(this.href,'targetWindow','<?php echo $options;?>');return false;" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
        break;
endswitch;
}

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

2. एक नया खोज मॉड्यूल बनाएं

खोज मॉड्यूल बनाएं और मापदंडों को आवश्यकतानुसार सेट करें (मैं मॉड्यूल शीर्षक छिपाने का सुझाव देता हूं)।

मॉड्यूल को कस्टम स्थिति "CustomSearchBox" पर प्रकाशित करें

3. एक नया मेनू आइटम बनाएं

मेनू आइटम किसी भी प्रकार का हो सकता है, मैं सुझाव देता हूं कि "बाहरी URL", और नाम "CustomSearchBox" होना चाहिए।

अपना मेनू आइटम सहेजें, और संपूर्ण मेनू आइटम को खोज बॉक्स के साथ बदल दिया जाएगा!

अगर कुछ अस्पष्ट है तो मुझे बताएं।


जवाब के लिए Thx। मैंने एक मॉड्यूल स्थिति के साथ आपकी तकनीक का उपयोग करने की कोशिश की, जो पहले से ही मेरे टेम्पलेट (लोगो) में थी, लेकिन यह काम नहीं करता था। क्या मुझे अपने टेम्पलेट में "CustomSearchBox" स्थिति बनाने की कोशिश करनी चाहिए और उस एक का उपयोग करना चाहिए?
वेब-टिक्की

हाँ, आपको कस्टम स्थिति "CustomSearchBox" बनाना चाहिए और इसका उपयोग करना चाहिए। या आप इसे उपरोक्त कोड में यहाँ बदल सकते हैं: $linktype == "CustomSearchBox"और यहाँ$position = 'CustomSearchBox';
दिमित्री रेकून

आपको वास्तव में स्थिति बनाने की ज़रूरत नहीं है (अपने index.php या template.xml फ़ाइलों में)। बस CustomSearchBoxमॉड्यूल स्थिति फ़ील्ड में लिखें और एंटर दबाएं।
12

ठीक है, मैं अंतिम रूप से इसके माध्यम से प्राप्त करने का समय था, मुझे इसे काम करने के लिए आपके कोड को मोड़ना पड़ा। 1 / किसी कारण से यह विकट नहीं था क्योंकि मैं मेनू आइटम में उपयोग कर रहा था और छवि। 2 / मैंने आपके कोड की लाइन 30 को बदल दिया है $document = JFactory::getDocument();। अब यह काम करता है लेकिन मुझे अपनी छवि को फिर से जोड़ने का एक तरीका खोजना होगा।
वेब-टिकी

कुछ और ट्वीक किया गया: मैंने मेनू आइटम शीर्षक के बजाय सीएसएस मेनू आइटम वर्ग पर यदि विवरण आधारित है और $linktypeइको फ़ंक्शन में जोड़ा है । यहाँ कोड दिखाई दे रहा है: phpad.org/1645824385 । मुझे सही दिशा में इंगित करने के लिए धन्यवाद यह कुछ ऐसा है जिसे मैं कुछ समय के लिए हासिल करना चाहता था अब यह बहुत बढ़िया है! :)
वेब-टिकी

1

यद्यपि आप कहते हैं कि आप तीसरे पक्ष के एक्सटेंशन का उपयोग नहीं करना चाहते हैं, लेकिन मेरे पास एक समाधान है जो रॉकेटटैम से रोककैंडी का उपयोग करता है । यह एक छोटा स्निपेट घटक है जो मेनू में खोज फ़ील्ड को जोड़ना बहुत आसान बनाता है। बस प्लगइन स्थापित करें, और इस तरह एक नया मैक्रो बनाएँ:

मैक्रो

 [searchfield][/searchfield]

एचटीएमएल

<form action="index.php" method="post" class="form-inline" _lpchecked="1">
 <input name="searchword" id="mod-search-searchword" maxlength="20" class="inputbox search-query" type="text" size="20" value="Search..." onblur="if (this.value=='') this.value='Search...';" onfocus="if (this.value=='Search...') this.value='';">       
 <input type="hidden" name="task" value="search">
 <input type="hidden" name="option" value="com_search">
 <input type="hidden" name="Itemid" value="101">

सहेजें और बंद करें।

अब खोज बॉक्स के लिए एक मेनू आइटम बनाएं (मैं External URLटाइप करने का सुझाव देता हूं , लेकिन कोई भी मेनू आइटम प्रकार करेगा), और शीर्षक फ़ील्ड में, जोड़ें [searchfield][/searchfield]:

मेनू में सर्चफील्ड

RokCandy मैक्रो में कोड के साथ शीर्षक को बदल देगा, और आपको मेनू में एक खोज फ़ील्ड मिलेगी:

परिणाम

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