CodeIgniter“模板”系统
问题描述:
每当我开始一个新的项目时,我发现自己正在改造和重新思考我自己制作的模板库。我使用dom操作的一些影响,但不想做太多的功能,以便它仍然快速加载。CodeIgniter“模板”系统
这是我目前的模板系统的样子:
这是一个布局文件:
<body>
<div id="content">
<block:content>This is a default text</block:content>
</div>
<div id="sidebar">
<widget:advertisement type="wide" />
<block:sidebar this_param="is_passed_on" />
</div>
</body>
正如你可以看到我做了2样的“额外”的标签将被当最终取代发布模板。我加载此布局是这样的:
$this->template->load("layout");
我然后可以操纵块标记是这样的:
$this->template->content = "I'm overwriting the default text";
$this->template->content->prepend("I forgot something");
$this->template->sidebar->view("viewfile_1", array(/*data*/));
$this->template->sidebar->view("viewfile_2", array(/*data*/));
我可以手动设置文字,我可以多个视图加载到1块,我可以使用一个像前面加上一些类似DOM的操纵功能,追加,...
我甚至可以与像更布局选项扩展模板:
$this->template->content->extend("2columns");
这种布局文件可能看起来像:
<div><block:left/></div>
<div><block:right/></div>
这样,而不是内容分块我现在有一个额外的左,右块把内容
我还创建了一个小部件标记,加载特定的窗口小部件类(在这种情况下是/ widgets/advertisement)。在标签中添加的可选参数与直接传递的数据数组一起传递到视图文件和/或小部件显示函数。
总之,这就是我的系统现在的工作原理。我还没有真正发现这样的其他系统可以从中获得灵感。你们能否给我任何建议,以便我可以把一个体面的系统放在一起,我可以继续使用?
答
我的做法是:
- 在布局/文件夹(想回家,归档,单篇文章,单页WordPress的布局)
- 创建界面的共同位为每个网页类型主要布局一个公共/文件夹(想想页眉,页脚,侧边栏,widget_XX,widget_YY)
- 使用Phil Sturgeon's Template Library(或Spark!)来处理视图。
- 在每个控制器我加载需要渲染$这个 - >数据的所有数据和我传递对象视图
希望这有助于!祝你好运。
我不确定这是不是你正在寻找,但我的系统是一个更复杂的版本:http://www.reanmachine.com/2011/04/21/codeigniter-theming -a-common-problem/ – Aren 2011-06-02 17:04:38
@Aren,我不明白你的博客是如何显示更复杂的,因为你只使用内置的CI视图功能? – Jens 2011-06-02 17:24:49
对不起,我想在我看来,我没有像我那样简化博客文章的例子。我的实际实现要复杂得多,并且使用'load-> view'的更多占位符风格的方法来提高速度。 – Aren 2011-06-02 18:11:53