it-swarm-id.com

Cara menampilkan modul di area komponen

Saya sering perlu membuat item menu yang menampilkan modul di area komponen, tanpa konten lain.

Cara saya mengatasi ini adalah dengan membuat artikel baru, dan hanya menambahkan {loadposition mymodule} dalam konten artikel. Kemudian saya membuat item menu artikel tunggal untuk artikel tersebut. Ini bagus untuk satu modul, tetapi bagaimana jika saya memiliki 20 modul berbeda yang ingin saya tampilkan dengan cara ini? Saya harus membuat 20 modul, 20 artikel (hampir kosong) dan 20 item menu.

Apakah ada cara lain untuk menampilkan modul (dan tidak ada yang lain) di area komponen templat? Trik? Hacks? Ide ide?

12
johanpw

Saya telah melakukan ini dengan membuat posisi modul di lokasi yang sama dengan komponen dan memeriksa apakah ada modul pada posisi ini kemudian menampilkannya, jika tidak pergi untuk komponen:

Contoh kode:

<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>

Kemudian ketika saya ingin menampilkan modul alih-alih komponen dalam halaman, saya membuat modul menugaskannya ke item menu itu dan saya selesai.

Catatan kecil:

Untuk kenyamanan dan kejelasan yang lebih baik, saya sarankan untuk memberi nama posisi modul ini sesuatu seperti "content-module", "main-module" atau "compomodule". Apa pun yang akan mengingatkan bahwa modul apa pun yang diposisikan di sana, akan menggantikan output komponen.

9
FFrewin

ntuk meningkatkan jawaban yang diberikan di sini:

Untuk memasukkan posisi modul dalam tampilan komponen Anda dan memuat modul di sana, Anda hanya perlu menambahkan

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

ke file tampilan.

String kedua dengan tag posisi beban pendek dapat diganti dengan var yang berisi lebih banyak html jika Anda membutuhkannya. Anda tidak perlu menulis baris itu untuk setiap posisi modul baru:

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


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

(Saya tahu ini bukan jawaban langsung untuk pertanyaan penulis.)

8
Dennis Heiden

Berikut ini adalah solusi sederhana dan berhasil. Saya sudah mencoba dengan jdoc: sertakan tetapi tidak berhasil.

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

Buat artikel kosong.

Buat item menu memilih artikel yang Anda buat.

Buat modul pada posisi yang tidak digunakan, atur tugas menu hanya pada halaman yang dipilih, pilih hanya item menu dari atas.

Karena ini di bagian atas pikir saya akan memberikan jawaban saya, inilah yang saya lakukan.

0
Mythic

Coba ini

jimport('joomla.application.module.helper');
    // this is where you want to load your module position
    $modules = JModuleHelper::getModules('header'); 
    foreach($modules as $module)
    {
    echo JModuleHelper::renderModule($module);
    }

ref: https://stackoverflow.com/questions/12225538/how-we-include-a-joomla-module-in-a-component-view-in-joomla

0
Sh4msi

Cara terbersih untuk melakukan ini adalah menggunakan: http://extensions.joomla.org/extension/m2c-module-to-component

0
Lala

Saya harus melakukan hal yang sama di situs saya untuk demo ekstensi dan tombol unduh, namun dari semua kejujuran, saya pikir menjaga hal-hal yang terpisah dalam beberapa hal lebih baik karena lebih mudah untuk dikelola. Tidak hanya itu saya cukup yakin tidak ada cara untuk mencapai apa yang Anda cari melalui CMS yang sebenarnya, hanya hardcode (katakan tidak lebih).

0
Lodder

Pertama, menurut pertanyaan Anda, Anda sudah membuat 20 modul dan 20 item menu, jadi satu-satunya hal tambahan yang harus Anda lakukan adalah membuat item konten satu baris untuk setiap modul. Jika itu benar-benar sangat berat, maka lanjutkan dengan ide @ FFrewin. Agak gila, tapi akan berhasil.

Secara pribadi, saya akan pergi dengan item konten. Bahkan saya sudah melakukannya ketika saya sedang membangun sistem dengan kotak dialog popup yang saya juga ingin memiliki pekerjaan tanpa js diaktifkan. Saya menempatkan konten dialog dalam modul custom_html, memasang modul yang akan dibuka dan diposisikan saat tautan diklik. Dan kemudian saya juga mengarahkan tautan ke item konten, termasuk modul seperti yang Anda jelaskan. Jika js diaktifkan, tautan tidak diikuti dan kotak dialog terungkap. Jika js dinonaktifkan, tautannya diikuti, dan konten dialog ditampilkan sebagai konten. Dan kontennya ada di satu tempat, jadi saya tidak menyimpan dua salinan konten yang terpisah.

0
Arlen