Templates : c'est vraiment bien ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Templates : c'est vraiment bien ?

par naholyr » 11 févr. 2007, 22:08

$var = <<<HTML
<table summary="">

HTML;
for($i = 0; $i < 10; $i++)
{
    $var .= <<<HTML
  <tr>
    <td>Ligne {$i}</td>
  </tr>

HTML;
}

$var .= <<<HTML
</table>
HTML;
?>
Non pas toi Cyrano pas toi :langue: tu peux pas comparer cette soupe à quelque chose de concis, lisible, performant, et qui supporte bien la coloration syntaxique (et c'est encore mieux avec les short_tags) :
<table summary="">

<?php for ($i = 0; $i < 10; $i++): ?>
  <tr>
    <td>Ligne <?php echo $i ?></td>
  </tr>
<?php endforeach ?>

</table>

par Cyrano » 11 févr. 2007, 20:54

... or avec heredoc, pas de boucles :?
Et pourquoi pas ?
$var = <<<HTML
<table summary="">

HTML;
for($i = 0; $i < 10; $i++)
{
    $var .= <<<HTML
  <tr>
    <td>Ligne {$i}</td>
  </tr>

HTML;
}

$var .= <<<HTML
</table>
HTML;
?>

par naholyr » 11 févr. 2007, 01:26

La syntaxe heredoc sera limitée à du remplacement de variables. Dans un template il faut également pouvoir avoir des boucles (lignes de tableaux par exemple). C'est le strict minimum pour pouvoir séparer sereinement php et html, or avec heredoc, pas de boucles :?

par Hubert Roksor » 10 févr. 2007, 23:54

Pour résumer l'ensemble du sujet en une phrase, si tes scripts deviennent trop compliqués parce qu'il y a imbroglio de HTML et de PHP, utilise un moteur de template, sinon c'est à ton entière discrétion.

@Cyrano : quand tu dis qu'heredoc est "efficace" tu parles en termes de rapidité d'écriture ? Parce que d'un point de vue technique, les performances ont pas l'air terribles, cf cet article. Quant à Lerdorf, il parait que c'est pas une référence en matière de prog PHP :lol: À noter qu'il est aussi adept du "no-framework". M'enfin, du moment que ça marche pour lui hein...

par Cyrano » 10 févr. 2007, 22:57

Un avis qui vaut ce que vous voudrez : je ne suis pas du tout maniaque des templates : du reste, il me semble que Rasmus lui-même reste circonspect face aux moteurs de templates argant du fait que "PHP est en soi un moteur de templates".

Je travaille par exemple actuellement sur un développement en appliquant un design pattern MVC et mes vues ne sont pas des templates mais contiennent des variables utilisant la syntaxe heredoc. C'est très efficace et pour la mise en cache, rien de plus simple à partir de mon contrôleur avec un ob_start() et un ob_end_flush() :en fin de compte, grosso modo : pourquoi réinventer ce qui est déjà intégré dans le langage ? :-k

par momox » 10 févr. 2007, 17:03

Pour ma part, voici un exemple de code php.
<?php
/**
* @package  : partenaires.app.php
* @version  1.0
* @copyright (c)2006 geekimo
* @author Geekimo : [email protected]
*/
class partenaires
{
	private function partenaires_index()
	{
		global $tpl, $db;
		$tpl->load_template('partenaires_index');
		$tpl->add_style_item('partenaires.css');
		$s_partenaires = "SELECT part_id, part_name, part_img, part_type FROM partenaires WHERE part_active='1' AND part_sid='".$db->escape($_SESSION['s_data']['site_id'])."' ORDER by part_type ASC";
		$q_partenaires = $db->query($s_partenaires);
		if($db->count_rows($q_partenaires) > 0) {
			$tpl->erase_bloc('if_no_partenaires');
			while($data = $db->fetch($q_partenaires)) {
				extract($data);
				$partenaires = array('partenaire.type' => ($part_type == '1' ? ' class="part_gold"' : ''),
									 'partenaire.name' => '<a href="'.rewrite_link('partenaires', array('action' => 'view', 'pid' => $part_id)).'">'.stripslashes($part_name).'</a>',
									 'partenaire.img' => '<a href="'.rewrite_link('partenaires', array('action' => 'view', 'pid' => $part_id)).'">'.(!empty($part_img) ? '<img src="'.$part_img.'" alt="'.stripslashes($part_name).'" />' : '').'</a>');
				$tpl->assign_bloc('partenaires', $partenaires);
			}
		}
		else {
			$tpl->erase_bloc('if_partenaires');
		}
		$tpl->set_page_title('Partenaires');
		$tpl->set_page_action('Partenaires');
		$tpl->return_template(true);
	}
	private function redir($pid) {
		global $db;
		$s_partenaires = "SELECT part_url FROM partenaires WHERE part_active='1' AND part_sid='".$db->escape($_SESSION['s_data']['site_id'])."' AND part_id='".$db->escape($pid)."'";
		$q_partenaires = $db->query($s_partenaires);
		if($db->count_rows($q_partenaires) > 0) {
			extract($db->fetch($q_partenaires));
			header('Location: '.stripslashes($part_url));
		}
		else {
			$tpl->erase_bloc('if_partenaires');
		}
	}
	public function run()
	{
		if(isset($_GET['action'], $_GET['pid']) && $_GET['action']=='view' && !empty($_GET['pid']) && is_numeric($_GET['pid'])) {
			self::redir($_GET['pid']);
		}
		else {
			self::partenaires_index();
		}
	}
}
?>
C'est assez propre comme conception, pas de html, et pourtant, ca me ressort la liste de mes partenaires, le tout en php, sans complications :)
Biensur, la, on a que l'application, pas les classes qui gérent la base de données ou les templates ou autres encore...
Pour faire ca en incluant le html ca aurait fait largement plus sale...
Enfin bon, c'est un choix de devellopement...
Je sais que moi je prefere coder comme ca mais d'autres préférent faire autrement, c'est leur choix et je le respecte :)
@+

par Damien » 10 févr. 2007, 15:28

Pas forcément, je milite pour les templates PHP moi ;)
On peut très bien développer ses templates avec un simple script PHP, qui se contente d'utiliser les formules prédéfinies suivantes :
<?php echo $variable; ?>
<?php foreach ($tableau as $valeur): ?> ... <?php endforeach; ?>
<?php if ($condition): ?> ... <?php else: ?> ... <?php endif; ?>

PHP utilisé avec des bonnes pratiques, et un include suffit en guise de templates ;)
C'est le choix de Joomla par exemple, ainsi que de dotClear.
Je suis complètement d'accord.

par jojolapine » 10 févr. 2007, 15:22

bonjour,
moi j'utilise TinyButStrong

par rossio » 10 févr. 2007, 13:45

Connaissez-vous un système de templates assez simple avec cache ? Que recommandez-vous ?

Merci

par naholyr » 09 févr. 2007, 22:34

[quote="Genova"]

Code : Tout sélectionner

On dit que ça ralentit le chargement des pages ?
Ca ralenti forcément, puisque le code PHP généré par le template est du code générique, donc que vous auriez pu optimiser en temps normal.[/code]
Pas forcément, je milite pour les templates PHP moi ;)
On peut très bien développer ses templates avec un simple script PHP, qui se contente d'utiliser les formules prédéfinies suivantes :
<?php echo $variable; ?>
<?php foreach ($tableau as $valeur): ?> ... <?php endforeach; ?>
<?php if ($condition): ?> ... <?php else: ?> ... <?php endif; ?>

PHP utilisé avec des bonnes pratiques, et un include suffit en guise de templates ;)
C'est le choix de Joomla par exemple, ainsi que de dotClear.

par lord.anonymous » 09 févr. 2007, 18:18

Très intéressant, merci beaucoup. J'essaye ça dès que j'ai le temps.

par Genova » 09 févr. 2007, 17:59

Si tu veux j'ai écrit un tutoriel sur le système de template de phpBB, jettes y un coup d'oeil ça pourra peut être t'aider à cerner l'intérêt général à travers son utilisation.

par lord.anonymous » 09 févr. 2007, 12:08

Donc au final, ça fait 3 parties de code à gérer. Le PHP, le HTML et le CSS, c'est ça?
Ca évite juste l'inclusion de HTML dans du code PHP alors.

Faudra que je me documente là dessus.

par s3b54sk8 » 09 févr. 2007, 11:14

Apparemment si j'ai bien compris il faut un logiciel en plus pour faire tourner ce système?
Il ne faut pas de logiciel en plus. Il faut tout simplement un fichier en plus qui contient la classe template que tu souhaites utiliser. :wink:

J'utilise de plus en plus les templates pour les raisons évoquées par Genova. De plus pour les mises à jour des sites comme l'ajout d'une fonctionnalité ou refonte complet du design, on peut faire des gains de temps assez conséquents je trouve.

par Genova » 09 févr. 2007, 00:01

Les templates sont un formidables outils a utiliser pour plusieurs raisons :
1) Parce que ça permet de séparer totalement le code PHP du code HTML
2) Parce qu'un graphiste pourra ainsi retoucher le code HTML sans se perdre dans votre fouilli PHP
3) Parce que votre code sera ainsi beaucoup plus lisible
4) Parce que vous pourrez ainsi donner plusieurs thèmes facilement à votre site web

Code : Tout sélectionner

On dit que ça ralentit le chargement des pages ?
Ca ralenti forcément, puisque le code PHP généré par le template est du code générique, donc que vous auriez pu optimiser en temps normal. Mais la plupart des templates digne de ce nom permettent une mise en cache du code PHP, donc la phase "compilation" que certains trouvent assez lourde est évitée (phpBB2 n'intègre pas de cache par défaut pour information, cependant phpBB3 remédie au problème).

Maintenant les templates offrent tellement de facilité de programmation que ce serait dommage de passer à côté pour un soit disant souvis de performance (le gain se comptera en millisecondes ..). Les causes de ralentissement d'un site sont très souvent ... les requêtes SQL.