2011-02-17 154 views
0

我试图建立自己的简单的模板处理程序能够轻松地窝和合并文件到变量和neccessary时要调用这些变量,文件,如下图所示:PHP:包括模板

$partial['header'] = 'header.php'; 

foreach($partial as $part => $view) { 
    $output[$name] = file_get_contents(APPPATH .'views/' . $view . '.php'); 
} 

extract($output, EXTR_PREFIX_ALL, 'template'); 

include 'mytemplate.php'; 

mytemplate.php模板文件:

<?php 
echo $template_header; // Shows the header. 

问题:
显然,file_get_contents加载PHP文件是不会insid调用任何PHP代码e加载的文件,我相信有更好的选项可用,然后使用eval我应该更改哪些内容才能在我的模板文件中使用PHP?

+1

FYI - 相信上面的代码将导致`header.php.php`的路径,因为`$ view`会是`header.php` a nd`.php`附加在`file_get_contents`中。 – Hamish 2011-02-17 20:16:54

+0

嗨哈米什,是的 - 这是正确的。当我将代码复制到SO上时,我负责监督。 – Industrial 2011-02-17 20:44:00

回答

1

更丑是可能的,但做你正在想什么:

function custom_get_content($filename){ 
    if (is_file($filename)) { 
     ob_start(); 
     include $filename; 
     $contents = ob_get_contents(); 
     ob_end_clean(); 
     return $contents; 
    } 
} 

然后,你可以把它叫做:

foreach($partial as $part => $view) { 
    $output[$name] = custom_get_content(APPPATH .'views/' . $view . '.php'); 
} 

我复制了从评论PHP手册,但无法找到它(这就是为什么它可能太丑陋了:D)

1

读取脚本的方法并不是最好的方法。你必须要eval他们。

而仅仅是为了记录:

include($filename); 

在功能上等同于:

eval("?>" . file_get_contents($filename)); 

克服它。 “eval是邪恶的”meme就是这样一个模因。所以如果你想保持自己的想法,你可以使用eval("?>$template_header");而不是echo

另一种方法是跳过文件读取,并让您的$template_vars包含文件名而不是其内容。然后做一个普通的include($template_header);