Avancement de mon moteur de template ... - PHP - Programmation
Marsh Posté le 18-12-2005 à 09:17:41
Voici le mode debug en action :
Marsh Posté le 18-12-2005 à 11:38:04
Ba justement ca tombe bien, j'allais poser une question.
Je suis sur PHPlib et je voulais imbriquer un template secondaire dans un autre (mon principal). Ca permettrait déviter de tout refaire. Quelqu'un sait ?
thx
Marsh Posté le 18-12-2005 à 12:48:55
Pour phpLib je ne sais pas, mais pour le mien, c'est une bonne idée à laquelle je n'avais pas pensé
Allez hop, c'est parti pour une balise <ADDFILE file="greffon.tpl" />
Marsh Posté le 18-12-2005 à 21:46:58
Bon, j'ai pas mal avancé, j'ai aussi beaucoup avancé sur l'intégration d'un sous-template, mais je me rends compte d'une chose...
On est d'accord sur le fait que les templates ne sont pas dynamiques, donc où est l'intérêt de demander à intégrer un sous template ?
A chaque fois que le template est chargé, le script va devoir changer la balise <ADDFILE ...> par le contenu du sous-template ... ça bouffe des ressources pour rien.
L'autre solution serait d'enregistrer le fichier sur lui même une fois parsé.
Par exemple, dans le fichier "fichier1.tpl" il y a une balise <ADDFILE file="fichier2.tpl">, au chargement de "fichier1.tpl", la balise <ADDFILE...> est replacée par le contenu de "fichier2.tpl"... et on enregistre le tout dans "fichier1.tpl".
Comme ça la prochaine fois que le script est lancé, il n'a plus qu'un seul fichier à gérer ...
Oui mais, dans ce cas, à quoi ça sert d'avoir 2 fichiers templates ?
Donc je pense que je vais abandonner cette idée, et virer tout le code concernant ADDFILE.
Sauf si on me donne une bonne raison de ne pas le faire.
Marsh Posté le 20-12-2005 à 17:23:19
Edit : j'ai tout mis dans le 1er post.
Marsh Posté le 20-12-2005 à 18:21:37
Je déteste les "Serveur en cours de maintenance" quand je suis en train de poster
Heureusement que je fais toujours un copier-coller avant de poster un gros message
Marsh Posté le 21-12-2005 à 11:07:06
MàJ du 1er post.
En cours de développement : Gestion des boucles sur les blocs.
Marsh Posté le 21-12-2005 à 12:07:37
Màj 1er post.
v0.6.5b
Marsh Posté le 21-12-2005 à 16:11:14
v0.7b
Aout de la gestion des boucles
Marsh Posté le 21-12-2005 à 18:00:06
pour quandl a public j'en bave
Marsh Posté le 21-12-2005 à 18:10:02
Très bientôt
Ce soir ou demain...
Marsh Posté le 22-12-2005 à 22:48:54
Bon ben désolé, finalement il faudra attendre encore un peu.
J'ai continué le développement et la version actuelle n'est pas encore prête.
Voici les choses en cours de développement :
- Nouvelle fonction setGlobalVar() :
Fonctionne comme setVar() sauf qu'elle permet d'affecter une variable globale.
En effet, si on avait la variable {PSEUDO} dans les templates 'header', 'main' et 'account' par exemple, il fallait faire 3 setVar(), un par template.
setGlobalVar() permet donc de simplifier cette opération, et de remplacer les variables portant le même nom dans tous les templates déjà ouverts, et ce qui seront ouvert après cette affectation !
Si les 2 fonctions setVar() et setGlobalVar() sont utilisées, setVar() sera prioritaire sur le template concerné.
- Nouvelle fonction link() :
Cette fonction permettra de réaliser un lien facilement.
Exemples :
Fonction : |
Fonction : |
Fonction : |
Fonction : |
|
|
Voilà pour le moment
Marsh Posté le 08-01-2006 à 18:43:28
sa avance ou pas ?
Marsh Posté le 08-01-2006 à 20:21:36
Ca a bien avancé, mais ça ne me plaisait pas alors j'ai tout recommencé, là il est fini mais en mieux.
Juste 2-3 trucs à peaufiner, et je suis en train de faire le site.
Mais ça fait 2 jours que je suis assez malade (mauvaise grippe je crois), donc je n'avance plus pendant ce temps (cloué au lit), je ne me lève que pendant les (trop) rares périodes d'acalmie.
Je détaillerais les fonctions que j'ai ajoutée, et celle qui ne sont plus implémentées pour le moment, mais qui reviendront.
Donc voilà, désolé pour ce retard, mais il est en grande partie dû au recodage complet (j'ai repris à zéro) et surtout aux fêtes de fin d'années.
++
Marsh Posté le 09-01-2006 à 02:45:37
donc on va avoir un zoulie moteur hihi
Marsh Posté le 09-01-2006 à 11:52:55
Attention toutefois, bien que ça fait longtemps que je prends plaisir à coder en PHP, c'est mon 1er "vrai" projet. Il y aura sans doute beaucoup de chose à revoir, à améliorer et à ajouter. Mais Rome ne s'est pas faite en 1 jour.
Par exemple, ce qui m'a amené à recoder entièrement la 1ère version, c'est que lorsque j'ai commencé à l'utiliser pour créer mon site, je me suis rendu de quelques trucs bien génant.
Avec cette 2ème version, mon site à bien avancé, je suis donc moins "bloqué" mais je me rends compte de quelques trucs par ci par là à améliorer.
En tout cas je compte sur toutes les personnes qui l'essayeront (et ce même juste par curiosité) de me contacter afin de me proposer des idées pour améliorer, faire évoluer, et débugger BYSTE.
++
Marsh Posté le 09-01-2006 à 13:05:25
on peux pas avoir une démo ou du code ?
Marsh Posté le 09-01-2006 à 13:31:31
Si tu veux, tu peux me filer ton @mail en privé, je t'envoie la classe, mais à tes risques et périls
Marsh Posté le 10-01-2006 à 21:34:48
C'est envoyé
Voici une petite doc : ELLE N'EST PAS COMPLETE et toutes les possibilités n'y sont pas encore décrites.
$tpl = new byste($param); |
$param est le dossier par défaut des fichiers templates, s'il est omis, alors le chemin par défaut sera la racine du fichier qui appelle la classe.
$tpl->loadTemplate($fichier, $id); |
Charge un template.
$fichier est le nom du fichier template, par exemple 'index.tpl'
$id est le nom de l'identifiant de ce fichier, il sera utile pour la suite, car on peut charger plusieurs templates à la fois
$tpl->setVar($nomVar,$varValue,$tplId); |
Associe une valeur à une variable
$nomVar est le nom de la variable dans le fichier template. Si dans le fichier template une variable {HEURE} est définie, alors ici $nomVar sera 'HEURE'
$varValue est la valeur que l'on veut affecter à la variable, par exemple '20h55'
$tplId est l'identifiant du template dans lequel on veut changer cette variable.
Une variable peut également être "globale" :
$tpl->setVar($nomVar,$varValue,'global'); |
Le fait de remplacer le $tplId par le mot clé 'global' permet de définir une variable globale.
Exemple : nous avons chargé deux fichiers : fichier1.tpl et fichier2.tpl de cette manière :
$tpl->loadTemplate('fichier1.tpl','id1'); |
Admettons que ces 2 fichiers contiennent la variable {BONJOUR}
Si l'on fait :
$tpl->setVar('BONJOUR','Salut','id1') |
alors seule la variable BONJOUR du template fichier1.tpl sera modifiée.
Si l'on fait :
$tpl->setVar('BONJOUR','Salut','global') |
alors la variable sera modifiée dans tous les template la comprtant (dans notre cas id1 ET id2)
Des variables génériques peuvent être utilisées :
{_DATE_} : sera remplacée automatiquement par la date actuelle au format défini par $dateFormat (à configurer selon ses désirs)
{_TIME_} : sera remplacée automatiquement par l'heure actuelle au format défini par $timeFormat (à configurer selon ses désirs)
{_FULLDATE_} : sera remplacée automatiquement par la date actuelle + l'heure actuelle au format défini par $fullDateFormat (à configurer selon ses désirs)
etc...
Passons aux blocs. Un bloc dans un fichier template est défini de cette manière :
<block id="monbloc"> |
Il est très important de fermer correctement les blocs, sinon ils ne seront pas reconnus.
De cette manière, le bloc sera affiché par défaut. Pour que le bloc soit masqué par défaut, il faut le créer de cette manière :
<block id="monbloc" hidden> |
Par la suite, pour afficher ou masquer un bloc, il suffit de faire :
$tpl->hideBlock('monbloc','tplId'); // pour masquer le bloc identifié par "monbloc" |
ou
$tpl->showBlock('monbloc','tplId'); // pour afficher un bloc identifié par "monbloc" |
2 blocs d'un même template ne peuvent avoir le même identifiant.
A présent pour effectuer une boucle sur un bloc :
<ul> |
Il faut préparer un tableau dans lequel on enregistrera toutes les valeurs successives des différentes variables.
$array = array( |
Ensuite on créé la boucle :
$tpl->blockLoop('monbloc','id2',$array) |
Cela donnera comme résultat :
<ul> |
La fonction output permet d'afficher ou de retourner un, plusieurs ou tous les templates/blocks ouverts
Exemple :
output(); -> affiche le dernière template ouvert |
Enfin, pour terminer:
$tpl->showDebug(); |
affichera un tableau avec toutes les informations sur les blocs et les variables detectées, ainsi que tout ce qui a été fait avec (ainsi que d'autres infos).
Il faut pour cela que la variable
$tpl->debug |
soit définie à 1 (elle est à 0 par défaut)
Marsh Posté le 13-01-2006 à 17:52:34
Bon voilà, le script et la doc sont dispo sur mon site.
Avis aux utilisateurs : C'est certainement bourré de bugs et de choses à améliorer, alors faites m'en part
Merci.
Marsh Posté le 14-01-2006 à 21:09:03
ahah enfin
pas mal j'avoue, je vais peut être passer mon site sous byste
Marsh Posté le 15-01-2006 à 00:05:10
Oula, gare à toi
Ca doit être bourré de faille ou de problèmes non ?
Enfin moi je l'utilise pour mon site, et je m'en sors plutôt pas mal ... mais bon, il faut voir sur le long terme, là c'est vraiment une version beta de chez beta
En tout cas je ferais tout pour l'améliorer dès que j'aurais des retours
++
Marsh Posté le 15-01-2006 à 16:37:38
par contre si tu pourrai faire une page sur ton site pour voir les sources des pages du site
Marsh Posté le 15-01-2006 à 16:55:34
hmmm, les sources ça risque d'etre génant à cause de certains includes, mais je pourrais mettre une page en exemple oui
Je vais voir ça.
Marsh Posté le 15-01-2006 à 19:32:40
tu bloques les includes génantes
Marsh Posté le 15-01-2006 à 20:56:27
Bon voilà, pour le moment j'ai ajouté une page "Exemples" disponible dans la partie BYSTE.
Pour le moment je travaille sur une amélioration de la classe, mais quand j'aurais fini, je metterais une partie avec un projet complet, avec le code source et tout ce qui va avec
++
Marsh Posté le 16-01-2006 à 13:59:40
v0.2.5b
-------
- Recodage d'une partie de la classe : gain en rapidité de 35% environ
- Possibilité d'ajouter ses propres variables internes
Marsh Posté le 16-01-2006 à 20:23:35
v0.2.6b
-------
Corrigé : Impossible d'affecter une variable globale avant
qu'elle n'ait été detectée dans un template
Corrigé : Les boucles ne pouvaient pas utiliser de variables globales
Marsh Posté le 18-01-2006 à 17:23:07
Pour info j'ai sorti une nouvelle classe.
Elle sert à gérer les autorisation d'accès sur les differentes pages d'un site. Elle vient se greffer a une table MySQL d'utilisateurs. Elle est configurable est peut donc utiliser une table déjà existante (en ce qui me concerne je l'utilise en interaction avec la table d'utilisateur de mon forum SimpleMachine)
++
Marsh Posté le 17-12-2005 à 23:32:46
Edit : J'ai plutôt pas mal avancé :
- Version 0.2.6b disponible pour Php4
- Version 0.2.6b disponible pour Php5
Nom actuel : B.Y.S.T.E.
+ Ajouté
* Modifié
- Enlevé
! Corrigé
v0.2.6b
! Impossible d'affecter une variable globale avant
qu'elle n'ait été detectée dans un template
! Les boucles ne pouvaient pas utiliser de variables globales
v0.2.5b
* Recodage d'un partie de la classe.
> Gain en rapidité d'environ 35% !
+ Possibilité d'ajouter vos propres variables globales.
v0.2.0b
+ Nouveau mot-clé de bloc : php.
> Permet d'insérer et d'évaluer du code Php dans un template.
* Optimisation du code pour un traitement plus rapide.
v0.1.3b
! Une variable globale affectée AVANT l'ouverture d'un template
la contenant etait remise à zéro lors de cette ouverture.
v0.1.2b
! Impossible d'affecter la valeur "zéro" à une variable.
===========================
Réécriture complète du code source
===========================
v0.1.1b
+ Première version du "nouveau" B.Y.S.T.E.
[v0.7b]
- Implémentation de la gestion des boucles sur les blocs. (voir Doc. plus bas)
[v0.6.5b]
- La classe est à présent compatible Php4.
[v0.6b]
- Vérification des variables restant non affectées à la génération des documents
- Amélioration du code et gain en rapidité
[v0.5b]
- Détection automatique des variables présentes dans les templates
- Détection automatique des blocs présents dans les template
- Vérification des blocs détectés (vérifie si les balises de blocs sont bien fermées)
- Possibilité d'imbriquer plusieurs blocs les uns dans les autres.
- Possibilité de supprimer des blocs
- Un blocs parent supprimé supprimera également tous les blocs enfants
- Un bloc enfant n'est pas obligatoirement à l'intérieur d'un bloc parent (utile pour par exemple définir un bloc parent d'utilisateur loggué, et des bloc enfants de tout ce qu'un utilisateur loggué peut voir ... si la personne n'est pas connectée, en supprimant le bloc parent, tout ce qui y est rattaché disparait)
- Mode de débuggage détaillé
- Syntaxe simplifiée
- Possibilité de charger les templates un par un ou part tableau
- Possibilité d'affecter les variables une par une ou par tableau
- Possibilité d'afficher le résultat des différents templates un par un, par tableau, ou tous les templates en mémoire
[UTILISATION]
* Partie HTML
Les variables dans les fichiers templates sont de la forme {VARIABLE}.
Exception : Si la variable est dans un bloc sur lequel on va faire une boucle, elle doit être
écrite de cette manière : {*VARIABLE*}
Les lettres minuscules, majuscules, les chiffres ainsi que les signes - (tiret) et _ (underscore)
sont acceptés.
- Les blocs parents sont définis de cette manière :
<BLOCK id="monBLocParent"> Contenu </BLOCK id="monBLocParent">
("monBlocParent" étant à remplacer par un identifiant au choix)
- Les blocs enfants sont définis de cette manière :
<BLOCK id="monBlocEnfant" parent="monBlocParent"> Contenu </BLOCK id="monBlocEnfant">
("monBlocEnfant" étant à remplacer par un identifiant et "monBlocParent" étant à remplacer par
l'identifiant du bloc parent)
* Partie PHP
+ Pour ouvrir un template :
> Méthode fichier par fichier
loadTemplate('fileName1','fileId1');
loadTemplate('fileName2','fileId2');
- "fileName" : le nom du fichier template
- "fileId" : un identifiant à donner au fichier
> Méthode par tableau
$listeFichier = array(
'fileId1' => 'fileName1',
'fileId2' => 'fileName2'
);
loadTemplate($listeFichier);
+ Pour affecter une variable :
> Méthode variable par variable
setVar('variable1','valeur1','fileId');
setVar('variable2','valeur2','fileId');
setVar('variable3','valeur3','fileId');
- "variable1" : nom de la variable (pour une variable {MAVARIABLE}, le nom est 'MAVARIABLE')
- "valeur1" : la valeur à affecter à la variable
- "fileId" : l'identifiant du fichier template dans lequel se trouve la variable
> Méthode par tableau
$listeVariable = array(
'variable1' => 'valeur1',
'variable2' => 'valeur2',
'variable3' => 'valeur3'
);
setVar($listeVariable,0,'fileId');
+ Pour supprimer ou ré-afficher un bloc :
> Supprimer
delBlock('blockId','fileId');
> Ré-afficher
showBlock('blockId','fileId');
+ Pour effectuer une boucle sur un bloc :
blockLoop($result,'blockId','fileId');
- $result : le résultat de la requête MySQL
- 'blockId' : l'identifiant du bloc sur lequel faire la boucle
- 'fileId' : l'identifiant du fichier dans lequel se trouve le bloc
> (voir plus bas pour plus d'explications)
+ Pour afficher un, plusieurs ou tous les templates ouverts
> Un template
output('fileId');
> Plusieurs templates
$listeTemplate = array('fileId1','fileId2','fileId3');
output($listeTemplate);
> Tous les templates (dans leur ordre d'ouverture)
output();
ou output(0);
+ Pour générer la sortie sans l'afficher (pour la stocker dans une variable)
> Idem que précédement mais avec le paramètre '0' supplémentaire
$monFichier = output('fileId',0); // Pour 1 fichier
$monFichier = output($listeTemplate,0); // Pour plusieurs fichiers
$monFichier = output(0,0); // Pour tous les fichiers
Explication supplémentaire pour la gestion des boucles.
Exemple dans un fichier HTML :
<table>
<tr>
<td>Nom</td>
<td>Prénom</td>
<td>Age</td>
</tr>
<BLOCK id="maBoucle">
<tr>
<td>{*NOM*}</td>
<td>{*PRENOM*}</td>
<td>{*AGE*}</td>
</tr>
</BLOCK id="maBoucle">
</table>
Les 3 variables "NOM", "PRENOM" et "AGE" doivent porter le MÊME nom que les entêtes de colonnes dans MySQL.
Il suffit ensuite, dans la partie Php, de faire :
$result = mysql_query("SELECT NOM, PRENOM, AGE FROM matable" );
$maClasse->blockLoop($result,'blockId','fileId');
Voilà, je crois que c'est tout pour le moment
-----------------------------------------------------------------------------------------------
Bonsoir à tous,
Je suis actuellement en train de développer un moteur de template.
Il n'est pas encore terminé mais le script est déjà bien avancé.
Avant de publier un site internet, j'aimerais savoir s'il y a certaines choses que vous aimeriez voir apparaitre.
J'ai essayé de simplifier son utilisation au maximum et j'ai également mis en place un système de débuggage avancé.
Le script bénéficie d'un système de detection automatique des variables utilisées et des blocs définis dans les templates.
Le script sera également pourvu d'un système de boucle sur certains blocs.
J'attends vos souhait afin de les intégrer (si celà ne nuit pas à la simplicité d'utilisation et que l'option s'avère interessante).
Merci à vous.
Message édité par Dj YeLL le 16-01-2006 à 20:28:07
---------------
Gamertag: CoteBlack YeLL