詹姆斯瓦茨/cake-markup-language

CakePHP 插件,通过用基于 XML 的标记替换过程式 PHP 代码来进一步抽象视图层

dev-beta 2014-07-20 22:45 UTC

This package is not auto-updated.

Last update: 2024-09-24 01:07:41 UTC


README

Cake Markup Language 是一个 CakePHP 插件,通过用基于 XML 的标记替换过程式 PHP 代码来提供视图层的抽象。

使用 CakeML 可以帮助您保持视图代码的整洁和有序,同时通过限制视图层中的应用程序逻辑来维护严格的 MVC 规范。

该插件的主要功能包括

  • 熟悉语法: CakeML 标记使用的语法与 XHTML 相同,因此无需学习新的格式或模式,任何能够突出显示 XML 的 IDE 或代码编辑器也将为您视图文件提供同样的功能。
  • 为设计师准备: 由于语法通用,视图文件对设计师和非开发人员更加易用,使他们能够在不具备任何先验技术知识的情况下自行引入代码。
  • 简单模板化: 该插件提供基本的模板逻辑,例如 if/elseif/else 条件语句、foreach 循环和 switch,以及 CakePHP 中用于创建动态内容的视图块。
  • 内部调试: 通过在解析器组件上启用调试模式,您可以在视图处理之前快速查看编译后的视图,在渲染为输出之前对生成的代码有一个清晰的了解。
  • 设计可扩展性: 由于 CakeML 中使用的标记标签被组织在公共命名空间下,您可以轻松地从 CakePHP 插件中导入自己的自定义或 第三方 命名空间,从而允许您在其他应用程序中重用标签。
  • 即插即用: 使用该插件就像包含解析器组件一样简单,这不会限制您继续使用正常的 ".ctp" 文件,因为您甚至可以在同一个控制器中使用两种格式为不同的视图。
  • 兼容性: 目前在 CakePHP 中所有视图功能仍然可用,例如 主题布局元素内容块助手,布局和元素也可以包含 CakeML 标记。

要开始使用 Cake Markup Language,只需在您的控制器中包含插件中的 ParserComponent 即可,例如

public $components = array(
	'Cml.Parser' => array(
		'ignoreAction' => array('example') // allow "example" action to continue using "example.ctp"
	)
);

使用 CakeML 的视图、布局和元素文件使用 ".cml" 扩展名保存,以区别于标准 ".ctp" 模板。要创建视图,只需包含 CakeML 标记以及您的静态 HTMLCSSJavaScript 客户端代码。

<div id="example">
	<cake:out value="Hello World" />
</div>

您还可以使用 php 命名空间中的条件语句以及视图变量来创建动态内容。例如,通过在控制器中设置 $this->set("text", "Hello World");,您可以在视图中读取它,使用 %{variable} 显示它,如下所示

<php:if expr="!empty(%{text})">
	<cake:out value="%{text}" />
<php:else />
	<cake:out value="Nothing here" />
</php:if>

但是,也可以通过使用 default 属性来实现相同的效果

<cake:out value="%{text}" default="Nothing here" />

更复杂的操作包括 forforeachwhile 循环,它们提供了快速模板化的能力,包括自动声明变量和空数组的默认值。

<php:foreach var="products" default="No products found">
	<cake:out value="%{COUNT}. %{KEY} = &quot;%{VALUE}&quot;" safe="true" />
</php:foreach>

cake 命名空间还提供许多常用标签,例如包含 元素

<cake:element name="sidebar" options="['example' => %{value}]" />

您还可以轻松创建 链接,以下示例使用 #{literal} 来加载翻译字符串,以及包含额外的 HTML 内容。

<cake:link value="#{Read more}" url="['controller' => 'Posts', 'action' => 'view', %{postId}]" />

<cake:link url="['controller' => 'Posts', 'action' => 'view', %{postId}]">
	<span>#{Read more}</span>
</cake:link>

最重要的功能可能是表单,它也可以快速生成。

<cake:form model="Example" submit="#{Send}" options="['action' => 'add']">
	<cake:input field="Example.column" options="['type' => 'number']" />
</cake:form>

cake 命名空间还允许您访问任何核心或第三方助手,这意味着使用现有的助手不需要进行任何更改。

<cake:helper name="Example" get="someProperty" />

<cake:helper name="Example" call="someFunction" args="['Hello World']" set="something" />
<cake:out value="%{something}" safe="0" />

要快速上手,请查看快速入门Hello World教程,这些教程可在文档中找到。

要求

  • CakePHP 2+
  • PHP 5.3+

文档

完整的文档包含在插件中,可在本仓库的Docs目录中找到。

支持

有关支持、错误和功能请求,请使用本仓库的问题部分。

贡献

如果您想向代码库贡献新功能、增强功能或错误修复,请按照以下步骤操作

在代码合并之前,可能会有一些关于您对仓库的贡献的讨论,所以如果需要,请准备好提供有关您贡献的反馈。

可以在这里找到对Cake Markup Language做出贡献的列表这里

许可证

版权所有 2013 James Watts (CakeDC)。保留所有权利。

在MIT许可证下授权。包含在本仓库中的源代码的再分发必须保留每个文件中的版权声明。

致谢

特别感谢Larry MastersCakePHP的创始人,以及整个CakeDC团队对他们的反馈和支持。