开发者

CodeIgniter "Template" system

Whenever I start a new project I find myself remaking and rethinking my self made template library. I use some influences from dom manipulation, but don't want to make too much functions so that it still loads fast.

This is how my current template system looks like:

This is a layout file:

<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>

As you can see I made 2 sort of "extra" tags that will be replaced when eventually publishing the template. I load this layout like this:

$this->template->load("layout");

I then can manipulate the block tags like this:

$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*/));

I can set text manually, I can load multiple views into 1 block, I can use a few dom-like manipulating functions like prepend, append, ...

I can even extend the template with more layout options like:

$this->template->content->extend("2columns");

This layout file might look like:

<div><block:left/></div>
<div><block:right/></div>

So that instead of the content block I now have an extra left and right block to put content in.

I have also created a widget tag that loads the specific widget class (/widgets/advertisement in this case). The optional parameters add开发者_运维知识库ed in the tags are passed on to the views files and/or widget display function together with the direct passed data array.

In short, this is how my system now works. I haven't really found other systems like this to get inspiration from. Could you guys give me advice on anything so I can put together one decent system that I can keep using?


My approach is:

  • Create main layouts for each page type on a layouts/ folder (think Wordpress layouts for home, archive, single post, single page)
  • Create common bits of interface in a common/ folder (think header, footer, sidebar, widget_XX, widget_YY)
  • Use Phil Sturgeon's Template Library (or Spark!) to handle the views.
  • On each controller I load all the data needed for rendering in $this->data and I pass that object to the view

Hope this helps! Good luck.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜