这个Bundle整合了SonataBlockBundle。它是用来管理内容的一部分,所谓的块,保存在数据库中,可以被纳入任何页面布局。
这个symfony2 cmf BlockBundle还提供了一些常用的标准块,包含编辑它们的能力。看看Block Types.
安装
你可以使用composer安装bundle,symfony-cmf/block-bundle包。
因为这个bundle使用SonataBlockBundle,你需要实例化一些sonata bundle到CmfBlockBundle:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// app/AppKernel.php // ... class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // ... new Sonata\BlockBundle\SonataBlockBundle(), new Sonata\CoreBundle\SonataCoreBundle(), new Symfony\Cmf\Bundle\BlockBundle\CmfBlockBundle(), ); // ... } // ... } |
使用
该BlockBundle需要配置一个persistence层。这可以在Core Bundle的全局配置内完成或者在个别地方完成如下所示:
1 2 3 4 |
cmf_block: persistence: phpcr: block_basepath: /cms/content |
一个块的默认setting定义在一个块服务中。如果你使用一个第三方块,你可能想为你的应用程序改变他们。给他定义一个sonata_block键。你能够为一个块服务类型或者为多个特定的块(block)类定义默认setting。后面,当你使用多个块类的相同的块服务,但你只想要块类的一个特定settings时,他会非常有用:
1 2 3 4 5 6 7 8 9 10 |
# app/config/config.yml sonata_block: blocks: acme_main.block.news: settings: maxItems: 3 blocks_by_class: Symfony\Cmf\Bundle\BlockBundle\Doctrine\Phpcr\RssBlock: settings: maxItems: 5 |
你还可以存储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
你能够呈现一个块之前,你需要在库中去创建一个数据对象代表你的块。可以用下面的代码片段:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
use Symfony\Cmf\Bundle\BlockBundle\Doctrine\Phpcr\SimpleBlock; // ... /** @var $dm \Doctrine\ODM\PHPCR\DocumentManager */ $parentDocument = $dm->find(null, '/cms/content/home'); $myBlock = new SimpleBlock(); $myBlock->setParentDocument($parentDocument); $myBlock->setName('sidebarBlock'); $myBlock->setTitle('My first block'); $myBlock->setBody('Hello block world!'); $dm->persist($myBlock); |
注意这个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服务
未完待续中。。。