1

我编写了一个小型 php 模板解析器,因此可以轻松解析模板,并且模板中的变量就像{variable_name}eg

<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),但是由于我更像是编码器而不是设计师,我想知道我是否可以得到您的输入(因此设计师可以轻松理解语法而无需服务器端编码的知识)。

干杯!

4

6 回答 6

0

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

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

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

于 2010-09-27T18:28:32.277 回答
0

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

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

<!-- IF {value_which_should_be_true} -->

value_which_should_be_true 是真的!哦,还有{信息}

<!-- 否则 -->

value_which_should_be_true 不是真的……哦,还有 {different_information}

<!-- ENDIF -->

这样,您可以将 preg_replace 用于 \{([A-Za-z0-9_-]+)}\ 的值 $values[$1] ($1 是 preg_replace 的匹配项)作为值和唯一的您必须 exec() 位于注释块内。

于 2010-09-28T17:23:54.897 回答
0

在大括号中,您可以放置​​被评估的表达式

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

解析模板时,您可以评估大括号中的表达式

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

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

于 2010-09-27T18:19:38.547 回答
0

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

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

说得通。然后,您可以遵循一些标准并将 == 替换为 >= <= != 等...无需学习大量新语法:)

于 2010-09-27T18:22:12.883 回答
0

当然。
这里是:

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

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

<title><?=$title?></title>
于 2010-09-27T18:17:18.730 回答
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

于 2010-09-27T18:17:58.837 回答