PHP 模板变量 - smarty 风格(或其他更好的风格)和无限深度

PHP templating variables - smarty style (or other better style) and unlimited depth

提问人:Josh Dredge 提问时间:4/30/2013 更新时间:4/30/2013 访问量:129

问:

我正在开发一个模板系统,它首先需要高效,其次需要易于阅读。

我以前做过几乎相同的事情,但它涉及preg_match_all——无可救药的低效。

所以,假设我们有这样的 HTML:

<body>
     <h1><!--[%variable]--></h1>
     <b><!--[%array['key']]--></b>
     <div>
         <!--[template:templateName]-->
     </div>
</body>

正如你所看到的,我们有一个变量、一个数组键和嵌入式模板,它应该用(字面意思)替换为 : 和 。$variable$array['key']parseTemplate($templateName)

解释起来很混乱。

我需要访问大多数变量,这似乎是一个问题,特别是因为模板中可以嵌入模板。我现在完全不知所措。虽然像往常一样,在编码时,我睡眠严重不足。

由于我需要语法高效,因此上面的 HTML 语法是不必要的,我目前在我的模板文件中:

<?php
$template[$templateName] = '<body>
     <h1>'.$variable.'</h1>
     <b>'.$array['key'].'</b>
     <div>
         '.parseTemplate('templateName', $varsToPass).'
     </div>
 </body>
 ?>

其中 parseTemplate() =

function parseTemplate($tpl, $vars){
    global $rootDir;

    foreach($vars as $var){
        global $$var;
    }

    require_once($rootDir.'/templates/'.$tpl.'.tpl.php');
    return $template[$tpl];
}

这样做的问题是,您必须向下传递每个多个级别,如果多个页面使用相同的模板,则要向下传递的变量通过多个级别。$vars

因此,如果有人对如何做到这一点有任何想法,请告诉我,我将不胜感激。我只是通过打字就提出了一些想法,但我期待听到其他人的想法。

谢谢

PHP 模板化 变量变量

评论

0赞 Jason 4/30/2013
您是否只是想在您的应用程序中集成一些类似 Smarty 的功能?或者您实际上是在编写自己的模板引擎?我问的原因是 Smarty 可以集成,您可以将其用作模板引擎,而无需使用其典型的 .TPL 文件模板系统。你可以看看另一个想法 phpsavant.com 这是一个全PHP模板引擎
0赞 Josh Dredge 4/30/2013
嗨,我正在编写自己的“模板引擎”。我设法弄清楚我想要什么,我只是以错误的方式看待它。感谢您的建议

答: 暂无答案