====== Le 12 janvier 3007, Pxxo 4.0 ======
===== ThemePaths paramétrable =====
L'utilisateur peut maintenant passer en paramètre un chemin à prendre en priorité pour le thème du widget.
Par exemple : $params['themepath'] = 'chemin/vers/mon/theme/perso';
Ce chemin sera alors automatiquement ajouté en préfixe du ThemePath du widget en question.
===== Thèmes hiérarchiques =====
Lorsqu'un widget utilise d'autre widgets (qui sont donc des fils), son thème doit pouvoir surcharger le thème de chacun de ses fils. Pour cela il suffit d'ajouter dans son répertoire de thème des répertoires ayant le même nom que les widgets fils.
Par exemple, le widget Pxxo_Widgets_Auth utilise le widget Pxxo_Widgets_Form_Generic. La structure
du thème a cette forme :
Pxxo/Widgets/Auth/defaut/defaut.php.html
Pxxo/Widgets/Auth/defaut/style.php.css
Pxxo/Widgets/Auth/defaut/Pxxo_Widgets_Form_Generic/style.php.css
===== Ajout d'une méthode =====
La méthode $this->setTemplateRaw(); fait son apparition, on peut maintenant définir un template sans forcément qu'il soit dans un fichier...
Exemple :
class test extends Pxxo_widgets {
var $texte = '';
function xxx() {
parent::Pxxo_Widgets(array(), __FILE__);
}
function defaut()
{
$this->setTemplateRaw('defaut', '');
$this->texte = 'hello you';
}
}
===== Hiérarchisation du retour des paramètres =====
Seuls sont conservés les paramètres de la première méthode exécutée soit par une action standard, soit par un connect.
Par exemple le code suivant :
require_once 'Pxxo/Widgets.php';
class xxx extends Pxxo_widgets {
var $fils = '';
var $trace = '';
function xxx($f = '') {
parent::Pxxo_Widgets(array(), __FILE__);
$this->setTemplateRaw('defaut', '');
$this->fils = $f;
}
function defaut()
{
if (!empty($this->fils)) {
$o = new $this->fils();
$this->putWidget('TRUC', $o);
$o->connect('action', &$this, 'action', array());
}
return array('x');
}
function action($data = array())
{
array_push($data, $this->ClassName);
$this->trace =$this->ClassName." => ".implode(',', $data);
return $data;
}
}
class a extends xxx {
function a() {
parent::xxx('b');
}
}
class b extends xxx {
function b() {
parent::xxx('c');
}
}
class c extends xxx {
function c() {
parent::xxx('d');
}
}
class d extends xxx {
function d() {
parent::xxx('e');
}
}
class e extends xxx {
function e() {
parent::xxx();
}
}
$_GET['e'] = 'action';
$o = new a();
$o->main();
$o->dump();
affichera :
e => e
d => e,d
c => e,d,c
b => e,d,c,b
a => e,d,c,b,a
===== Mode Debug =====
La trace produite lors de l'activation du mode debug est maintenant beaucoup plus riche. On peut maintenant vraiment bien suivre les différents traitements.
===== Nouvelles variables dans la classe Pxxo_Widgets/Pxxo_Component =====
On peut maintenant accéder à l'instance de chaque objet (widget, component) fils à l'aide du tableau $this->Components
De la même manière, on peut accéder à l'instance de chaque ressource à l'aide du tableau $this->Resources
===== Gestion des ressources =====
Les fichiers de ressources sont générés dans un répertoire uniquement.
Le mécanisme de cache s'applique également aux ressources en évitant de régénérer des fichiers identiques à chaque appel.
===== Gestion des erreurs =====
Plusieurs erreurs qui étaient tolérées avant ne le sont plus, je pense à l'ajout de fichier de ressource qui n'existe pas, ou à la non définition d'un template pour une méthode.