Un composant graphique est une interface homme machine (IHM) dans lequel un utilisateur peut réaliser ou non une ou plusieurs actions. Les composants graphiques créés grâce à PXXO s'appellent des Widgets.
PXXO est totalement orienté programmation objet, ainsi un Widget est un objet. Un objet est défini par une classe. Les méthodes publiques de cette classe correspondent aux actions du Widget. Chaque action génère une interface, cette interface est définie dans un template.
Les variables publiques de la classe correspondent aux données affichées par le Widget. Par convention, les variables privées commencent par le caractère _.
Exemple:
private $_mavariable;
Un template (ou squelette, ou modèle, ou encore gabarit) est un fichier contenant le code HTML qui servira à produire une interface. A chaque méthode de la classe (donc à chaque action du widget) est associée un seul et unique fichier de template. Les templates accèdent uniquement aux variables publiques de la classe.
Les templates ne possèdent pas leur propre langage de programmation, ce sont de simples fichiers PHP.
Les widgets possèdent ou non des ressources. Une ressource est un fichier externe au template, mais nécessaire pour produire une interface.
Dans le contexte Web, une ressource peut être une image, un fichier CSS (définition des couleurs, des polices, etc.) et même un fichier Javascript.
Pxxo permet de séparer très clairement le code entre :
Il devient possible pour un même widget d'avoir plusieurs interfaces différentes. Ces looks différents sont appelés des thèmes.
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
Remarque : avec PHP4 il faudra utiliser des noms de répertoire en minuscule