2

我正在使用 CodeIgniter,并且可能会使用他们的模板库,因为我想让事情变得非常简单易用。模板变量的内容将来自数据库,但我希望业务管理员知道哪些内容区域可用。基本上是选择特定模板时的参数名称。例如,Joomla 使用一个额外的 XML 文件来定义每个区域,而 Wordpress 使用页面模板中的注释来通知系统 PHP 文件是一个模板。我喜欢 Joomla 方法,因为您不必解析 PHP 文件来查找区域,但我喜欢 Wordpress 方法,因为您没有与每个模板关联的额外 XML 文件。我还缺少其他方法吗?

4

4 回答 4

1

您可以直接在控制器中执行此操作:

// in the controller
print_r($data);
$this->load->view("main", $data);

或者更简单一点,但您可以将 PHParray变量(或object)传递给模板:

// in the controller
$data = array();
$data["namespace"] = array(
    "title" => "My website",
    "posts" => array("hi", "something else")
);
$this->load->view("main", $data);

然后在视图中,有一个标志来显示所有可用print_rnamespace变量,以便业务管理员确切知道要使用什么。

// in the view
if(isset($namespace["showAllVars"])) print_r($namespace);
于 2009-02-18T19:12:06.387 回答
1

我认为最好的方法是在模板解析器类中添加一个小技巧。代码在 system/libraries/Parser.php 中看起来非常可读和干净。您可以在该类中插入一个可用于跟踪变量的钩子。我不知道它是否有效,但这里有一个片段:

class CI_Parser {
    var $varCallback;
    function setVarCallback($callbackFunction) {
        $this->varCallback = $callbackFunction;
    }
    ...
    function _parse_single(...) {
        $callback = $this->varCallback;
        $callback($key);
    }
...

//Somewhere in your code
function storeVarName($variableName) {
    // Persist the variable name wherever you want here
}
$this->parser->setVarCallback('storeVarName');
于 2009-02-24T09:30:55.847 回答
0

一种选择是在 PHP 文件上调用token_get_all(仅当您的业务管理员正在加载它时),并解析该文件的输出。

于 2009-02-19T20:11:53.380 回答
0

在我看来,最好的方法是将变量定义保存在另一个地方(例如数据库表或单独的文件)。这将有助于测试(即,程序员不能只是删除标签然后它就消失了)并确保在您及时进行应用程序开发时事情仍然有效。

另一个优点是您的应用程序逻辑将独立于模板引擎。

附带说明一下,如果您预计会有很多流量,您可以考虑使用 smarty。我们已经对周围的大多数模板引擎进行了广泛的测试,smarty 是最快的。

于 2009-02-22T08:01:17.513 回答