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


12

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}vào 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?


Bạn có thể thấy nó hữu ích trong Joomla! 3 để sử dụng nút soạn thảo tạo mô-đun cho bạn. Điều đó sẽ làm cho nó nhanh chóng và ít bị lỗi.
Eoin

Câu trả lời:


9

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.


1
Đây là giải pháp lý tưởng. Nhiều mẫu thương mại có một tham số chuyển đổi trong cấu hình phía quản trị viên của họ, nhưng nếu bạn không sử dụng một trong các mẫu thương mại đó ... thì đây là câu trả lời hiệu quả và thanh lịch nhất.
Toni Marie

1
Tôi thích ý tưởng này, nó đơn giản và hiệu quả và dễ thực hiện trong các mẫu hiện có. Thông minh.
johanpw

8

Để tăng cường các câu trả lời ở đâ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ả.)


2

Đâ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 ();
    $ renderer = $ document-> loadRenderer ('mô-đun');
    $ vị trí = 'tên phân quyền';
    $ tùy chọn = mảng ('style' => 'raw');
    echo $ renderer-> render ($ vị trí, $ tùy chọn, null); 

Vui lòng giải thích thêm về cách mã trên có thể được sử dụng để đạt được kết quả mong muốn như được mô tả trong câu hỏi.
FFrewin

Trong phần hỗ trợ, tạo một mô-đun mới và đặt vị trí của nó (giả sử tên mã xác thực) và xuất bản nó. Trong frontend, thêm mã ở trên và nó sẽ hoạt động mà không có bất kỳ vấn đề.
dùng2589739

0

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ĩ rằng 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

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 riêng biệt của nội dung.



0

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: /programming/12225538/how-we-include-a-j Joomla-model-in-a-company-view-in-j Joomla


0

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.