2015-07-16 2 views
0

Эй, я написал очень простую систему шаблонов для наших дизайнеров. Его использует str_replace под капотом, чтобы сделать свое дело.Простые шаблоны PHP с петлей

Его работы отличные! Проблема в том, что я хотел бы сделать некоторый цикл (foreach) по некоторым данным.

Вот и пример кода шаблона

$var_c = [ 
    [ 
     "head" => "a", 
     "body" => "b", 
     "foot" => "c" 
    ], 
    [ 
     "head" => "x", 
     "body" => "y", 
     "foot" => "z" 
    ] 
]; 

$tpl_vars = [ 
    "__{var_a}__", 
    "__{var_b}__", 
    "__{var_c}__" 
]; 

$real_vars = [ 
    $var_a, 
    $var_b, 
    $var_c 
]; 

str_replace($tpl_vars, $real_vars, $content_body); 

Примечание $var_c содержит массив и я хотел бы, чтобы перебрать этот массив. Как мне это достичь. Для структуры я думал

__startloop__ 
loop var_c as c 
    c[head] 
    c[body] 
    c[foot] 
__endloop__ 

Я не могу показаться, чтобы получить мою голову вокруг как закодировать это. :)

ОБНОВЛЕНИЕ: Twig, smarty и подобные являются слишком большими и громоздкими для работы. Он также вводит кривую обучения для дизайнеров для принятия языка шаблонов.

+2

.... почему бы не использовать шаблонный двигатель, такой как Twig? Это явно не учебное упражнение, поэтому время - деньги. Создайте работу других. – Anonymous

+0

@ Анонимный Twig, smarty и подобные слишком большие и громоздкие для работы. Он также вводит кривую обучения для дизайнеров для принятия языка шаблонов. – jcobhams

+0

'' – hellaminx

ответ

1

См. Мой класс «Текстовый шаблон». Он поддерживает условия (если), петли (для) и фильтры: https://github.com/dermatthes/text-template

Пример шаблона (String в переменной):

Hello {= name}, 
Your list of Items: 
{for curItem in items} 
{[email protected]}: {= curItem.name} 
{/for} 

PHP-код:

<?php 
$data = [ 
    "name" => "Some Username", 
    "items" => [ 
     ["name" => "First Item"], 
     ["name" => "Second Item"] 
    ] 
]; 
$tt = new TextTemplate ($templateString); 
echo $tt->apply ($data); 

Это должно сделать работа.

 Смежные вопросы

  • Нет связанных вопросов^_^