Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks
Bibliothèques et frameworks Forum d'entraide sur les frameworks, templates, bibliothèques de code (PDFLib, eZPdf, JpGraph, Artichow, PEAR, etc). Avant de poster : FAQ bibliothèques, toutes les FAQ PHP et cours bibliothèques
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 13/02/2007, 10h54   #1
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
Par défaut Template PHP, (DoSimple?)

Voilà, j'aimerai faire un générateur de template (en réalité il est déjà fait)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
 
function generate_template($template_path, $array)
{
	if (file_exists($template_path))
		$template = generate_match(file_get_contents($template_path), $array);
	else
		return false;
 
	return $template;
}
 
function generate_match($template, $array)
{
	preg_match_all('/<!-- IF (.*?) -->/U', $template, $match['if']);
	preg_match_all('/<!-- LOOP (.*?) -->/U', $template, $match['loop']);
	preg_match_all('/{(.*)}/U', $template, $match['string']);
 
	$template = generate_template_if($template, $match['if'][1], $array);
	$template = generate_template_loop($template, $match['loop'][1], $array);
	$template = generate_template_string($template, $match['string'][1], $array);
 
	return $template;
}
 
function generate_template_if($template, $match, $array)
{
	for ($i = 0; $i < count($match); $i++)
	{
		if (!empty($array[$match[$i]]))
		{
			preg_match_all('/<!-- IF '.$match[$i].' -->(.*?)<!-- FI '.$match[$i].' -->/s', $template, $match_if);
			for ($x = 0; $x < count($match_if[1]); $x++)
				$template = preg_replace('/<!-- IF '.$match[$i].' -->(.*?)<!-- FI '.$match[$i].' -->/s', generate_match($match_if[1][$x], $array), $template);
 
			$template = preg_replace('/<!-- ELSE '.$match[$i].' -->(.*?)<!-- ESLE '.$match[$i].' -->/s', '', $template);
		}
		else
		{
			preg_match_all('/<!-- ELSE '.$match[$i].' -->(.*?)<!-- ESLE '.$match[$i].' -->/s', $template, $match_if);
			for ($x = 0; $x < count($match_if[1]); $x++)
				$template = preg_replace('/<!-- ELSE '.$match[$i].' -->(.*?)<!-- ESLE '.$match[$i].' -->/s', generate_match($match_if[1][$x], $array), $template);
 
			$template = preg_replace('/<!-- IF '.$match[$i].' -->(.*?)<!-- FI '.$match[$i].' -->/s', '', $template);
		}
	}
	return $template;
}
 
function generate_template_loop($template, $match, $array)
{
	for ($i = 0; $i < count($match); $i++)
	{
		if (!empty($array[$match[$i]]))
		{
			preg_match_all('/<!-- LOOP '.$match[$i].' -->(.*?)<!-- POOL '.$match[$i].' -->/s', $template, $match_loop);
			for ($x = 0; $x < count($match_loop[1]); $x++)
				$template = preg_replace('/<!-- LOOP '.$match[$i].' -->(.*?)<!-- POOL '.$match[$i].' -->/s', generate_match($match_loop[1][$x], $array[$match[$i]]), $template);
		}
		else
			$template = preg_replace('/<!-- LOOP '.$match[$i].' -->(.*?)<!-- POOL '.$match[$i].' -->/s', '', $template);
	}
	return $template;
}
 
function generate_template_string($template, $match, $array)
{
	for ($i = 0; $i < count($match); $i++)
	{
		if (!empty($array[$match[$i]]))
		{
			if (is_array($array[$match[$i]]))
			{
				for ($x = 0; $x < count($array[$match[$i]]); $x++)
				{
					if (empty($template_array[$x]))
						$template_array[$x] = $template;
 
					$template_array[$x] = str_replace('{'.$match[$i].'}', $array[$match[$i]][$x], $template_array[$x]);
				}
			}
			else
				$template = str_replace('{'.$match[$i].'}', $array[$match[$i]], $template);
		}
		else
			$template = str_replace('{'.$match[$i].'}', '', $template);
	}
	if (!empty($template_array))
	{
		$template = '';
		for ($i = 0; $i < count($template_array); $i++)
			$template .= $template_array[$i];
	}
	return $template;
}
 
?>
Alors le générateur de template gère:
les conditions <!-- IF xxx --> <!-- ELSE xxx -->
les boucles <!-- LOOP xxx -->
les remplacements de string {xxx}

enfin un générateur de template assez basique (assez lourd et a débuguer)

Y'aurait t'il moyen de ne plus utiliser de fonction lourde telque preg_match_all pour la détection des blocks d'instruction du template?


Mais j'aurais aimé savoir si il été vraiment mieux d'utiliser une Class PHP plutôt que plusieurs fonctions?
Si oui, auriez vous un site qui montre comment crée des Class PHP?

Et non, je ne veux pas de système de template tout près comme Smarty ou encore TemplateLite...

je vous remercie d'avance
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2007, 11h41   #2
Membre confirmé
 
Développeur Web
Inscription : septembre 2006
Messages : 215
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : septembre 2006
Messages : 215
Points : 246
Points : 246
Salut

peut etre que cette article peut t'intéresser
je pense que c une des solutions les moins lourde pour gérer la partie vue d'une application php

http://sahid.funraill.org/2007/01/23/modele-mvc-en-php/

sahid
sahid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2007, 11h58   #3
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
Merci, je pense m'orienter dessus, mais pour ce qui est des conditions et des boucles?
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2007, 13h22   #4
Membre confirmé
 
Développeur Web
Inscription : septembre 2006
Messages : 215
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : septembre 2006
Messages : 215
Points : 246
Points : 246
arf,

à ce niveau la tu devrais implémenter ta classe des méthodes que tu à besoins, m'enfin ce style de fonctionnalité rend ton application bien plus lourde.

Dans tout les cas, tu utilises des conditions PHP, que tu caches derrière un pseudo-code html ... pkoa ne pas directement utiliser une boucle for, ou while dans ton template ?

si ca ne te plaie pas, tu peux toujours disposer d'une classe avec des méthodes qui te retournerons les éléments que tu as besoin.

exemple :

partie metier
Code :
1
2
3
4
5
6
 
...
$view = new view ("/tpl");
$view->menu = affiche::menu (); // retourne le menu
$view->render ("index.tpl.php");
...
partie vue (index.tpl.php)
Code :
1
2
3
4
5
6
 
...
<ul>
    <?=$this->menu; ?>
</ul>
...
tu disposes ainsi d'une application propre et performante

sahid
sahid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2007, 14h00   #5
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
je te remercie encore, j'ai regarde ton site, il est pas mal du tout.

se qui est dommage c'est que je ne suis pas familiarisé avec les Class PHP,
donc je vais prendre note de ce que tu m'as donnés et je vais m'informé sur les Class PHP.

Pour ce qui est du template, je pensé faire 1 template par type de page, un template complet (ce qui permet de mieux travaillé le design)
comme par exemple (rien à voire mais pertinent):
Code xml :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="{encoding}"?>
 
<rss version="2.0">
  <channel>
    <title>{title}</title>
    <link>{link}</link>
    <description>{description}</description>
    <language>{language}</language>
    <lastBuildDate>{lastBuildDate}</lastBuildDate>
<!-- LOOP item -->
    <item>
      <title>{title}</title>
      <link>{link}</link>
      <description>{description}</description>
      <pubDate>{pubDate}</pubDate>
      <dc:creator>{creator}</dc:creator>
      <comments>{comments}</comments>
    </item>
<!-- POOL item -->
  </channel>
</rss>

j'aime pas trop décomposé les fichiers (surtout des templates),
je ne sais pas trop comment faire encore, mais j'aime beaucoup ton système (très propre et claire)
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2007, 19h50   #6
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
finalement, je vais partir sur le système de template utilisé par phpbb,
je vais voir à quoi il ressemble, testé si il est rapide.

Si quelqu'un connait un système de template SIMPLE et PROPRE, qui gère:
les conditions et les boucles :p
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2007, 20h13   #7
Membre confirmé
 
Développeur Web
Inscription : septembre 2006
Messages : 215
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : septembre 2006
Messages : 215
Points : 246
Points : 246
salut

http://phpsavant.com/
sahid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2007, 05h38   #8
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
merci, j'ai vue, mais je pense partir sur quelque chose de plus connue, comme Smarty par exemple, mais ce qui m'ennui c'est le fait qu'il soit une usine à gaz, alors que j'ai besoin de presque rien...
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2007, 07h20   #9
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
Je pense avoir trouvé mon bonheur:
http://dosimple.ch/articles/Template...ate.class.phps

http://dosimple.ch/articles/Template/

Si une quelqu'un connait?
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h14.


 
 
 
 
Partenaires

Hébergement Web