【问题标题】:Assign php code to smarty template engine将 php 代码分配给 smarty 模板引擎
【发布时间】:2016-09-28 06:11:31
【问题描述】:

我为我的公司创建了一个新网站,我想为此使用 smarty (v3.1.29)。现在的问题是我们存储所有页面的代码在我们的数据库中(主页、产品、下载...)。有些页面包含 PHP 内联函数,例如:

<?php include("functions.php"); ?>    

<p> Hello <?php echo printWorldInColor(); ?> </p>

在我的模板 (.tpl) 文件中,我有一个 div 部分来从我们的数据库中加载内容:

<html>
  <body>
    <div id="content">
      {$content}
    </div>
  </body>
</html>

所以我的代码之后看起来像这样:

<html>
  <body>
    <div id="content">
      <?php include("functions.php"); ?>    

      <p> Hello <?php echo printWorldInColor(); ?> </p>
    </div>
  </body>
</html>

有没有一种方法可以在解析 PHP 代码之前对其进行处理?

提示:我不想编辑我的模板文件。我只想将数据库内容解析到网站的内容部分。


我尝试了什么:

  • 将数据库内容保存为字符串并用 smarty-PHP-tags 替换 PHP-tags,然后将其分配给模板
  • SmartyBC 级

【问题讨论】:

    标签: php smarty assign


    【解决方案1】:

    你不能在 Smarty 中做到这一点。运行存储在数据库中的 php 代码听起来是个糟糕的主意。但是如果由于某种原因你不得不继续这种废话(并且考虑到你不能使用 eval),你可以试试这个:

    1. 从数据库中读取php代码。
    2. 保存到临时 php 文件
    3. 使用 ob_start() 开启输出缓冲
    4. 包含您创建的文件
    5. 使用 ob_get_clean() 将输出分配给变量
    6. 将变量分配给模板

    但如果我是你,我会尝试用另一种方式来完成这个项目。

    【讨论】:

    • 感谢您的回答。我没有想过要重做整个网站,我也不知道为什么这些页面会存储在数据库中。我想我先创建一个没有该数据库的新站点,然后根据需要编辑数据库/表。
    • 现在我知道我们为什么将代码存储在数据库中了。它与我们的更新系统有关。在我们的 Intranet 中,我们可以更新网站并将更改直接上传到公共网站数据库。然后公共网站从数据库中加载页面内容。
    猜你喜欢
    • 2011-06-03
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多