在不使用smarty等的情况下替换html页面中占位符的最佳做法是什么?

时间:2010-10-05 15:56:34

标签: php smarty

以下是我所做的基本示例。

抓取HTML模板

$template = file_get_contents("skins/".CSS_URL."/layouts/homepage.html");

构建要搜索的项目数组

$search = array("|{THUMB_FEATURED_IMAGE}|", "|{LARGE_FEATURED_IMAGE}|", "|{PAGE_CONTENT}|");

构建项目数组以用

替换搜索结果
$replace = array($featured_image, $featured_image_l, $content);

进行实际替换

$output = preg_replace($search, $replace, $template);

然后回显输出。

这是不好的做法和/或是否有更好的方法而不必使用Smarty重写我的整个CMS?

3 个答案:

答案 0 :(得分:2)

我说这样做并不是非常可怕,虽然它不是非常有利于资源,因为你有效地将内容拉两次。

只是在模板<?php echo $featured_image; ?>中使用PHP标签并使用include()包含模板文件不是一个更容易的选项吗?

答案 1 :(得分:0)

我认为最好的答案是使用PHP变量。然后,您只需包含“模板”文件,其中包含常规变量。

如果你真的想尝试一下你正在做的事情。你最好使用一个真正的HTML解析器。它可能会更快,更不容易出错。虽然实施它可能需要花费与实施Smarty相同的时间。

答案 2 :(得分:0)

这是一个古老的话题,但对于任何可能会看到这一点的人来说。 虽然我不确定它的最佳实践,但我一直在做的是通过数组返回一个包含和解析占位符。

<?php //page.php
$html = "<html>
              <head>
                  <title>{PageTitle}<title>
              </head>
             ...
        </html>";
return $html;

然后简单地

  function parseHTML($pageContents, $placeholders){
        foreach($placeholders as $placeholder=>$value){
             str_replace("\{{$placeholder}\}",$value,$pageContents);
        }
        return $pageContents;
  }


$placeholders = ['PageTitle'=>'This is my page title'];

$pageContents = include "page.php";

$parsedHTML = parseHTML($pageContents, $placeholder);

输出看起来像

        <html>
              <head>
                  <title>This is my page title<title>
              </head>
             ...
        </html>

就像我说的那样,我并不是百分之百地说这是有效率的。我使用它是因为我的大多数项目都很小。