Joomla Bài học 8: Quản lý Modules và cách gán Module vào các vị trí (Positions) trên giao diện
Chào mừng bạn đến với Joomla Bài học 8. Trong bài học này, chúng ta sẽ tìm hiểu sâu về cấu trúc của Module trong khu vực quản trị, cách các vị trí (Positions) hoạt động, và kỹ thuật gọi module thủ công bằng mã nguồn PHP khi cần thiết.
1. Quản lý Modules trong Administrator
Để quản lý các khối hiển thị này, từ trang quản trị bạn truy cập vào Content (hoặc Extensions) -> Modules. Tại đây, bạn có thể tạo mới, chỉnh sửa hoặc bật/tắt hàng loạt module có sẵn (như Menu, Breadcrumbs, Custom HTML, Latest Articles).
-
Cấu hình một Module cơ bản gồm 3 phần chính:
-
Module Type: Loại module bạn muốn sử dụng (Ví dụ: Articles - Latest để hiển thị bài viết mới, Menu để hiển thị thanh điều hướng, hoặc Custom để tự do viết mã HTML/PHP hiển thị nội dung tùy chỉnh).
-
Position (Vị trí): Nơi module này sẽ xuất hiện trên giao diện website (phụ thuộc vào Template đang sử dụng, ví dụ:
sidebar-left,topbar,footer). -
Assignment (Phân trang hiển thị): Như đã học ở Bài 6, phần này quyết định module hiển thị ở Tất cả các trang, Không trang nào, hay Chỉ các trang được chọn.
-
2. Bản chất kỹ thuật của "Module Position"
Nhiều người mới thường thắc mắc: "Lấy đâu ra các cái tên vị trí như sidebar-left hay header để chọn?"
-
Sự thật kỹ thuật: Vị trí module không phải là một giá trị cứng do Joomla quy định sẵn, mà nó được định nghĩa trực tiếp bên trong file template (cụ thể là file
templateDetails.xmlvà các file layout PHP của template). -
Khi template khai báo một vị trí, hệ thống quản trị của Joomla sẽ tự động đọc file XML đó và đưa danh sách các vị trí vào dropdown để bạn có thể chọn khi tạo module.
Ví dụ, trong file templateDetails.xml của một template chuẩn, các vị trí được khai báo như sau:
XML
<positions>
<position>sidebar-left</position>
<position>main-top</position>
<position>footer</position>
</positions>
Và tại file hiển thị giao diện chính của template (index.php), các vị trí này được render ra HTML thông qua lệnh gọi hàm Core của Joomla:
PHP
<?php if ($this->countModules('sidebar-left')) : ?>
<aside class="sidebar">
<jdoc:include type="modules" name="sidebar-left" style="xhtml" />
</aside>
<?php endif; ?>
3. Các phong cách hiển thị Module (Module Styles / Chromes)
Khi render module ra ngoài giao diện, tham số style trong lệnh <jdoc:include> quyết định cấu trúc HTML bọc quanh module đó (thường gọi là Module Chrome):
-
style="none": Chỉ render thẳng nội dung module mà không bọc thêm bất kỳ thẻ HTML nào. -
style="xhtml": Bọc tiêu đề và nội dung vào các thẻ tiêu chuẩn (<h3>,<div>) giúp dễ dàng định hình bằng CSS. -
style="card"(phổ biến trong Bootstrap 5 / Joomla 5): Tự động bọc module thành các khối card đẹp mắt.
4. Kỹ thuật nâng cao: Gọi Module trực tiếp bằng PHP trong Code
Đôi khi, bạn không muốn gán module vào vị trí có sẵn thông qua Administrator, mà muốn nhúng trực tiếp một module vào bên trong một file layout PHP hoặc một bài viết tùy chỉnh. Joomla hỗ trợ hàm JModuleHelper cực kỳ mạnh mẽ để làm việc này:
PHP
use Joomla\CMS\Helper\ModuleHelper;
// Lấy thông tin một module cụ thể theo tên (ví dụ: module tên 'My Custom Banner')
$module = ModuleHelper::getModule('mod_custom', 'My Custom Banner');
// Render module đó ra dạng HTML
echo ModuleHelper::renderModule($module, ['style' => 'xhtml']);
5. Tổng kết bài học
-
Nắm vững cách cấu hình, phân loại và gán vị trí cho các Modules trong hệ thống quản trị Joomla.
-
Hiểu rõ mối liên kết cốt lõi giữa
templateDetails.xml, fileindex.phpcủa template và hàm<jdoc:include type="modules" />. -
Biết cách chủ động gọi và render module thủ công bằng mã nguồn PHP khi xây dựng các tính năng nâng cao.
Trong Bài học 9, chúng ta sẽ khám phá cách mở rộng dữ liệu động mà không cần viết code với Custom Fields và Field Groups.
All rights reserved