Bỏ qua để đến nội dung

Các phương pháp hay nhất về tích hợp giao diện người dùng

Các phương pháp hay nhất về tích hợp giao diện người dùng trong XOOPS

Phần tiêu đề “Các phương pháp hay nhất về tích hợp giao diện người dùng trong XOOPS”

XOOPS modules hiện đại yêu cầu tích hợp giao diện người dùng rõ ràng với thiết kế đáp ứng, mẫu JavaScript phù hợp và chức năng AJAX.

{* Include Bootstrap CSS *}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css"
rel="stylesheet">
{* Your content *}
<div class="container mt-4">
<h1>My Module</h1>
</div>
{* Include Bootstrap JS *}
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<div class="card">
<div class="card-body">
<form method="POST" class="needs-validation">
<div class="mb-3">
<label for="username" class="form-label">Username</label>
<input type="text" class="form-control" id="username" name="username">
</div>
<div class="mb-3">
<label for="email" class="form-label">Email</label>
<input type="email" class="form-control" id="email" name="email">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
<div class="table-responsive">
<table class="table table-striped">
<thead class="table-dark">
<tr>
<th>ID</th>
<th>Username</th>
<th>Email</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{foreach from=$users item=user}
<tr>
<td>{$user.id|escape}</td>
<td>{$user.username|escape}</td>
<td>{$user.email|escape}</td>
<td>
<a href="?op=edit&id={$user.id}" class="btn btn-sm btn-warning">Edit</a>
<a href="?op=delete&id={$user.id}" class="btn btn-sm btn-danger">Delete</a>
</td>
</tr>
{/foreach}
</tbody>
</table>
</div>
// Module pattern
const MyModule = {
init: function() {
this.initTooltips();
this.initEventListeners();
},
initTooltips: function() {
// Initialize Bootstrap tooltips
},
initEventListeners: function() {
// Attach event handlers
document.addEventListener('click', (e) => {
if (e.target.classList.contains('btn-delete')) {
return confirm('Delete this item?');
}
});
},
notify: function(message, type = 'info') {
const alertClass = `alert-${type}`;
const html = `
<div class="alert ${alertClass} alert-dismissible fade show">
${message}
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
`;
document.body.insertAdjacentHTML('afterbegin', html);
}
};
// Initialize when DOM ready
document.addEventListener('DOMContentLoaded', () => MyModule.init());
const AjaxHelper = {
request: function(url, options = {}) {
const defaults = {
method: 'GET',
headers: { 'Content-Type': 'application/json' }
};
const config = { ...defaults, ...options };
return fetch(url, {
method: config.method,
headers: config.headers,
body: config.body ? JSON.stringify(config.body) : null
})
.then(response => response.json())
.catch(error => console.error('Error:', error));
},
get: function(url) {
return this.request(url, { method: 'GET' });
},
post: function(url, data) {
return this.request(url, { method: 'POST', body: data });
}
};
// Usage
AjaxHelper.get('/modules/mymodule/api/users')
.then(response => {
if (response.success) {
MyModule.notify('Loaded successfully', 'success');
}
});
<?php
class ApiController
{
public function getUsersAction()
{
try {
$users = $this->userService->getActiveUsers();
return [
'success' => true,
'data' => array_map(fn($u) => $u->toArray(), $users),
];
} catch (\Exception $e) {
http_response_code(500);
return ['success' => false, 'message' => $e->getMessage()];
}
}
public function createUserAction()
{
try {
$input = json_decode(file_get_contents('php://input'), true);
$userDTO = $this->userService->register(
$input['username'],
$input['email'],
$input['password']
);
http_response_code(201);
return ['success' => true, 'data' => $userDTO->toArray()];
} catch (\Exception $e) {
http_response_code(400);
return ['success' => false, 'message' => $e->getMessage()];
}
}
}
?>
  • Sử dụng Bootstrap để có thiết kế đáp ứng nhất quán
  • Sử dụng JavaScript (ES6+) hiện đại, không phải jQuery
  • Sử dụng Tìm nạp API thay vì XMLHttpRequest
  • Luôn xác thực phía máy chủ
  • Hiển thị trạng thái tải trong yêu cầu AJAX
  • Cung cấp thông báo lỗi rõ ràng
  • Sử dụng ngữ nghĩa HTML
  • Tối ưu hóa hình ảnh và assets
  • Sử dụng HTTPS cho tất cả các yêu cầu

Xem thêm:

  • Mã-Tổ chức cho tổ chức tài sản
  • Xử lý lỗi hiển thị lỗi
  • ../Patterns/MVC-Pattern để tích hợp bộ điều khiển

Tags: #cách thực hành tốt nhất #frontend #bootstrap #javascript #ajax #module-development