josueyli3 / li3_hierarchy
一个Lithium PHP插件,允许模板继承。它非常棒。
Requires
This package is not auto-updated.
Last update: 2024-09-14 13:30:36 UTC
README
不要太激动,这个项目才刚刚开始,目前还比较粗糙
安装
使用Composer
它就像派一样... 在于它很棒,派也很棒!
新接触Composer?别担心,它很容易用,而且非常值得学习:这个链接会帮助您。
修改项目的 composer.json
文件
{ "require": { ... "joseym/li3_hierarchy": "master" ... } }
运行 php composer.phar install
(或 php composer.phar update
),除了将其添加到您的库中,您应该一切就绪。
克隆、下载或子模块
古老的方式
- 将插件克隆/下载/子模块到您的应用
libraries
目录中。 - 告诉您的应用加载插件,通过向您的应用
config/bootstrap/libraries.php
添加以下内容
使用
在您的 config/bootstrap/libraries.php
文件中添加插件
<?php Libraries::add('li3_hierarchy', array( 'cache' => true // optional configuration, defaults to true in prod, false everywhere else. )); ?>
使用此插件,您不再像使用核心Lithium模板那样将视图分配给布局。
原始方法
您的布局
<html> <head>...</head> <body> ... <section><?php echo $this->content(); ?></section> ... </body> </html>
此方法阻止布局中的单个部分,所有位于视图中的内容都将结束于此。
虽然我认为这从技术上讲并不 坏,但它似乎有点限制
分层方法
您的布局
layouts/default.html.php
<html> <head>...</head> <body> ... <section>{:block "content"}Default Content{block:}</section> <div id="sidebar">{:block "sidebar"}Default Sidebar{block:}</div> ... </body> </html>
因此,我们设置了2个部分,
content
和sidebar
。我们可以从任何视图中随时更改这些部分。
下面是如何操作
首页视图
pages/home.html.php
{:parent "layout/default.html.php":} {:block "content"} <h2>Welcome to My site!</h2> This is my home page, please wipe your feet. {block:} {:block "sidebar"} <ul> <li><a href="#about">About Me</a></li> <li><a href="#github">My Github Profile</a></li> </ul> {block:}
所以你看这个,然后自己想,“好吧,那有什么特别的?”
别嘲笑,嘲笑者!
现在你想创建那个“关于我”页面。因为时间紧迫,你渴望去吃三明治,所以你决定,现在,这个页面与首页的唯一区别是侧边栏。你不想显示“关于我”页面的链接,而是显示“首页”页面的链接。(哇,Josuey的例子真是令人困惑!)
所以,你不需要重写这个页面,只需将其父级分配给首页,并修改侧边栏块
关于我
pages/about.html.php
{:parent "pages/home.html.php":} {:block "sidebar"} <ul> <li><a href="#home">Home</a></li> <li><a href="#github">My Github Profile</a></li> </ul> {block:}
好吧,我明白这是一个非常简单的例子,但我希望它能说明问题。
这对于处理大型、复杂的项目特别有用,当某些页面只修改一两个部分时。
其他功能
此插件允许您在需要的位置包含父/子模板的内容。
父级请求
关于我
pages/about.html.php
{:parent "pages/home.html.php":} {:block "sidebar"} {:parent:} <ul> <li><a href="#home">Home</a></li> <li><a href="#github">My Github Profile</a></li> </ul> {block:}
上面的 {:parent:}
行告诉渲染器加载存储在 pages/home.html.php
块 sidebar
中的内容,将其放置在您在 pages/about.html.php
块 sidebar
中分配的内容之上。
您还可以选择性地强制父级使用渲染,即针对特定类型(布局/模板)的专用路径。为此,请直接在 :parent 后指定布局/模板。
{:parent layout "pages/home":}
子级请求
类似于上面的例子:您可以从父级放置子内容
首页
pages/home.html.php
{:parent "pages/default.html.php":} {:block "sidebar"} <ul> <li><a href="#home">Home</a></li> <li><a href="#github">My Github Profile</a></li> </ul> {:child"} {block:}
现在您在sidebar
块内添加的内容将在pages/home.html.php
模板中的sidebar
块内容之后加载!
包装块
有时您可能希望在标记中加载子内容,但如果不存在子内容则不加载该标记。
下面是如何实现这一点。很简单!
首页
pages/home.html.php
{:parent "pages/default.html.php":} {:block "advert"} <div class="leaderboard advert"> {:child"} </div> {block:}
就像上面的child
示例一样,这会加载您从任何子模板(将pages/home.html.php
分配为其父模板的模板)中分配的advert
块内的任何内容。
如果扩展pages/home.html.php
的页面没有advert
块会发生什么?整个块将被删除!但是,如果您从子模板分配一个advert
块,则内容将加载到<div class="advert ..." />
标记内。
一些注意事项
-
该项目目前使用与许多“PHP模板引擎”类似的格式,但实际上它本身不是一个模板引擎。您将像以前一样处理每个其他lithium布局/视图尝试。该项目只试图满足提供更多功能和继承给视图渲染方法的必要性。
-
这个项目是在我为提供为Lithium项目提供的Smarty PHP支持插件工作时受到启发的。(真糟糕!)由于我无法忍受与PHP模板引擎一起工作,但实际上我认为Smarty的模板继承是一个好主意,我决定尝试在不受Smarty强加的限制的情况下实现/改进它。
未来的计划
- 我计划让这个插件能够处理在块内定义和修改的块,目前它不支持这一点。
- 缓存:我需要找出一个好的方法来缓存模板层次结构,但仍然知道何时进行了修改。
合作
一如既往,我欢迎您的合作,使事情“更好”,所以如果您愿意,请分叉并贡献。