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();
 
fr/release/3.7.txt · Dernière modification: 2008/03/17 15:47 par 193.54.109.8
 
 
Recent changes RSS feed Valid XHTML 1.0 Valid CSS Powered by PHP Driven by DokuWiki
©2003-2008 Pxxo