2011-01-20 84 views
4

我呼吁load_template()PHP:简单的模板引擎

函数这个函数有两个参数

  • $名称=>此模板的名称
  • $瓦尔=>的关键阵列=>值模板中要替换的变量。

我想这样工作的方式是。

模板( '测试'),我希望能写

<?php echo $title; ?> 

然后调用

load_template('test', array('title' => 'My Title')); 

,并把它填出来。

我该怎么做?


输出缓冲方法。 我已经拿出下面的代码。
我相信它可以改进。

public static function template($name, $vars = array()) { 
    if (is_file(TEMPLATE_DIR . $name . '.php')) { 
    ob_start(); 
    extract($vars); 
    require(TEMPLATE_DIR . $name . '.php'); 
    $contents = ob_get_contents(); 
    ob_end_clean(); 
    return $contents; 
    } 
    throw new exception('Could not load template file \'' . $name . '\''); 
    return false; 
} 
+0

你能告诉我们你到目前为止有什么吗? – jasonbar 2011-01-20 20:27:53

+0

ob-way是好的,如果你需要返回的内容。但是,除了一些罕见的例外情况,我认为没有用。为什么不让它直接进入浏览器? – 2011-01-20 20:45:37

+0

标准包括什么错误?你是模板变量名吗?为什么是$ title =“我的标题”;包含“test.templ”不够? – 2011-01-20 21:15:27

回答

10
function load_template($name, $vars) 
{ 
    extract($vars); 
    include $name; 
} 

缠上ob_start,如果你想捕捉到一个变量输出ob_get_clean

2

像这样的东西?

function load_template($name, $vars) 
{ 
    include('template/'.$name.'.tpl'); //.tpl, .inc, .php, whatever floats your boat 
} 

template/whatever.tpl你必须:

... 
<title><?php echo $vars['title'] ?></title> 
... 

... 
<?php if (!empty($vars['content'])): //template still needs to know if the content is empty to display the div ?> 
    <div id="content"> 
<?php echo $vars['content']; ?> 
    </div> 
<?php endif; ?> 
... 

当然,这假定输出直接打印。 你可以直接打印tpl文件,或者生成一个字符串,或者缓存tpl文件的输出并将其返回load_template