2010-08-09 5 views
4

Je suis à la recherche d'un meilleur moyen de générer du HTML dynamique à partir de PHP.Alternative au stockage html dans les chaînes php

Avant que je ferais quelque chose comme ceci:

//generate.php 
for(...) 
{ 
    $markup .= '<a id="'.$i.'">link'.$i.'</a>'; 
} 

C'est vraiment laid, et je préférerais ne pas avoir à définir mon ligne de balisage dans les chaînes php.

Je suis à la recherche de la fonctionnalité de include "markup.php";, mais je dois être en mesure de stocker le résultat dans une chaîne, et ne pas le sortir tout de suite. Quelque chose comme ci-dessous serait excellent.

//generate.php 
for(...) 
{ 
    $markup .= include "markup.php"; 
} 

//markup.php 
<a id="<?=$i?>">link<?=$i?></a> 

Répondre

1

Utilisez un moteur de modélisation tel que Smarty TPL. C'est ce qu'ils sont. Ils séparent tous les deux l'affichage HTML de la logique et fournissent des fonctions pratiques pour générer des choses fastidieuses comme les boutons radio HTML.

+0

Un an plus tard, j'utilise Smarty. C'est génial! Merci! – Samuel

0

Pourquoi ne pas jeter le php en ligne? Pouvez-vous nous dire pourquoi vous avez besoin de le stocker avant de sortir?

for(...) 
{ 
    ?><a id="<?php echo $i; ?>">link <?php echo $i; ?></a><?php 
} 

Vous ne devriez pas utiliser de balises courtes.

1

Je crois que la deuxième méthode fonctionne réellement tant que votre fichier inclus se termine par une déclaration de retour. Cependant, pourquoi ne pas un moteur de template tel que Smarty?

Dans Smarty (et je suis sûr qu'il y en a d'autres, il y a toujours des boucles mais elles sont orientées vers le balisage.) Les résultats du template ne sont pas sortis avant d'appeler la méthode display(). . que les variables qui vous avez besoin Votre exemple serait quelque chose comme:

PHP:

$links = array('http://stackoverflow.com/','http://google.com'); // whatever you're looping over. 
$smarty->assign('links', $links); 
// ... other processing ... etc. 
$smarty->display('path/to/template.tpl'); 

modèle:

<html> 
<body> 
{foreach from=$links item=$link } 
<a href="{$link}">link {$link}</a> 
{/foreach} 
</body> 
</html> 
0

Miser sur la suggestion de @ jcmonkey, vous pouvez écrire une fonction comme ceci:

function markup($i) { 
    ob_start(); 
    include 'markup.php'; 
    return ob_get_contents(); 
} 

... avec un fichier markup.php qui ressemblerait à ceci:

<?php /* I don't like using short_open_tag */ ?> 
<a id="<?php echo $i; ?>">link<?php echo $i; ?></a> 

Vous pouvez ensuite appeler markup() dans votre boucle for:

for(...) 
{ 
    $markup .= markup($i); 
}