2010-10-31 6 views
1

Est-ce que quelqu'un connaît un système de template php qui est très simple, quelque chose comme presque aussi simple que str_replace("{variable}", $variable);?PHP - Système de template extrêmement léger

Je en ai besoin pour une série de textareas dans le panneau d'administration, où l'administrateur du site doit modifier les modèles pour les différents éléments du site (trucs pas complexes comme les pages etc, à quelques blocs de contenu)

+0

Si vous ne disposez que d'un système de tempalte streplace, écrivez-le, ceci est quelques lignes. – Svisstack

+1

oui, mais ce n'est pas très élégant. au moins existe-t-il un moyen de mapper plusieurs variables aux chaînes encapsulées entre {}, pour éviter d'utiliser 1000 str_replace? – Alex

+0

Oui, voir ma [réponse] (http://stackoverflow.com/questions/4065418/php-extremely-light-templating-system/4065452#4065452). – alex

Répondre

2
/** 
* Renders a single line. Looks for {{ var }} 
* 
* @param string $string 
* @param array $parameters 
* 
* @return string 
*/ 
function renderString($string, array $parameters) 
{ 
    $replacer = function ($match) use ($parameters) 
    { 
     return isset($parameters[$match[1]]) ? $parameters[$match[1]] : $match[0]; 
    }; 

    return preg_replace_callback('/{{\s*(.+?)\s*}}/', $replacer, $string); 
} 
+0

Neat. :) Il devrait être dit que c'est php 5.3+ seulement, cependant. –

+0

Vous devrez exécuter PHP 5.3 pour l'utiliser. Sinon, ce n'est pas si élégant. – alex

+1

Essayez d'éviter cela si vous le pouvez. Les expressions rationnelles sont coûteuses en ressources. –

2
$findReplaces = array(
    'first_name' => $user['first_name'], 
    'greeting' => 'Good ' . (date('G') < 12) ? 'morning' : 'afternoon' 
); 

$finds = $replaces = array(); 

foreach($findReplaces as $find => $replace) { 
    $finds[] = '{' . $find . '}'; 
    $replaces[] = $replace; 
} 

$content = str_replace($finds, $replaces, $content); 
+0

pourquoi ne pas simplement inclure les accolades, par exemple. '{{first_name}}' dans les clés du tableau et faites simplement 'str_replace (array_keys ($ findReplaces), $ findReplaces, $ content)' – Gordon

+0

@Gordon Yep, c'est beaucoup plus agréable. Le seul inconvénient que je peux voir est que les délimiteurs doivent être inclus chaque terme de recherche - vous savez, la chose entière DRY. – alex

+0

oui, mais encore une fois, tout le monde en utilisant un moteur de modèle avec des accolades sur simplement utiliser PHP mérite que :) – Gordon