Δομή Ενότητας
Επισκόπηση
Ενότητα με τίτλο «Επισκόπηση»Μια καλά οργανωμένη δομή μονάδας είναι θεμελιώδης για τη διατηρούμενη ανάπτυξη XOOPS. Αυτός ο οδηγός καλύπτει τόσο παλαιού τύπου όσο και σύγχρονες (PSR-4) διατάξεις μονάδων.
Τυπική διάταξη ενότητας
Ενότητα με τίτλο «Τυπική διάταξη ενότητας»# Δομή παλαιού τύπου
Ενότητα με τίτλο «# Δομή παλαιού τύπου»modules/mymodule/├── admin/ # Admin panel files│ ├── index.php # Admin dashboard│ ├── menu.php # Admin menu definition│ ├── permissions.php # Permission management│ └── templates/ # Admin templates├── assets/ # Frontend resources│ ├── css/│ ├── js/│ └── images/├── class/ # PHP classes│ ├── Common/ # Shared utilities│ │ ├── Breadcrumb.php│ │ └── Configurator.php│ ├── Form/ # Custom form elements│ └── Handler/ # Object handlers├── include/ # Include files│ ├── common.php # Common initialization│ ├── functions.php # Utility functions│ ├── oninstall.php # Installation hooks│ ├── onupdate.php # Update hooks│ └── onuninstall.php # Uninstallation hooks├── language/ # Translations│ ├── english/│ │ ├── admin.php # Admin strings│ │ ├── main.php # Frontend strings│ │ ├── modinfo.php # Module info strings│ │ └── help/ # Help files│ └── other_language/├── sql/ # Database schemas│ └── mysql.sql # MySQL schema├── templates/ # Smarty templates│ ├── admin/│ └── blocks/├── blocks/ # Block functions├── preloads/ # Preload classes├── xoops_version.php # Module manifest├── header.php # Module header├── footer.php # Module footer└── index.php # Main entry point# Σύγχρονη PSR-4 Δομή
Ενότητα με τίτλο «# Σύγχρονη PSR-4 Δομή»modules/mymodule/├── src/ # PSR-4 autoloaded source│ ├── Controller/ # Request handlers│ │ ├── ArticleController.php│ │ └── CategoryController.php│ ├── Service/ # Business logic│ │ ├── ArticleService.php│ │ └── CategoryService.php│ ├── Repository/ # Data access│ │ ├── ArticleRepository.php│ │ └── ArticleRepositoryInterface.php│ ├── Entity/ # Domain objects│ │ ├── Article.php│ │ └── Category.php│ ├── DTO/ # Data transfer objects│ │ ├── CreateArticleDTO.php│ │ └── UpdateArticleDTO.php│ ├── Event/ # Domain events│ │ └── ArticleCreatedEvent.php│ ├── Exception/ # Custom exceptions│ │ └── ArticleNotFoundException.php│ ├── ValueObject/ # Value types│ │ └── ArticleId.php│ └── Middleware/ # HTTP middleware│ └── AuthenticationMiddleware.php├── config/ # Configuration│ ├── routes.php # Route definitions│ ├── services.php # DI container config│ └── events.php # Event listeners├── migrations/ # Database migrations│ ├── 001_create_articles.php│ └── 002_add_indexes.php├── tests/ # Test files│ ├── Unit/│ └── Integration/├── templates/ # Smarty templates├── language/ # Translations (JSON)│ ├── en/│ │ └── main.json│ └── de/├── assets/ # Frontend resources├── module.json # Module manifest (XOOPS 4.0)└── composer.json # Composer configΕπεξήγηση αρχείων κλειδιών
Ενότητα με τίτλο «Επεξήγηση αρχείων κλειδιών»# xoops_version.php (Legacy Manifest)
Ενότητα με τίτλο «# xoops_version.php (Legacy Manifest)»<?php$modversion = [ 'name' => 'My Module', 'version' => '1.0.0', 'description' => 'Module description', 'author' => 'Your Name', 'credits' => 'Contributors', 'license' => 'GPL 2.0', 'dirname' => basename(__DIR__), 'modicons16' => 'assets/images/icons/16', 'modicons32' => 'assets/images/icons/32', 'image' => 'assets/images/logo.png',
// System 'system_menu' => 1, 'hasAdmin' => 1, 'adminindex' => 'admin/index.php', 'adminmenu' => 'admin/menu.php', 'hasMain' => 1,
// Database 'sqlfile' => ['mysql' => 'sql/mysql.sql'], 'tables' => ['mymodule_items', 'mymodule_categories'],
// Templates 'templates' => [ ['file' => 'mymodule_index.tpl', 'description' => 'Index page'], ['file' => 'mymodule_item.tpl', 'description' => 'Item detail'], ],
// Blocks 'blocks' => [ [ 'file' => 'blocks/recent.php', 'name' => '_MI_MYMOD_BLOCK_RECENT', 'description' => '_MI_MYMOD_BLOCK_RECENT_DESC', 'show_func' => 'mymodule_recent_show', 'edit_func' => 'mymodule_recent_edit', 'template' => 'mymodule_block_recent.tpl', 'options' => '5|0', ], ],
// Config 'config' => [ [ 'name' => 'items_per_page', 'title' => '_MI_MYMOD_ITEMS_PER_PAGE', 'description' => '_MI_MYMOD_ITEMS_PER_PAGE_DESC', 'formtype' => 'textbox', 'valuetype' => 'int', 'default' => 10, ], ],];# module.json (XOOPS 4.0 Manifest)
Ενότητα με τίτλο «# module.json (XOOPS 4.0 Manifest)»{ "name": "My Module", "slug": "mymodule", "version": "1.0.0", "description": "Module description", "author": "Your Name", "license": "GPL-2.0-or-later", "php": ">=8.2",
"namespace": "XoopsModules\\MyModule", "autoload": "src/",
"admin": { "menu": "config/admin-menu.php" },
"routes": "config/routes.php", "services": "config/services.php", "events": "config/events.php",
"templates": [ {"file": "index.tpl", "description": "Index page"} ],
"config": { "items_per_page": { "type": "int", "default": 10, "title": "@mymodule.config.items_per_page" } }}Σκοποί καταλόγου
Ενότητα με τίτλο «Σκοποί καταλόγου»| Κατάλογος | Σκοπός |
|---|---|
admin/ | Διεπαφή διαχείρισης |
assets/ | CSS, JavaScript, εικόνες |
blocks/ | Λειτουργίες απόδοσης μπλοκ |
class/ | PHP τάξεις (κληρονομιά) |
config/ | Αρχεία διαμόρφωσης (σύγχρονα) |
include/ | Κοινόχρηστα αρχεία |
language/ | Αρχεία μετάφρασης |
migrations/ | Μετακινήσεις βάσεων δεδομένων |
sql/ | Αρχικό σχήμα βάσης δεδομένων |
src/ | PSR-4 πηγαίος κώδικας |
templates/ | Έξυπνα πρότυπα |
tests/ | Δοκιμαστικά αρχεία |
Βέλτιστες πρακτικές
Ενότητα με τίτλο «Βέλτιστες πρακτικές»- Ξεχωριστές ανησυχίες - Κρατήστε την επιχειρηματική λογική μακριά από τα πρότυπα
- Χρησιμοποιήστε Χώρους ονομάτων - Οργάνωσε τον κώδικα με τον κατάλληλο χώρο ονομάτων
- Ακολουθήστε το PSR-4 - Χρησιμοποιήστε τυπικές συμβάσεις αυτόματης φόρτωσης
- Externalize Config - Διατηρήστε τη διαμόρφωση χωριστά από τον κώδικα
- Δομή εγγράφου - Συμπεριλάβετε το README επεξηγητικό οργανισμό
Σχετική τεκμηρίωση
Ενότητα με τίτλο «Σχετική τεκμηρίωση»- Module-Development - Πλήρης οδηγός ανάπτυξης
- Best-Practices/Code-Organization - Μοτίβα οργάνωσης κωδικών
- Module Manifest - Διαμόρφωση Manifest
- Database/Database-Schema - Σχεδιασμός βάσης δεδομένων