Php 需要一些关于模板语法的建议/建议吗

Php 需要一些关于模板语法的建议/建议吗,php,parsing,templates,templating,Php,Parsing,Templates,Templating,我编写了一个小型php模板解析器,因此可以轻松解析模板,模板中的变量类似于{variable_name},例如 而且 {if {logged_in}: TRUE} You're logged in... {/if} 上面演示了基本的if/else模板语法,它检查变量logged_in==true,但由于我更像是一个编码员,而不是设计师,我想知道我是否可以得到您的输入,这样设计师就可以轻松理解语法,而不必了解服务器端编码 干杯 当然。 这是: <?if ($logged_in):?>

我编写了一个小型php模板解析器,因此可以轻松解析模板,模板中的变量类似于{variable_name},例如

而且

{if {logged_in}: TRUE}
You're logged in...
{/if}
上面演示了基本的if/else模板语法,它检查变量logged_in==true,但由于我更像是一个编码员,而不是设计师,我想知道我是否可以得到您的输入,这样设计师就可以轻松理解语法,而不必了解服务器端编码

干杯

当然。 这是:

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

<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; ?>
换句话说,根本没有模板引擎


除非你是作为一种学习体验来做的,否则不要使用模板引擎,只需在大括号中使用纯PHP,你就可以把要计算的表达式放进去

{if logged_in == TRUE}
  You're logged in...
{else}
  You're not...
{endif}
解析模板时,可以在大括号中计算表达式

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

你也可以考虑将单括号改为“双”,因为它不太可能出现在模板文件中。

典型的条件句在语法上与变量替换不同,因为它们可以有一个变量叫做$For…p>
{% if logged_in == TRUE %}
You're logged in...
{% else %}
You're not...
{% endif %}

有道理。然后,您可以遵循一些标准,用>=替换==是的,为什么不使用类似的东西,这是一个成熟的模板系统?我一直在用它,它很完美

但是如果你仍然想按自己的方式去做,我认为你应该问的是开发人员,而不是设计师。设计师通常只需将html文件交给您,有时只是一个Photoshop文件,不想被变量、控制结构等所困扰。开发人员希望并需要IFs中的复杂语句,如函数和逻辑语句


不过,您的语法看起来是合乎逻辑的,您可以使用它。

对于那些说您应该避免使用模板系统的人来说,使用模板有很多好处。例如,假设你制作了一个功能丰富的大型套件论坛软件、个人资料、动态用户内容、作品,你希望人们能够编辑信息的外观。如果你给他们直接的基于PHP的访问,他们很容易破坏一些东西,使你的脚本不再编译。他们还可以注入PHP来获取隐藏在代码中的变量,或者让软件完全崩溃。使用模板限制了他们可以做什么,因此也限制了他们可以打破的东西

我没有对模板做过很多工作,但根据我的经验,任何表达式通常都有不同于变量的封装。例如:

应该是真的值是真的!哦,还有{信息}

应该为真的值不是真的。。。哦,还有{不同的信息}


这样,您就可以使用preg_replace for \{[A-Za-z0-9_-]+}\了,$values[$1]$1的值与preg_replace的值相匹配,您唯一需要执行的就是注释块内部。

如果有成熟的模板解决方案,比如smarty,为什么要重新发明轮子?@mikerobi。更重要的是,这基本上是smarty的语法。我不熟悉smarty,也从未使用过smarty,但我快速查看了文件及其膨胀的部分,而且我正在学习PHP,所以出于兴趣,我想自己编写代码-仅仅因为某样东西很有特色并不意味着它膨胀了。Smarty可能是php的模板引擎,不包括php本身。还有,看看。你做了两个错误的假设。1.stackoverflow是一个专门设计的站点,但事实并非如此。在这里很难找到设计师。2.设计师确实编辑模板,但实际上他们没有。他们在photoshop中画画。仅供参考,我听说@Galen他们只是不喜欢它们,但他们不打算删除它们。这只是温和地建议使用Lontag版本。但是大多数人似乎在模板中使用短标签。有人知道讨论这个的php.net链接吗?我希望听到一个正式的答案。如果只是解析练习,请参阅和@Newbtophp,为什么这么关注代码格式?很有趣-我将等待其他人的想法,并相应地调整语法。你的意思是什么-评估?Twig还有比Smarty更好的沙箱功能。即使我使用Smarty作为应用程序模板,我也会使用Twig作为用户提供的任何东西。
{if logged_in == TRUE}
  You're logged in...
{else}
  You're not...
{endif}
{if foo == 10 + bar }
  do something
{else}
  do something else
{endif}
{% if logged_in == TRUE %}
You're logged in...
{% else %}
You're not...
{% endif %}