josueyli3/li3_hierarchy

一个Lithium PHP插件,允许模板继承。它非常棒。

安装: 319

依赖: 0

建议者: 0

安全: 0

星标: 10

关注者: 4

分支: 2

公开问题: 4

类型:lithium-library

dev-master 2013-07-31 01:24 UTC

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),除了将其添加到您的库中,您应该一切就绪。

克隆、下载或子模块

古老的方式

  1. 将插件克隆/下载/子模块到您的应用 libraries 目录中。
  2. 告诉您的应用加载插件,通过向您的应用 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个部分,contentsidebar。我们可以从任何视图中随时更改这些部分。

下面是如何操作

首页视图

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.phpsidebar 中的内容,将其放置在您在 pages/about.html.phpsidebar 中分配的内容之上。

您还可以选择性地强制父级使用渲染,即针对特定类型(布局/模板)的专用路径。为此,请直接在 :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 ..." />标记内。

一些注意事项

  1. 该项目目前使用与许多“PHP模板引擎”类似的格式,但实际上它本身不是一个模板引擎。您将像以前一样处理每个其他lithium布局/视图尝试。该项目只试图满足提供更多功能和继承给视图渲染方法的必要性。

  2. 这个项目是在我为提供为Lithium项目提供的Smarty PHP支持插件工作时受到启发的。(真糟糕!)由于我无法忍受与PHP模板引擎一起工作,但实际上我认为Smarty的模板继承是一个好主意,我决定尝试在不受Smarty强加的限制的情况下实现/改进它。

未来的计划

  1. 我计划让这个插件能够处理在块内定义和修改的块,目前它不支持这一点。
  2. 缓存:我需要找出一个好的方法来缓存模板层次结构,但仍然知道何时进行了修改。

合作

一如既往,我欢迎您的合作,使事情“更好”,所以如果您愿意,请分叉并贡献。