====== Le 11 septembre 2006, Pxxo 3.7 ====== ===== Identifiant des classes Pxxo_Action ===== Jusqu'à maintenant, l'identification des classes Pxxo_Action est assurée par la variable de classe **$varnamemode**. Cette variable est maintenant obsolète, l'identification de classe est assurée dorénavant par 2 variables de classe : * //ClassName// : Cette variable est calculée automatiquement mais peut aussi être surchargée. Elle sert de préfixe au calcul du ClassID et donne un nom au répertoire dans lequel on pourra placer des ressources ou des templates de substitution. * //ClassID// : Cette variable remplace la variable varnamemode à la différence près qu'elle est calculée automatiquement. ===== Réorganisation des fichiers et des répertoires ===== L'ensemble des fichiers qui composent Pxxo ont été renommés et placés dans une nouvelle arborescence de fichier. Cette réorganisation permet d'être enfin totalement compatible avec les conventions PEAR. Malgré tout, les anciens fichiers sont toujours présents ce qui assure la compatibilité avec les versions précédentes. Les noms de classe restent inchangés. Exemples : | Avant | Après | | require_once 'Pxxo/Pxxo_Action.php'; | require_once 'Pxxo/Action.php'; | | require_once 'Pxxo/Pxxo_Phptpl.php'; | require_once 'Pxxo/Phptpl.php'; | | etc ... | etc ... | ===== Changements de noms ===== La classe Pxxo devient la classe Pxxo_Template. La classe Pxxo_View devient la classe Pxxo_Pago_View_Default. Leurs comportements restent inchangés. ===== Accès au contenu d'un composant ===== Maintenant vous pouvez récupérer facilement le contenu d'un composant après l'avoir ajouté. Les méthodes putComponent et putRessource renvoient le contenu qui sera inséré dans le template. ===== Pxxo_Config ===== La classe Pxxo_Config permet de gérer de manière simple et unique l'ensemble des paramètres globaux d'une application. Cette classe remplace avantageusement les définitions de constantes. Exemple : require_once 'Pxxo/Config.php'; $config = new Pxxo_Config; $config->path = dirname(__FILE__).DIRECTORY_SEPARATOR; $config->name = 'test'; $config->version = '0.1'; $config->url_root = '/test'; $config->class_core = 'aCore'; $config->class_args = array(); $config->class_prefix = 'a'; $config->class_path = $config->path.'class'.DIRECTORY_SEPARATOR.PATH_SEPARATOR.$config->path.'lib'.DIRECTORY_SEPARATOR; $config->cache_path = dirname(__FILE__).DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR; $config->cache_url = $config->url_root.'/cache/'; $config->cache_level = 0; $config->debug_level = 2; $config->session_flag = true; $config->session_auto = true; $config->register(); // On accède à un paramètre avec la méthode statique get echo Pxxo_Config::get('cache_url'); Liste des paramètres : | path | / | Chemin physique de la racine de l'application | | name | - | Nom physique (au sens UNIX) de l'application | | version | - | Numéro de version de l'application | | charset | UTF-8 | Charset de l'application | | language | fr | Langue par défaut de l'application | | url_root | / | Chemin dans l'URL de la racine de l'application | | url_base | - | URL complète vers la racine de l'application | | class_core | - | Nom de la première classe Pxxo mère de toutes les autres | | class_args | array() | Tableau contenant les arguments à donner au constructeur de la classe "class_core" | | class_prefix | a | Préfixe commun à toutes les classes Pxxo | | class_path | - | Liste des chemins (genre include_path) pour trouver les classes Pxxo | | cache_path | - | Chemin Physique vers le répertoire de cache | | cache_url | - | URL vers le répertoire de cache | | cache_level | 0 | Niveau du cache. 0 désactivé, etc... | | debug_level | 0 | Niveau de debug ( 0 désactivé, 1 : code HTML non "compressé et report de toutes les erreurs PHP, 2 : active la trace pxxo, 3 : active le profiler) | | session_flag | false | Le mode Session est-il activé ? (true/false) | | session_auto | false | Les sessions sont-elle activées automatiquement ? (true/false) | | controller_used | false | Utilisation ou non du controller ? (true/false) | | theme_name | - | Nom du thème par défaut pour les objets Pxxo_Pago_Action | | theme_path | - | Liste des chemins d'accès aux thèmes | | resources_path | . | chemin vers un répertoire physique où seront généré les resources | | resources_url | - | url correspondant au répertoire physique des resources | | xslt_engine | xsltproc | Moteur par défaut pour les transformations XSL. (dom, xsltproc, domxsl, sablotron) | | cache_engine | lite | Moteur par défaut pour la gestion du cache | | assemble_engine | xsl | Moteur par défaut pour l'assemblage dans la classe Pxxo_template (html, php, txt, xsl) | ===== Pxxo_Controller ===== La classe Pxxo_Controller permet d'analyser les URLs et d'en déduire quelles actions de quelles classes doivent être déclenchées. Il se charge également de charger et de lancer une première classe Pxxo_Action racine de toutes les autres. Avec Pxxo, pour déclencher l'action d'une classe Pxxo, on écrit : [valeur_du_varnamemode] = [nom_d_une_méthode] et ceci autant de fois que l'on souhaite déclencher d'actions simultanées. Et bien le Controller va tout simplement transformer une URL dans la forme précédente en suivant la règle suivante : Avec la classe racine aCore et l'URL : [/root]/action1/action2/action3/[?a=1&b=2] Le Controller va exécuter la classe aCore et générer les paramètres suivants : aCore = [préfix]Action1 [préfix]Action1 = [préfix]Action2 [préfix]Action2 = [préfix]Action3 Si on donne au Controller un tableau d'équivalence : action1 = une_classe action2 = une_autre_classe action3 = une_classe_bis Avec l'exemple précédent, on obtiendra les paramètres suivants : aCore = une_classe une_classe = une_autre_classe une_autre_classe = une_classe_bis Cette syntaxe permet d'obtenir 2 types de fonctionnement : * Simple : Avec la classe aCore et les URLs [/root]/truc/ et [/root]/bidule/ On exécute la méthode {truc} ou {bidule} da la classe {aCore} * Avancée : Avec l'URL [/root]/truc/chouette/ et une classe aCore est capable d'instancier des objets du même nom que la méthode déclenchée. (cf. ci après le code source de ce type de classe) On exécute l'objet la méthode {chouette} de la classe {aTruc} instancié par la méthode {aTruc} de la classe {aCore} Si on crée plusieurs classes avec un fonctionnement similaire à aCore, on peut obtenir un déclenchement récursif et hiérarchique d'objets. //Très compliqué d'approche, mais simple et puissant à l'usage.// class aCore extends Pxxo_Action { var $varnamemode = 'aCore'; function aCore() { $this->Pxxo_Action(); $this->enableStandaloneMode(); $this->setTemplatePath(dirname(__FILE__).DIRECTORY_SEPARATOR.$this->varnamemode); } function defaut() { $this->setTemplate('defaut','defaut.php.html'); $class = $this->getMode(); // Choix d'une classe à exécuter par defaut if ($class == 'defaut') $class = 'aIndex'; // Création automatique d'un objet Pxxo $o = Pxxo_Auto::create($class, $this->args); // On place le résultat dans la partie CONTENU du Template $this->putComponent('Pago', 'CONTENU', array(&$o)); } } ===== Mise en place du Controller ===== Pour rediriger correctement les URLs fictives, on utilise le mod_rewrite d'Apache avec par exemple ce fichier .htaccess : RewriteEngine on RewriteCond %{REQUEST_FILENAME} -f RewriteRule "." - [skip=100] RewriteCond %{REQUEST_FILENAME} -d RewriteRule "." - [skip=100] RewriteRule !\.(js|ico|gif|jpg|png|css)$ /root/index.php On y associera le fichier index.php suivant : // Définition de la configuration require_once 'Pxxo/Config.php'; $config = new Pxxo_Config; $config->path = dirname(__FILE__).DIRECTORY_SEPARATOR; $config->name = 'test'; $config->version = '0.1'; $config->url_root = '/root'; $config->class_core = 'aCore'; $config->class_args = array(); $config->class_path = '.;..;./class/'; $config->cache_path = '.' $config->cache_level = 0; $config->debug_level = 4; $config->register(); // Lancement du Controler require_once 'Pxxo/Controller.php'; $controller = new Pxxo_Controller(); $controller->listen();