Templates : c'est vraiment bien ?

ViPHP
ViPHP | 3607 Messages

10 févr. 2007, 15:22

bonjour,
moi j'utilise TinyButStrong

Administrateur PHPfrance
Administrateur PHPfrance | 1275 Messages

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.

Mammouth du PHP | 1511 Messages

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 :)
@+

Mammouth du PHP | 19672 Messages

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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

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...

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

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 :?

Mammouth du PHP | 19672 Messages

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;
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

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>