2010-09-27 4 views
1

Я закодировал небольшой парсер шаблонов php, поэтому шаблоны могут быть легко проанализированы, а переменные в шаблонах похожи на {variable_name}, например.Нужны советы/предложения по синтаксису шаблона

<title>{title}</title> 

Можете ли вы предложить мне возможный синтаксис инструкции if/else?

Я думал, что делать что-то вроде:

{if {logged_in}: TRUE} 
You're logged in... 
{else} 
You're not... 
{/if} 

и ...

{if {logged_in}: TRUE} 
You're logged in... 
{/if} 

выше демонстрирует базисным, если/другой синтаксис шаблона (он проверяет, является ли переменная logged_in == верно), но поскольку я больше кодер, а затем дизайнер, задавался вопросом, могу ли я иметь ваш вход (так что дизайнеры могут легко понять синтаксис без знания серверного кодирования).

Cheers!

+4

Зачем изобретать колесо, когда есть зрелые решения для шаблонов, например smarty? – mikerobi

+0

@mikerobi Точно. Тем более, что это синтаксис в основном smarty. – ryeguy

+0

Я незнакомый и никогда не использовал smarty, но я быстро просмотрел файлы и раздутые файлы, кроме того, я изучаю PHP, так что просто из интереса я хотел закодировать свои собственные , :-) – Newbtophp

ответ

0

Несомненно.
Вот оно:

<?if ($logged_in):?> 
You're logged in... 
<?else:?> 
You're not... 
<?endif?> 

Лучший синтаксис когда-либо.
Как вы можете видеть, открывающие и закрывающие метки были слегка изменены.
Но не нужно ничего разбирать - всего include этот файл!
Btw, ваш выход будет выглядеть

<title><?=$title?></title> 
+0

fyi я слышу Galen

+0

@Galen Они просто обесценивают их, но они не планируют их удалять. Это просто мягко предложить использовать версию longtag. Но большинство людей, похоже, используют shorttags в шаблонах. – ryeguy

+0

@ Гален, я слышу, что это не так. –

0

Я рекомендую это:

<title><?php echo $title ?></title> 

<?php if($logged_in): ?> 
You're logged in... 
<?php else: ?> 
You're not... 
<?php endif; ?> 

<?php if($logged_in): ?> 
You're logged in as <?php echo $logged_in_username ?> 
<?php endif; ?> 

Другими словами не шаблонизатор на всех

Если вы делаете это в качестве учебного опыта доном 't заморачиваться с движком шаблона, просто используйте прямой PHP

+0

Я использую его как опыт обучения & экспериментировать. – Newbtophp

+1

@Newbtophp, если это просто синтаксический анализ, почему так много забот в коде? –

0

в фигурных скобках вы можете положить выражения, которые будут оцениваться

{if logged_in == TRUE} 
    You're logged in... 
{else} 
    You're not... 
{endif} 

Когда вы разбираете шаблон вы можете оценить выражений в bracess

{if foo == 10 + bar } 
    do something 
{else} 
    do something else 
{endif} 

Вы можете также рассмотреть, чтобы изменить одиночные скобки удвоится, потому что это менее вероятно, появится в файле шаблона.

+0

Интересно - я буду ждать, что другие думают и адаптируют синтаксис соответственно. – Newbtophp

+0

ЧТО Вы имеете в виду - "оценить"? –

0

Обычно условными различаются по синтаксису с переменной замены, так как они могут иметь переменную $ еще и т.д. ...

{% if logged_in == TRUE %} 
You're logged in... 
{% else %} 
You're not... 
{% endif %} 

Имеет смысл. Затем вы можете следовать некоторым стандартам и заменить == с помощью> = < =! = И т. Д. Без огромного нового синтаксиса для изучения :)

+0

Выглядит довольно круто! – Newbtophp

+0

Нашел шаблонный двигатель, о котором я думал: http://www.twig-project.org/ – methodin

+1

У Twig также есть преимущество гораздо лучше песочницы, чем Smarty.Даже когда я использую Smarty для шаблонов приложений, я использую Twig для любого пользователя. –

0

Да, почему бы вам не использовать что-то вроде Smarty, что зрелая система шаблонов? Я использую его все время, и это прекрасно.

Но если вы все еще хотите сделать это по-своему, я думаю, что разработчики - это те, кого вы должны спрашивать, а не дизайнеры.Дизайнеры обычно просто передают вам html-файлы (иногда просто файлы Photoshop) и не хотят беспокоиться о переменных, структурах управления и т. Д. И разработчикам нужны и нужны сложные операторы внутри IF, например, функции и логические инструкции.

Ваш синтаксис выглядит логичным, хотя вы можете его использовать.

0

Для тех, кто сказал, что вам следует избегать системы шаблонов, в шаблоне есть множество преимуществ. Например, предположим, что вы создаете огромный многофункциональный набор (программное обеспечение форума, профили, динамический пользовательский контент, работы), и вы хотите, чтобы люди могли редактировать внешний вид информации. Если вы дадите им прямой доступ на основе PHP, они могут очень легко сломать что-то и заставить ваш скрипт больше не компилироваться. Они также могут вводить PHP, чтобы получить переменные, скрытые в вашем коде, или полностью довести ваше программное обеспечение до колен. Использование шаблонов ограничивает то, что они могут делать, и поэтому ограничивает то, что они могут сломать.

Я не очень много работал с шаблонами, но, по моему опыту, у любых выражений обычно есть различная инкапсуляция из переменных. Так, например:

< - IF {value_which_should_be_true} - >

value_which_should_be_true верно! О, и {информация}

< - ELSE - >

value_which_should_be_true не так ... О, и {} different_information

< - ENDIF - >

Таким образом, вы можете просто использовать preg_replace для \ {([A-Za-z0-9 _-] +)} \ со значением $ values ​​[$ 1] ($ 1 является совпадением с preg_replace) для значений и единственное, что вы должны выполнить exec(), находится внутри блоков комментариев.

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