it-swarm-vi.com

Cách hiển thị mô-đun trong khu vực thành phần

Tôi thường cần tạo một mục menu hiển thị một mô-đun trong khu vực thành phần, mà không có bất kỳ nội dung nào khác.

Cách tôi giải quyết điều này là tạo một bài viết mới và chỉ thêm {loadposition mymodule} trong nội dung bài viết. Sau đó, tôi tạo một mục menu Điều duy nhất cho bài viết. Điều này tốt cho một mô-đun duy nhất, nhưng nếu tôi có 20 mô-đun khác nhau mà tôi muốn hiển thị theo cách này thì sao? Tôi sẽ phải tạo 20 mô-đun, 20 bài viết (gần như trống) và 20 mục menu.

Có cách nào khác để hiển thị một mô-đun (và không có gì khác) trong khu vực thành phần của mẫu không? Thủ thuật? Hacks? Ý tưởng?

12
johanpw

Tôi đã thực hiện điều này bằng cách tạo một vị trí mô-đun tại cùng một vị trí với thành phần và kiểm tra xem một mô-đun có ở vị trí này hay không, sau đó hiển thị nó, nếu không đi đến thành phần:

Mẫu mã :

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

Sau đó, khi tôi muốn hiển thị một mô-đun thay vì thành phần trong một trang, tôi tạo mô-đun gán nó cho mục menu đó và tôi đã hoàn thành.

Một lưu ý nhỏ:

Để thuận tiện và rõ ràng hơn, tôi đề nghị đặt tên cho vị trí mô-đun này một cái gì đó như "mô-đun nội dung", "mô-đun chính" hoặc "mô-đun". Bất cứ điều gì sẽ nhắc nhở rằng bất kỳ mô-đun được định vị ở đó, sẽ thay thế đầu ra thành phần.

9
FFrewin

Để nâng cao các câu trả lời đã cho ở đây :

Để bao gồm một vị trí modul trong chế độ xem thành phần của bạn và để tải các mô-đun ở đó, bạn chỉ cần thêm

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

vào tập tin xem.

Chuỗi thứ hai với thẻ ngắn vị trí tải có thể được thay thế bằng một var chứa nhiều html hơn nếu bạn cần điều đó. Bạn không phải viết dòng đó cho mọi vị trí modul mới:

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


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

(Tôi biết đây không phải là câu trả lời trực tiếp cho câu hỏi của tác giả.)

8
Dennis Heiden

Đây là một giải pháp đơn giản và làm việc. Tôi đã thử với jdoc: bao gồm nhưng nó không hoạt động.

[.__.] $ document = JFactory :: getDocument (); [.__ ] $ Options = mảng ('style' => 'raw'); [.__.] echo $ renderer-> render ($ location, $ Options, null); [.__.]
2
user2589739

Tạo bài viết trống.

Tạo mục menu chọn bài viết bạn đã tạo.

Tạo mô-đun ở vị trí không sử dụng, chỉ đặt gán menu trên các trang được chọn, chỉ chọn mục menu từ phía trên.

Vì đây là đỉnh cao nên tôi sẽ cung cấp câu trả lời của mình, đây là những gì tôi làm.

0
Mythic

Thử đi

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-j Joomla-model-in-a-company-view-in-j Joomla

0
Sh4msi

Cách sạch nhất để làm điều này là sử dụng: http://extensions.j Joomla.org/extension/m2c-module-to-component

0
Lala

Tôi đã phải làm điều tương tự trên trang web của mình đối với các bản mở rộng và các nút tải xuống, tuy nhiên, không thành thật, tôi nghĩ việc giữ mọi thứ tách biệt theo một cách nào đó tốt hơn vì nó dễ quản lý hơn. Không chỉ vậy, tôi khá chắc chắn rằng không có cách nào để đạt được những gì bạn đang tìm kiếm thông qua CMS thực tế, chỉ có mã cứng (không nói nữa).

0
Lodder

Trước hết, theo câu hỏi của bạn, bạn đã tạo 20 mô-đun và 20 mục menu, vì vậy thực sự điều duy nhất bạn phải làm là tạo một mục nội dung một dòng cho mỗi mô-đun. Nếu điều đó thực sự quá khó khăn, thì hãy tiếp tục với ý tưởng của @ FFrewin. Đó là một chút hack, nhưng nó sẽ làm việc.

Cá nhân, tôi sẽ đi với các mục nội dung. Trong thực tế, tôi đã làm điều đó khi tôi đang xây dựng một hệ thống với các hộp thoại bật lên mà tôi cũng muốn có công việc mà không cần bật js. Tôi đặt nội dung hộp thoại trong một mô-đun custom_html, gian lận mô-đun sẽ được tiết lộ và định vị khi nhấp vào một liên kết. Và sau đó tôi cũng chỉ liên kết vào một mục nội dung, bao gồm cả mô-đun như bạn mô tả. Nếu js được bật, liên kết không được theo dõi và hộp thoại được tiết lộ. Nếu js bị vô hiệu hóa, liên kết được theo dõi và nội dung của hộp thoại được hiển thị dưới dạng nội dung. Và nội dung nằm ở một nơi, vì vậy tôi không duy trì hai bản sao nội dung riêng biệt.

0
Arlen