วิธีการแสดงโมดูลในพื้นที่ส่วนประกอบ


13

ฉันมักจะต้องสร้างรายการเมนูที่แสดงโมดูลในพื้นที่ส่วนประกอบโดยไม่มีเนื้อหาอื่น ๆ

วิธีที่ฉันแก้ปัญหานี้คือการสร้างบทความใหม่และเพิ่มเฉพาะ{loadposition mymodule}ในเนื้อหาของบทความ จากนั้นฉันจะสร้างรายการเมนูบทความเดียวสำหรับบทความ นี่เป็นสิ่งที่ดีสำหรับโมดูลเดียว แต่ถ้าฉันมี 20 โมดูลที่แตกต่างที่ฉันต้องการแสดงด้วยวิธีนี้ ฉันต้องสร้าง 20 โมดูลบทความ 20 (เกือบว่าง) และรายการเมนู 20 รายการ

มีวิธีอื่นในการแสดงโมดูล (และไม่มีอะไรอื่น) ในพื้นที่องค์ประกอบของแม่แบบหรือไม่? เคล็ดลับ? Hacks? ไอเดีย?


คุณอาจพบว่ามีประโยชน์ใน Joomla! 3 เพื่อใช้ปุ่มตัวแก้ไขที่สร้างโมดูลให้กับคุณ นั่นจะทำให้เกิดข้อผิดพลาดได้อย่างรวดเร็วและน้อย
Eoin

คำตอบ:


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>

จากนั้นเมื่อฉันต้องการแสดงโมดูลแทนองค์ประกอบในหน้าฉันสร้างโมดูลกำหนดให้กับรายการเมนูนั้นและฉันเสร็จแล้ว

ข้อสังเกตเล็ก ๆ :

เพื่อความสะดวกและชัดเจนยิ่งขึ้นฉันแนะนำให้ตั้งชื่อโมดูลนี้ว่า "content-module", "main-module" หรือ "compomodule" อะไรก็ตามที่จะเตือนว่าโมดูลที่อยู่ในตำแหน่งนั้นจะแทนที่เอาต์พุตของคอมโพเนนต์


1
นี่คือทางออกที่ดี เทมเพลตเชิงพาณิชย์จำนวนมากมีพารามิเตอร์สลับในการกำหนดค่าด้านผู้ดูแลระบบของพวกเขา แต่ถ้าคุณไม่ได้ใช้เทมเพลตเชิงพาณิชย์ตัวใดตัวหนึ่ง ... นี่คือคำตอบที่มีประสิทธิภาพและสวยงามที่สุด
Toni Marie

1
ฉันชอบความคิดนี้มันเรียบง่ายและมีประสิทธิภาพและใช้งานง่ายในเทมเพลตที่มีอยู่ ยอดเยี่ยม
johanpw

9

เพื่อปรับปรุงคำตอบที่ได้รับที่นี่:

เมื่อต้องการรวมตำแหน่งโมดูลในมุมมองคอมโพเนนต์ของคุณและโหลดโมดูลที่นั่นคุณเพียงแค่เพิ่ม

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

ไปที่ไฟล์มุมมอง

สตริงที่สองที่มีแท็กสั้นตำแหน่งโหลดสามารถแทนที่ด้วย var ซึ่งมี html เพิ่มเติมหากคุณต้องการ คุณไม่ต้องเขียนบรรทัดนั้นสำหรับตำแหน่งโมดุลใหม่ทุกครั้ง:

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


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

(ฉันรู้ว่านี่ไม่ใช่คำตอบสำหรับผู้เขียนโดยตรง)


2

นี่คือทางออกที่ง่ายและทำงานได้ ฉันได้ลองกับ jdoc: รวมแล้ว แต่มันไม่ทำงาน

    $ document = JFactory :: getDocument ();
    $ renderer = $ document-> loadRenderer ('modules');
    $ position = 'custompositionname';
    $ options = array ('style' => 'raw');
    echo $ renderer-> render ($ position, $ options, null); 

โปรดอธิบายเพิ่มเติมว่ารหัสข้างต้นสามารถใช้เพื่อให้ได้ผลลัพธ์ตามที่ต้องการตามที่อธิบายในคำถามได้อย่างไร
FFrewin

ในการสำรองข้อมูลสร้างโมดูลใหม่และกำหนดตำแหน่ง (พูดว่า custompositionname) และเผยแพร่ ในส่วนหน้าเพิ่มรหัสข้างต้นและมันจะทำงานได้โดยไม่มีปัญหาใด ๆ
2589739

0

ฉันต้องทำสิ่งเดียวกันบนไซต์ของฉันสำหรับการสาธิตการขยายและปุ่มดาวน์โหลดอย่างไรก็ตามจากความซื่อสัตย์ทั้งหมดฉันคิดว่าการแยกสิ่งต่าง ๆ ออกมานั้นทำได้ดีกว่าเพราะจัดการได้ง่ายกว่า ไม่เพียง แต่ฉันค่อนข้างมั่นใจว่าไม่มีทางที่จะบรรลุสิ่งที่คุณกำลังมองหาผ่าน CMS จริง ๆ แต่เพียงฮาร์ดโค้ด (ไม่ต้องพูดอีกแล้ว)


0

ก่อนอื่นตามคำถามของคุณคุณได้สร้างโมดูล 20 รายการและรายการเมนู 20 รายการดังนั้นสิ่งพิเศษที่คุณต้องทำคือสร้างรายการเนื้อหาบรรทัดเดียวสำหรับแต่ละโมดูล ถ้านั่นเป็นเรื่องที่หนักหนาจริงๆลองทำตามความคิดของ @ FFrewin มันค่อนข้างแฮ็ก แต่มันจะใช้ได้

ส่วนตัวฉันจะไปกับรายการเนื้อหา ในความเป็นจริงฉันได้ทำเมื่อฉันสร้างระบบด้วยกล่องโต้ตอบป๊อปอัพที่ฉันยังต้องการที่จะทำงานโดยไม่เปิดใช้งาน js ฉันใส่เนื้อหาข้อความโต้ตอบลงในโมดูล custom_html ทำให้โมดูลถูกเปิดเผยและวางตำแหน่งเมื่อมีการคลิกลิงก์ จากนั้นฉันก็ชี้ลิงค์ไปที่ไอเท็มเนื้อหารวมถึงโมดูลอย่างที่คุณอธิบาย หากเปิดใช้งาน js ลิงก์จะไม่ถูกติดตามและจะมีการเปิดเผยกล่องโต้ตอบ หาก js ถูกปิดใช้งานลิงก์จะถูกติดตามและเนื้อหาของไดอะล็อกจะแสดงเป็นเนื้อหา และเนื้อหาอยู่ในที่เดียวดังนั้นฉันไม่ได้เก็บสำเนาของเนื้อหาไว้สองชุด




0

สร้างบทความเปล่า

สร้างรายการเมนูโดยเลือกบทความที่คุณสร้าง

สร้างโมดูลในตำแหน่งที่ไม่ได้ใช้ตั้งค่าการกำหนดเมนูเฉพาะในหน้าที่เลือกไว้เลือกเฉพาะรายการเมนูจากด้านบน

เนื่องจากนี่คือสิ่งที่ฉันคิดว่าดีที่สุดฉันจะให้คำตอบของฉันนี่คือสิ่งที่ฉันทำ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.