2011-02-17 280 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);