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

时间:2010-09-27 18:08:33

标签: php parsing templates templating

我编写了一个小的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}

上面演示了基本的if / else模板语法(它检查变量logged_in == true),但由于我更像是编码器,然后是设计师,我想知道我是否可以输入(因此设计人员可以轻松理解不知道服务器端编码的语法。

干杯!

6 个答案:

答案 0 :(得分:0)

不确定。
这是:

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

最好的语法。
如您所见,打开和关闭标签略有改变 但是根本不需要解析任何东西 - 只需include这个文件!
顺便说一句,你的输出看起来像

<title><?=$title?></title>

答案 1 :(得分: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; ?>

换句话说,根本没有模板引擎

除非你是学习经验而不是模板引擎,否则只需使用PHP

答案 2 :(得分: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}

您也可以考虑将单个大括号更改为双倍,因为它不太可能出现在您的模板文件中。

答案 3 :(得分:0)

通常条件语法与变量替换语法不同,因为它们可能有一个名为$ else etc ...

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

有道理。然后你可以遵循一些标准并将==替换为&gt; =&lt; =!= etc ...而无需学习大量新语法:)

答案 4 :(得分:0)

是的,为什么你不想使用Smarty之类的东西,这是一个成熟的模板系统?我一直都在使用它,它很完美。

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

您的语法看起来很合理,但您可以使用它。

答案 5 :(得分:0)

对于那些说你应该避免使用模板系统的人来说,模板有很多优点。例如,假设您创建了一个功能丰富的大型套件(论坛软件,配置文件,动态用户内容,作品),并且您希望人们能够编辑信息的外观。如果你给他们直接的基于PHP的访问,他们可以很容易地破坏某些东西并使你的脚本不再编译。他们还可以注入PHP来获取隐藏在代码中的变量,或者完全让你的软件瘫痪。使用模板限制了他们可以做的事情,因此它限制了他们可以破坏的东西。

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

&lt;! - IF {value_which_should_be_true} - &gt;

value_which_should_be_true是真的!哦,和{information}

&lt;! - ELSE - &gt;

value_which_should_be_true不是真的......哦,{different_information}

&lt;! - ENDIF - &gt;

这样你就可以使用preg_replace for \ {([A-Za-z0-9 _-] +)} \,其值为$ values [$ 1]($ 1是来自preg_replace的匹配)的值和exec()唯一需要的就是注释块。