Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/12/2011, 02h07   #1
Futur Membre du Club
 
Inscription : juin 2006
Messages : 115
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 115
Points : 18
Points : 18
Par défaut Créer un engin de template gérant les conditions

Bonjour,

Je travail actuellement à la réalisation d'un petit engin de templates assez basic dont j'aimerais ajouter la gestion des conditions, par exemple [IF ...] [ELSEIF ...] [ENDIF].

J'ai essayé de procéder avec les regex, cependant les problèmes apparaîssaient dès que j'avais plus d'un ELSEIF, j'ai donc décidé de m'orienter vers la manipulation de string. Présentement, je reçois la position de la fin de [IF par exemple, cependant je n'arrive pas à "deviner" le nombre de caractère à lire. Il faudrait que je sois en mesure d'analyser chaque caractères entre [IF et ] afin de récupérer cette valeur.

J'aimerais donc savoir s'il y a des personnes ici avec une certaine expérience dans ce genre de manipulation pouvant m'aider.

Voici mon code pour le moment:
Code :
1
2
3
$str = 'Some validations [IF TEST]<a href="text.html">firstValue</a>[ELSEIF TEST1]secondValue[/IF] in [/IF in [IF OK]thirdValue[/IF] end of string.';
 
$pos = strpos($str, '[IF ');
Si vous connaissez des méthodes plus appropriées pour arriver au bon résultat, je suis tout ouïe.

Merci d'avance !
Norin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 15h32   #2
Membre confirmé
 
Homme Arnaud
Inscription : décembre 2004
Messages : 167
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Âge : 40
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : décembre 2004
Messages : 167
Points : 238
Points : 238
Et pourquoi tu fais pas différents templates en fonction des résultats attendus ?
__________________
NginX, SphinxSearch Addict !!
lenono est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 19h30   #3
Futur Membre du Club
 
Inscription : juin 2006
Messages : 115
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 115
Points : 18
Points : 18
Je ne suis pas sur de comprendre... Je fais bel et bien un template par page, cependant mon module de template doit pouvoir gérer les conditions...
Norin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 21h01   #4
Membre confirmé
 
Homme Arnaud
Inscription : décembre 2004
Messages : 167
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Âge : 40
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : décembre 2004
Messages : 167
Points : 238
Points : 238
Et pourquoi tu ne fais pas directement du php dans ton template alors ??

Peut être plus simple non ?
__________________
NginX, SphinxSearch Addict !!
lenono est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 21h15   #5
Futur Membre du Club
 
Inscription : juin 2006
Messages : 115
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 115
Points : 18
Points : 18
Le but par mon engin de template est de bien séparer les unités logiques des unités visuelles. Comme je ne serai pas le seul à faire des templates, mais que je serai le seul à gérer les informations contenues dans ces templates, je dois créer un système permettant à mes collègues de créer facilement des interfaces graphiques avec un minimum de code.

Par la suite, je pourrai recréer ces templates en fonction des données qu'ils auront inscris. Par exemple:
Code :
<title>{SITE_NAME}</title>
Malgré que ce soit du HTML simple, je devrai créer le fichier php qui alimentera le {SITE_NAME} afin d'afficher la bonne valeur.
Norin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 21h47   #6
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 811
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 811
Points : 1 530
Points : 1 530
Pour les scripts de template que j'ai eu loisir à regarder jusqu'à maintenant c'est en fait un script PHP qui est généré puis évalué.
Donc simplement une regex pour remplacer le "pseudo-code" du template en équivalent PHP.
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 22h06   #7
Futur Membre du Club
 
Inscription : juin 2006
Messages : 115
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 115
Points : 18
Points : 18
Le soucis avec mon regex c'est qu'il ne gèrait pas les multiples "else if".

Le voici:
Code :
/\[IF (.*?)\](.*?)(\[\/IF\]|\[ELSEIF(.*?)\](.*?)\[\/IF\])/i
Norin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 09h15   #8
Membre éclairé
 
Avatar de Nowwis
 
Homme
Développeur Web
Inscription : juin 2009
Messages : 363
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2009
Messages : 363
Points : 365
Points : 365
Il manque surement un espace après le ELSEIF ?

Code :
/\[IF (.*?)\](.*?)(\[\/IF\]|\[ELSEIF (.*?)\](.*?)\[\/IF\])/i
Nowwis est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 15h26   #9
Futur Membre du Club
 
Inscription : juin 2006
Messages : 115
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 115
Points : 18
Points : 18
Citation:
Envoyé par Simdu80 Voir le message
Il manque surement un espace après le ELSEIF ?

Code :
/\[IF (.*?)\](.*?)(\[\/IF\]|\[ELSEIF (.*?)\](.*?)\[\/IF\])/i
Effectivement, cependant, cela ne règle pas la non-gestion des ELSEIF multiples
Norin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h09.


 
 
 
 
Partenaires

Hébergement Web