====== Normes de codage pour les versions 1.5 (2010) ====== Ce document est à l'état de brouillon, il est susceptible d'être modifié à tout moment. ===== Configuration ===== * La configuration est constituée de plusieurs fichiers XML * Chaque fichier est chargé séquentiellement, selon un ordre établi * Chaque nouveau fichier chargé complète et/ou remplace les informations de configuration déjà définies par un fichier précédemment chargé * Les fichiers de configuration sont placés dans le dossier ''application/config/'' [[config-system-xml|Contenu du fichier system.xml]] ==== Fichier system.xml ==== * Le premier fichier à être chargé est le fichier ''system.xml'', qui définit les valeurs par défaut des options de configurations requises par l'application ==== Fichier local.xml ==== * Le second fichier de configuration à être chargé est le fichier ''local.xml'', il remplace une partie des valeurs définies par [[#fichier-systemxml|le fichier system.xml]] avec les valeurs propres au serveur. ==== Fichiers de chargement de modules ==== * Une fois les fichiers [[#fichier-systemxml|system.xml]] et [[#fichier-localxml|local.xml]] chargés, l'ensemble des fichiers XML du dossier ''modules/'' sont chargés à leur tour et ajoutés à la configuration. * Ces fichiers n'ont pour seul but que de lister les modules présents sur le serveur * Chaque élément définissant un module renseigne également si le module est activé ou non et quelle est la [[#plage-de-code-code-pool|plage de code]] dans laquelle il se trouve * Un module doit afficher ses dépendances vis-à-vis des autres modules, à l'exception du module ''Nova_Core'' qui définit les classes de base de tous les autres modules. * Désactiver un module le désactivera pour tous les jeux présents sur le serveur * Pour charger un module nommé ''Bar'', placé dans l'espace de noms ''Foo'', et dépendant du module ''Nova_Core'', il suffit de créer un fichier XML dans ce dossier avec le contenu suivant : core true ==== Fichiers de configuration des modules ==== * Dès que tous [[#fichiers-de-chargement-de-modules|les fichiers du dossier modules/]] sont chargés, la configuration de chacun des modules est ensuite chargée. * Chaque module doit avoir un fichier de configuration nommé ''config/module.xml'' * Ce fichier de configuration détermine la configuration pour les [[#forges-de-classes|forges de classes]] fournies par la classe ''Nova'', les fichiers de traductions du modules, ses layouts, les tables qu'il utilise, ect... ===== Plage de code (Code Pool) ===== * Une page de code permet de différencier la provenance du code source des modules qu'il contient * Les plages sont placés dans le dossier ''application/code/'' * Il existe 3 plages de code : ''core'', ''community'' et ''local'' * La plage ''core'' est géré par l'équipe de développement de XNova, **modifier le contenu de ce dossier vous empêchera de mettre à jour votre jeu à l'avenir**. * La plage ''community'' contient les modules fournis par la communauté et géré par un de ses membres, **modifier le contenu de ce dossier vous empêchera de mettre à jour vos modules communautaires à l'avenir** * La plage ''local'' contient votre propre code source, que vous pouvez modifier, selon ce dont vous avez beosoin ==== include_path et plages de code ==== * La directive PHP ''include_path'', permettant de définir les chemins de recherche des fichiers inclus, contient toutes les plages de code dans l'ordre ''local'', ''community'' et ''core''. * Il devient possible de modifier une classe de la plage ''core'' ou ''community'' en la copiant dans la plage ''local'', dans la même arborescence, puis de la modifier. ===== Espaces de noms ===== * Un espace de noms permet de regrouper plusieurs modules destinés à fonctionner ensemble et ne pas les faire interférer avec d'autres modules qui pourraient porter le même nom. * Un espace de noms est orthographié en ''CamelCase'' ((Chacun des mots est accolé à son voisin de gauche, toutes les lettres sont en minuscule à l'exception de la première lettre de chaque mot)) * Un espace de noms est représenté dans l'arborescence par un dossier placé dans une plage de code ===== Modules ===== * Un module regroupe plusieurs classes en un groupe de fonctionnalités ne pouvant pas être séparées les unes des autres. * Un module doit être identifié de façon unique dans l'arborescence, le code source et la configuration * Un module doit faire partie d'un espace de noms * Un espace de noms est orthographié en ''CamelCase'' ((Chacun des mots est accolé à son voisin de gauche, toutes les lettres sont en minuscule à l'exception de la première lettre de chaque mot)) * Un module se nomme d'après un nom commun au singulier, en anglais * Toutes les classes d'un module se nomment d'après le nom de l'espace de nom et du nom du module. Exemples: * ''EspaceDeNom_Module_Foo_Bar'' * ''Nova_Core_Object'' * ''Nova_User_Model_User'' ===== Classes =====