【问题标题】:PHP: Inserting variables into template file - include() or file_get_contents()?PHP:将变量插入模板文件 - include() 或 file_get_contents()?
【发布时间】:2015-07-06 18:31:43
【问题描述】:

我正在做一个项目,我将所有 HTML 内容与 PHP 代码的其余部分分开。需要为 PHP 变量解析任何 HTML 的每个实例都通过函数调用发送。其中大多数处理来自数据库的动态数据。

一个简单的模板文件示例:

<div id='{$data['id']}'>{$data['text']}</div>

$data 数组中的变量通过函数调用传递,其中 HTML sn-p 需要添加到输出缓冲区:

$output .= $html->load_template('template_id', array('id' => 123, 'text' => 'Testing'));

html::load_template() 函数只是定位正确的文本文件,并且应该加载变量并将字符串作为 HTML 返回。这是我遇到问题的地方:

    public static function load($template, $data=array()) {
       ob_start();
       include ( TEMPLATE . $template .'.tpl' );
       ob_flush();
    }

我尝试使用 include() 和 file_get_contents(),但无济于事 - 我正在寻找一个简单的解决方案,我可以使用 {$data['var']} 语法,最好保留模板 HTML作为一个简单的变量,因此可以将其添加到输出中。

我试图避免使用 eval()。

谁能给我一些指导?

【问题讨论】:

    标签: php variables templates


    【解决方案1】:

    我过去也做过同样的事情,你可以像这样修改下面的代码:

    public static function load($template, $data=array()) {
        ob_start();
        include ( TEMPLATE . $template .'.tpl' );
        $getData = ob_get_clean();
        preg_match_all("|{([^>].*)}|U", $getData, $getDataArr, PREG_SET_ORDER);
        if (is_array($getDataArr) && count($getDataArr) > 0) {
            foreach ($getDataArr as $php) {
                if (strpos($php[1],'$') !== false) {
                    $getData= str_replace($php[0], (eval('return $'.str_replace('$', '', $php[1]).';')), $getData);
                }
            }
        }
    
        echo $getData;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 2011-10-17
      • 1970-01-01
      • 2019-05-15
      • 2019-02-04
      相关资源
      最近更新 更多