घटक क्षेत्र में मॉड्यूल कैसे प्रदर्शित करें


13

मुझे अक्सर एक मेनू आइटम बनाने की आवश्यकता होती है जो किसी अन्य सामग्री के बिना घटक क्षेत्र में एक मॉड्यूल प्रदर्शित करता है।

जिस तरह से मैं इसे हल करता हूं वह एक नया लेख बनाना है, और केवल {loadposition mymodule}लेख सामग्री में जोड़ना है। फिर मैं लेख के लिए एक एकल लेख मेनू आइटम बनाता हूं। यह एकल मॉड्यूल के लिए ठीक है, लेकिन क्या होगा अगर मेरे पास 20 अलग-अलग मॉड्यूल हैं जो मैं इस तरह प्रदर्शित करना चाहता हूं? मुझे 20 मॉड्यूल, 20 (लगभग खाली) लेख और 20 मेनू आइटम बनाने होंगे।

क्या टेम्पलेट के घटक क्षेत्र में एक मॉड्यूल (और कुछ नहीं) प्रदर्शित करने के अन्य तरीके हैं? ट्रिक्स? हैक्स? विचार?


आपको यह जूमला में उपयोगी लग सकता है! 3 संपादक बटन का उपयोग करने के लिए जो आपके लिए एक मॉड्यूल बनाता है। यह जल्दी और कम त्रुटि प्रवण बना देगा।
इयोन

जवाबों:


10

मैंने घटक के साथ एक ही स्थान पर एक मॉड्यूल स्थिति बनाकर यह जाँच की है कि यदि कोई मॉड्यूल इस स्थिति में मौजूद है तो उसे प्रदर्शित करें, अन्यथा घटक के लिए जाएं:

कोड नमूना:

<main id="content" role="main" class="main">
 <?php 
 if ($this->countModules('myposition')) 
   { ?>
     <jdoc:include type="modules" name="myposition" style="xhtml" />
 <?php } 
  else 
  { ?>
     <jdoc:include type="component" /> 
  <?php } ?>
</main>

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

एक छोटा सा पक्ष नोट:

सुविधा और बेहतर स्पष्टता के लिए, मैं इस मॉड्यूल स्थिति को "सामग्री-मॉड्यूल", "मुख्य-मॉड्यूल" या "कंपोडोड्यूल" जैसे कुछ नाम देने का सुझाव देता हूं। जो कुछ भी याद दिलाएगा कि कोई भी मॉड्यूल वहां तैनात है, वह घटक आउटपुट को बदल देगा।


1
यह आदर्श समाधान है। कई कमर्शियल टेम्प्लेट में उनके एडमिन साइड कॉन्फिगर में एक पैरामीटर टॉगल होता है, लेकिन अगर आप उन कमर्शियल टेम्प्लेट में से एक का उपयोग नहीं कर रहे हैं ... तो यह सबसे कुशल और सुरुचिपूर्ण उत्तर है।
टोनी मैरी

1
मैं इस विचार से प्यार करता हूं, यह सरल और प्रभावी है, और मौजूदा टेम्पलेट्स में लागू करना आसान है। अति उत्कृष्ट।
johanpw

9

यहां दिए गए उत्तरों को बढ़ाने के लिए:

अपने घटक दृश्य में एक मॉड्यूल स्थिति शामिल करने के लिए और वहां मॉड्यूल लोड करने के लिए, आपको बस जोड़ना होगा

echo JHtml::_('content.prepare', '{loadposition yourmodulposition}');

दृश्य फ़ाइल के लिए।

लोड स्थिति शॉर्ट टैग के साथ दूसरी स्ट्रिंग को एक संस्करण के साथ प्रतिस्थापित किया जा सकता है जिसमें अधिक HTML शामिल है यदि आपको आवश्यकता है। आपको हर नई मॉडुल स्थिति के लिए उस लाइन को लिखना नहीं है:

$outputModules = '<strong>Some Html</strong>'
                 .'{loadposition yourmodulposition1}'
                 .'{loadposition yourmodulposition2}';


echo JHtml::_('content.prepare', $outputModules);

(मुझे पता है कि यह लेखकों के सवाल का सीधा जवाब नहीं है।)


2

यहाँ एक सरल और काम कर समाधान है। मैंने jdoc के साथ प्रयास किया है: इसमें शामिल हैं लेकिन यह काम नहीं किया।

    $ दस्तावेज़ = JFactory :: getDocument ();
    $ रेंडरर = $ दस्तावेज़-> लोडरेंडर ('मॉड्यूल');
    $ स्थिति = 'custompositionname';
    $ विकल्प = सरणी ('शैली' => 'कच्चा');
    इको $ रेंडरर-> रेंडर ($ स्थिति, $ विकल्प, अशक्त); 

कृपया आगे बताएं कि प्रश्न में वर्णित वांछित परिणाम प्राप्त करने के लिए उपरोक्त कोड का उपयोग कैसे किया जा सकता है।
FFrewin

समर्थित में, एक नया मॉड्यूल बनाएं और उसकी स्थिति निर्धारित करें (custompositionname) और इसे प्रकाशित करें। सीमा में, उपरोक्त कोड जोड़ें और यह बिना किसी समस्या के काम करेगा।
user2589739

0

मुझे एक्सटेंशन डेमो और डाउनलोड बटन के लिए अपनी साइट पर ऐसा ही करना पड़ा है, हालांकि सभी ईमानदारी से, मुझे लगता है कि चीजों को अलग रखना कुछ मायनों में बेहतर है क्योंकि इसे प्रबंधित करना आसान है। इतना ही नहीं मुझे पूरा यकीन है कि वास्तविक सीएमएस के माध्यम से जो आप खोज रहे हैं उसे हासिल करने का कोई रास्ता नहीं है, केवल हार्डकोड (और नहीं कहें)।


0

सबसे पहले, अपने प्रश्न के अनुसार आप पहले से ही 20 मॉड्यूल और 20 मेनू आइटम बना रहे हैं, इसलिए वास्तव में केवल एक ही अतिरिक्त चीज जो आप कर रहे हैं वह है प्रत्येक मॉड्यूल के लिए एक-लाइन सामग्री आइटम बनाना। यदि यह वास्तव में बहुत महत्वपूर्ण है, तो @ FFrewin के विचार के साथ आगे बढ़ें। यह थोड़ा हैकी है, लेकिन यह काम करेगा।

व्यक्तिगत रूप से, मैं सामग्री आइटम के साथ जाऊँगा। वास्तव में मैंने यह किया है कि जब मैं पॉपअप डायलॉग बॉक्स के साथ एक सिस्टम बना रहा था, जिसे मैं बिना js सक्षम किए भी काम करना चाहता था। मैंने एक कस्टम_एचटीएमएल मॉड्यूल में संवाद सामग्री डाल दी, लिंक को क्लिक करने पर मॉड्यूल को प्रकट करने और तैनात करने के लिए धांधली की। और फिर मैंने एक सामग्री आइटम पर लिंक को भी इंगित किया, जिसमें आपके द्वारा वर्णित मॉड्यूल भी शामिल है। यदि js सक्षम किया गया था, तो लिंक का पालन नहीं किया गया था और संवाद बॉक्स सामने आया था। यदि js अक्षम किया गया था, तो लिंक का अनुसरण किया गया था, और संवाद की सामग्री को सामग्री के रूप में प्रदर्शित किया गया था। और सामग्री एक जगह पर थी, इसलिए मैं सामग्री की दो अलग-अलग प्रतियों को बनाए नहीं रख रहा था।




0

रिक्त लेख बनाएँ।

आपके द्वारा बनाए गए लेख का चयन करके मेनू आइटम बनाएं।

अप्रयुक्त स्थिति में मॉड्यूल बनाएं, केवल चयनित पृष्ठों पर मेनू असाइनमेंट सेट करें, ऊपर से केवल मेनू आइटम चुनें।

चूंकि यह सबसे ऊपर था, मुझे लगा कि मैं अपना जवाब दूंगा, यह वही है जो मैं करता हूं।

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