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强加的限制的情况下实现/改进它。
未来的计划
- 我计划让这个插件能够处理在块内定义和修改的块,目前它不支持这一点。
- 缓存:我需要找出一个好的方法来缓存模板层次结构,但仍然知道何时进行了修改。
合作
一如既往,我欢迎您的合作,使事情“更好”,所以如果您愿意,请分叉并贡献。