Migliori Pratiche di Integrazione Frontend
Migliori Pratiche di Integrazione Frontend in XOOPS
Sezione intitolata “Migliori Pratiche di Integrazione Frontend in XOOPS”I moduli XOOPS moderni richiedono una chiara integrazione frontend con design responsivo, pattern JavaScript appropriati e funzionalità AJAX.
Integrazione Bootstrap 5
Sezione intitolata “Integrazione Bootstrap 5”{* 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>Esempio di Form Bootstrap
Sezione intitolata “Esempio di Form Bootstrap”<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>Esempio di Tabella Bootstrap
Sezione intitolata “Esempio di Tabella Bootstrap”<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>Migliori Pratiche JavaScript
Sezione intitolata “Migliori Pratiche JavaScript”// Module patternconst 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 readydocument.addEventListener('DOMContentLoaded', () => MyModule.init());Implementazione AJAX
Sezione intitolata “Implementazione AJAX”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 }); }};
// UsageAjaxHelper.get('/modules/mymodule/api/users') .then(response => { if (response.success) { MyModule.notify('Loaded successfully', 'success'); } });Controller API AJAX
Sezione intitolata “Controller API AJAX”<?phpclass 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()]; } }}?>Migliori Pratiche
Sezione intitolata “Migliori Pratiche”- Usa Bootstrap per un design responsivo coerente
- Usa JavaScript moderno (ES6+), non jQuery
- Usa Fetch API invece di XMLHttpRequest
- Sempre validare sul lato server
- Mostra stati di caricamento in richieste AJAX
- Fornisci messaggi di errore chiari
- Usa HTML semantico
- Ottimizza immagini e asset
- Usa HTTPS per tutte le richieste
Documentazione Correlata
Sezione intitolata “Documentazione Correlata”Vedi anche:
- Code-Organization per l’organizzazione degli asset
- Error-Handling per la visualizzazione degli errori
- ../Patterns/MVC-Pattern per l’integrazione del controller
Tags: #best-practices #frontend #bootstrap #javascript #ajax #module-development