Abstracthtml generator

Description

Vous trouverez sans aucun doute beaucoup de sources vous permettant de generer des formulaires.
Cependant je ne sais pas pour vous mais je n'ai jamais trouve exactement ce que je cherchai aussi je me suis attele a la tache.

La source est assez complexe aussi vous trouverez toute la documentation Doxygen dans le dossier doxygen
pour vous aider a comprendre sont fonctionnement.

L'abstract HTML Generator est beaucoup plus qu'un simple generateur de formulaires,
il vous permettra de generer de maniere simple (a priori) n'importe quelle balise html dans
la mesure ou elle est autorisee la ou il faut le specifier (et ceci par pur souci de stabilite).

En partant de l'idee d'un generateur de formulaire souple je suis arrive a un generateur de code html.

Parlons un peu de sa conception :

NB : le mot tag est a traduire par balise

Les classes abstraites :

AFactoryMethod :

Cette classe abstraite est un design pattern "Factory Method", elle permet de simplifier
grandement l'instanciation des objet Html a generer et de passer par defaut par l'instanciation
de l'objet de base HtmlTag en cas de non implementation de l'objet Html. Par principe j'ai
decide d'en implementer le MOINS possible sous la forme de classes heritees dans la mesure ou certains traitements etaient
fesable au cas par cas sans trop allourdir la classe de base et qui evitent d'avoir a implementer
l'objet Html pour presque rien.

AHtmlTag :

Cette classe abstraite est herite par la classe HtmlTag et defini un certain nombre de constantes
que l'on pourrai considerer comme des regles de bases, ainsi que la fonction l'initialisation des
attributs d'une balise.
Le nom des constantes n'etant pas forcement explicite voici leur utilite en details :

protected static $TAGS :
contient la liste des balise connues et instanciables, si vous comptez modifier la
source et en ajouter de nouvelles il faut les specifier ici

protected static $TYPES :
contient la liste des type si la balise a un attribut type (ex : input)

protected static $ATTRIBUTES :
contient la liste des attribut de base d'une balise

protected static $FOLLOWING_TAGS_HAVE_ONLY_SPECIFIC_ATTRIBUTES :
contient la liste des balises n'ayant que des attributs specifiques et n'ayant pas
acces aux proprites de base (ex : option)

protected static $FOLLOWING_TAGS_SET_VALUE_OR_TEXT_AS_INNERHTML :
contient la liste des balises dont l'attribut text ou value sera affiche en tant
que innerHtml

protected static $FOLLOWING_TAGS_DONT_HAVE_ANY_ATTRIBUTES :
contient la liste des balises n'ayant aucun attribut particuliers (ex : br)

protected static $UNNOMITATES :
contient la liste des balises directement fermees a la declaration

protected static $FORM_ATTRIBUTES
protected static $LABEL_ATTRIBUTES
protected static $TEXTAREA_ATTRIBUTES
protected static $INPUT_ATTRIBUTES
protected static $SELECT_ATTRIBUTES
protected static $OPTION_ATTRIBUTES :

Ici nous retrouvons la liste des attributs specifiques a une balise sous la forme
d'un tableau portant le nom de la balise + '_ATTRIBUTES', ce tableau est utilise a
l'initialisation des attributs d'une balise

protected static $EVENTS :
evenement js qu'une balise peu declencher (implementation de la generation des scripts
js a venir)

AHtml :
Elle implemente du sucre syntaxique et la possibilite de recuperer un objet html de
maniere statique et c'est tout ! Son code est volontairement redondant dans la mesure
ou le sucre syntaxique est base sur le nom de de la fonction statique, c'est sur que
AHtml::Button(tableau_associatif_des_proprietes) c'est plus clair que new HtmlTag et
tout le bazard ^_^ Sinon elle sert a rien d'autre :p

Les classes importantes :

Ou plutot LA classe importante ici est HtmlTag.
Elle represente une balise html lambda, les balise ayant besoin de traitement specifique
(ex : HtmlForm) heriterons toutes de HtmlTag, ici on s'occupe de la creation d'une balise
ainsi que des autres balises que contiendrai eventuelement celle ci, en effet comme vous le
pouvez en html vous pouvez ici ajouter des balises dans une balise ex :
un div qui contiendrai un label + un champ de formulaire nous donne une jolie ligne de formulaire :)

UnaryTest :
est une classe de test unitaire, rien de special

SyntaxeExemple & TableExemple:
tout est dans le nom

HtmlObjectsInclude n'est pas une classe mais juste une liste des classes objets
html implementes a inclure comme HtmlForm et HtmlTable car leurs traitement
sont specifiques

Pour bien utiliser cet outil il faut avant tout bien comprendre comment on accede au elements crees ainsi que la syntaxe.

Si une balise manque rien de plus simple pour l'implementer vous devrez :

1. Aller dans le fichier AHtmlTag
2. Rajouter le tag dans $TAGS
3. Rajouter dans la section des attributs specifiques la liste des attributs que vous souhaitez autoriser
Par exemple pour implementer la balise A j'ai rajoute $A_ATTRIBUTES
4. C'est optionnel mais rejouter le sucre syntaxique dans la classe AHtml
5. C'est tout ! :D

Bonne generation !

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.