Cara menampilkan modul di area komponen

13

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 menambahkan hanya {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?

johanpw
sumber
Anda mungkin menemukannya berguna di Joomla! 3 untuk menggunakan tombol editor yang membuat modul untuk Anda. Itu akan membuatnya cepat dan lebih sedikit kesalahan rawan.
Eoin

Jawaban:

10

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.

FFrewin
sumber
1
Ini adalah solusi ideal. Banyak templat komersial memiliki toggle parameter di konfigurasi sisi adminnya, tetapi jika Anda tidak menggunakan salah satu templat komersial itu ... ini adalah jawaban yang paling efisien dan elegan.
Toni Marie
1
Saya suka ide ini, sangat sederhana dan efektif, dan mudah diimplementasikan dalam template yang ada. Luar biasa.
johanpw
9

Untuk 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.)

Dennis Heiden
sumber
2

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); 
pengguna2589739
sumber
Tolong jelaskan lebih lanjut bagaimana kode di atas dapat digunakan untuk mencapai hasil yang diinginkan seperti dijelaskan dalam pertanyaan.
FFrewin
Di bagian yang didukung, buat modul baru dan atur posisinya (katakanlah nama pelanggan) dan publikasikan. Di frontend, tambahkan kode di atas dan itu akan berfungsi tanpa masalah.
user2589739
0

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

Lodder
sumber
0

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

Arlen
sumber
0

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.

Mythic
sumber