CMF之BlockBundle

这个Bundle整合了SonataBlockBundle。它是用来管理内容的一部分,所谓的块,保存在数据库中,可以被纳入任何页面布局。

这个symfony2 cmf BlockBundle还提供了一些常用的标准块,包含编辑它们的能力。看看Block Types.

 

安装

你可以使用composer安装bundle,symfony-cmf/block-bundle包。

因为这个bundle使用SonataBlockBundle,你需要实例化一些sonata bundle到CmfBlockBundle:

 

使用

该BlockBundle需要配置一个persistence层。这可以在Core Bundle的全局配置内完成或者在个别地方完成如下所示:

一个块的默认setting定义在一个块服务中。如果你使用一个第三方块,你可能想为你的应用程序改变他们。给他定义一个sonata_block键。你能够为一个块服务类型或者为多个特定的块(block)类定义默认setting。后面,当你使用多个块类的相同的块服务,但你只想要块类的一个特定settings时,他会非常有用:

 你还可以存储settings到一个单一的块对象本身。它允许去分别配置每个块的实例。

如果你使用sonata admin编辑这个块,这里还提供 Block Sonata Admin Extension来为BaseBlock普通的块添加编辑选项。

 

更新SonataBlockBundle默认值

这个BlockBundle会自动改变一些默认值并将配置添加到SonataBlockBundle让他很好的工作。这是使用symfony的 prepended configuration 选项。更新下面的默认值:

  • templates.block_base:这个CMF基础模板封装的块会输出到一个div里并把这个PHPCR路径作为id;这个基础模板和不是CMF块的sonata基础模板保持兼容;
  • RssBlock configuration 添加了default RssBlock settings.

Settings只是预先被考虑,意思是默认值被改变。你能通过在你的应用程序文件中设置配置的值你仍能改变这些值。

 

Block Document

你能够呈现一个块之前,你需要在库中去创建一个数据对象代表你的块。可以用下面的代码片段:

注意这个sidebarBlock我们选择为这个块的标识符。与这个块的父document一起,定义了块的唯一标识符。其他属性(title和body)是Symfony\Cmf\Bundle\BlockBundle\Doctrine\Phpcr\SimpleBlock特定的。

这个简单的块现在准备好了去渲染,请看 Block 渲染。

确保你的块总是实现Sonata\BlockBundle\Model\BlockInterface接口或者继承一个已经存在的block document像Symfony\Cmf\Bundle\BlockBundle\Doctrine\Phpcr\AbstractBlock.

 

Block Context

该BlockContext包含了所有信息,并去渲染这个块需要的Block document.他集合并合并了所有配置的settings,block service(块服务),block document还有setting会传递到Twig模板助手。因此,使用这个BlockContext去获取和更改一个需要的settings。

 

Block服务

 

未完待续中。。。

发表评论