Phát triển khối
Tổng quan
Phần tiêu đề “Tổng quan”Khối là các tiện ích nội dung có thể tái sử dụng được hiển thị trong thanh bên chủ đề và khu vực nội dung. Hướng dẫn này bao gồm việc tạo, định cấu hình và tùy chỉnh các khối XOOPS.
Cấu trúc khối
Phần tiêu đề “Cấu trúc khối”Định nghĩa khối trong xoops_version.php
Phần tiêu đề “Định nghĩa khối trong xoops_version.php”$modversion['blocks'][] = [ 'file' => 'blocks/recent.php', 'name' => '_MI_MYMODULE_BLOCK_RECENT', 'description' => '_MI_MYMODULE_BLOCK_RECENT_DESC', 'show_func' => 'mymodule_recent_show', 'edit_func' => 'mymodule_recent_edit', 'template' => 'mymodule_block_recent.tpl', 'options' => '10|0|date', // Default options: limit|category|sort];Thông số khối
Phần tiêu đề “Thông số khối”| Tham số | Mô tả |
|---|---|
file | File PHP chứa các hàm khối |
name | Hằng số ngôn ngữ cho tiêu đề khối |
description | Hằng số ngôn ngữ cho mô tả |
show_func | Chức năng hiển thị nội dung khối |
edit_func | Chức năng hiển thị biểu mẫu tùy chọn khối |
template | Tệp mẫu Smarty |
options | Tùy chọn mặc định được phân tách bằng ống |
Khối chức năng
Phần tiêu đề “Khối chức năng”Hiển thị chức năng
Phần tiêu đề “Hiển thị chức năng”function mymodule_recent_show(array $options): array{ // Parse options $limit = (int) ($options[0] ?? 10); $categoryId = (int) ($options[1] ?? 0); $sortBy = $options[2] ?? 'date';
// Get module helper $helper = \Xmf\Module\Helper::getHelper('mymodule'); $handler = $helper->getHandler('Item');
// Build criteria $criteria = new \CriteriaCompo(); $criteria->add(new \Criteria('status', 'published'));
if ($categoryId > 0) { $criteria->add(new \Criteria('category_id', $categoryId)); }
$criteria->setSort($sortBy === 'popular' ? 'views' : 'created_at'); $criteria->setOrder('DESC'); $criteria->setLimit($limit);
// Fetch items $items = $handler->getObjects($criteria);
// Build block array $block = []; foreach ($items as $item) { $block['items'][] = [ 'id' => $item->getVar('id'), 'title' => $item->getVar('title'), 'link' => $helper->url("item.php?id=" . $item->getVar('id')), 'date' => formatTimestamp($item->getVar('created_at'), 's'), 'summary' => $item->getVar('summary'), 'views' => $item->getVar('views'), ]; }
$block['show_summary'] = $helper->getConfig('block_show_summary');
return $block;}Chức năng chỉnh sửa
Phần tiêu đề “Chức năng chỉnh sửa”function mymodule_recent_edit(array $options): string{ $helper = \Xmf\Module\Helper::getHelper('mymodule');
// Option 1: Number of items $form = _MI_MYMODULE_BLOCK_LIMIT . ': '; $form .= '<input type="text" name="options[0]" value="' . ($options[0] ?? 10) . '" size="5">'; $form .= '<br>';
// Option 2: Category select $form .= _MI_MYMODULE_BLOCK_CATEGORY . ': '; $form .= '<select name="options[1]">'; $form .= '<option value="0">' . _ALL . '</option>';
$categoryHandler = $helper->getHandler('Category'); $categories = $categoryHandler->getObjects(); foreach ($categories as $cat) { $selected = ($cat->getVar('id') == ($options[1] ?? 0)) ? ' selected' : ''; $form .= '<option value="' . $cat->getVar('id') . '"' . $selected . '>'; $form .= $cat->getVar('name') . '</option>'; } $form .= '</select><br>';
// Option 3: Sort order $form .= _MI_MYMODULE_BLOCK_SORT . ': '; $form .= '<select name="options[2]">'; $sortOptions = ['date' => _MI_MYMODULE_SORT_DATE, 'popular' => _MI_MYMODULE_SORT_POPULAR]; foreach ($sortOptions as $value => $label) { $selected = ($value == ($options[2] ?? 'date')) ? ' selected' : ''; $form .= '<option value="' . $value . '"' . $selected . '>' . $label . '</option>'; } $form .= '</select>';
return $form;}Mẫu khối
Phần tiêu đề “Mẫu khối”{* templates/blocks/mymodule_block_recent.tpl *}<div class="mymodule-block-recent"> <{if $block.items}> <ul class="item-list"> <{foreach item=item from=$block.items}> <li class="item"> <a href="<{$item.link}>" class="item-title"> <{$item.title}> </a> <{if $block.show_summary && $item.summary}> <p class="item-summary"><{$item.summary|truncate:100}></p> <{/if}> <span class="item-meta"> <span class="date"><{$item.date}></span> <span class="views"><{$item.views}> views</span> </span> </li> <{/foreach}> </ul> <{else}> <p class="no-items"><{$smarty.const._MI_MYMODULE_NO_ITEMS}></p> <{/if}></div>Chặn với hỗ trợ nhân bản
Phần tiêu đề “Chặn với hỗ trợ nhân bản”Các khối có thể nhân bản cho phép nhiều phiên bản:
$modversion['blocks'][] = [ 'file' => 'blocks/category.php', 'name' => '_MI_MYMODULE_BLOCK_CATEGORY', 'description' => '_MI_MYMODULE_BLOCK_CATEGORY_DESC', 'show_func' => 'mymodule_category_show', 'edit_func' => 'mymodule_category_edit', 'template' => 'mymodule_block_category.tpl', 'options' => '0', 'can_clone' => true, // Enable cloning];Nội dung khối động
Phần tiêu đề “Nội dung khối động”Khối được tải bằng AJAX
Phần tiêu đề “Khối được tải bằng AJAX”function mymodule_ajax_show(array $options): array{ $block = [ 'block_id' => $options['bid'] ?? 0, 'ajax_url' => XOOPS_URL . '/modules/mymodule/ajax/block.php', 'interval' => (int) ($options[0] ?? 30), // Refresh interval in seconds ];
return $block;}{* Template with AJAX refresh *}<div id="mymodule-block-<{$block.block_id}>" class="ajax-block"> <div class="block-content"></div></div>
<script>(function() { const container = document.getElementById('mymodule-block-<{$block.block_id}>'); const url = '<{$block.ajax_url}>?bid=<{$block.block_id}>';
function loadContent() { fetch(url) .then(response => response.text()) .then(html => { container.querySelector('.block-content').innerHTML = html; }); }
loadContent(); setInterval(loadContent, <{$block.interval}> * 1000);})();</script>Các phương pháp hay nhất
Phần tiêu đề “Các phương pháp hay nhất”- Kết quả bộ đệm - Bộ nhớ đệm các truy vấn đắt tiền
- Xác thực tùy chọn - Luôn xác thực các tùy chọn khối
- Escape Output - Dọn dẹp tất cả nội dung của người dùng
- Sử dụng Tiêu chí - Xây dựng truy vấn với Tiêu chí class
- Giới hạn truy vấn - Đặt giới hạn hợp lý cho hiệu suất
- Mẫu đáp ứng - Đảm bảo các khối hoạt động trên thiết bị di động
Tài liệu liên quan
Phần tiêu đề “Tài liệu liên quan”- Module-Development - Hướng dẫn tạo module
- ../02-Core-Concepts/Templates/Smarty-Templates - Cú pháp mẫu
- ../04-API-Reference/Template/Template-System - Công cụ tạo mẫu XOOPS
- xoops_version.php - Bản kê khai mô-đun