cmf快速入门之第三方Bundle

你还没走?你已经学习了基础的Symfony CMF并且你只是想学习,越来越多吗?那你就来阅读这一章吧!这一章将会快速介绍一些其他的CMF bundles。大多数的其他bundle都建立在巨人的肩膀上,像这个KnpMenuBundle 和 SonataAdminBundle.

MenuBundle

让我们开始MenuBundle。如果你访问页面,你能够看到一个很棒的菜单。你能在AcmeDemoBundle的layout视图中找到这个渲染的菜单:

正如你看到的,这个菜单通过  knp_menu_render标签渲染。这似乎有点奇怪,我们正在谈论CmfMenuBundle而不是KnpMenuBundle,不是吗? 当然正确,但事实是CmfMenuBundle建立在KnpMenuBundle基础上的bundle。

通常,knp_menu_render()是使用菜单名称作为参数去渲染,但当使用CmfMenuBundle时,他是一个节点id。在这个例子中,这个/cms/simple里菜单包含所有实现NodeInterface的项(因为这个web全路径在标准版里是 /cms)。

除了包括PHPCR菜单提供器,这个CmfMenuBundle还提供了Admin类。看本章关于 Sonata Admin的知识。

 

CreateBundle

我们已经在第一章看到过这个bundle。这个bundle使用FOSRestBundle结合了CreatePHP库(使用这个Create.js库)到Symfony2。

这个Create.js库使用一个REST层。页面上的所有元素获得RDFa Mappings,就是告诉Create.js如何将元素映射到文件。当你保存页面时,这个新的内容是传入到REST api并保存到数据库。

RDFa mappings呈现内容会非常容易,你能在标准版看到:

它将使用< div >元素输出内容对象。你也可以使用createphp_*函数来完全自定义。

 

BlockBundle

如果你访问这个标准版的主页,你将看到三个块:

3rd-party-bundles-homepage

这些块可以自己编辑和使用。这些块通过BlockBundle提供,他建立在SonataBlockBundle层之上。它提供实用PHPCR来存储块的能力并增加了一些常用的块。

这三个块在标准版里是自定义块。一个块是通过一个块服务来处理。你能够在Acme\DemoBundle\Block\UnitBlockService类中找到这个服务。自从这个块使用PHPCR持久化以来,他还需要一个块文档,他在Acme\DemoBundle\Document\UnitBlock中。

 

SeoBundle

还有一个SeoBundle。这个bundle建立在SonataSeoBundle之上。它提供了一种方法来从文档提取SEO信息并使用admin来编辑SEO信息。

标准版集成了这个SeoBundle,你需要composer require symfony-cmf/seo-bundle命令把它包含到你的项目中,然后注册CMF和Sonata Bundle的seo到AppKernel:

现在,你可以配置一个标准的title。当CmfSeoBundle从一个内容对象中取出这个title,这个title就被使用了:

这个%%content_title%%将被从内容对象里获取的title所替换。你最后需要做的事情就是使用这个标题的标题元素。要做到这一点,就在src/Acme/DemoBundle/Resources/views/layout.html.twig模板中替换<title>标签:

当你访问你的新网站时,你就能看到每个页面的标题了。

一些页面,像登陆页面,不需要使用内容对象。在这个例子中,你能配置默认的title:

 这个默认的title是配置在sonata_seo扩展下,这个标准版的title被配置在cmf_seo扩展下。

这个title仅仅是SeoBundle的一个特性,它能够开始或者处理更多的seo信息。

 

Sonata Admin

我们已经解释了你的这个CMF是基于数据库,为了可以不改变代码通过一个admin来编辑。但是我没有告诉你admin如何管理和维护网站。现在是时候该展示怎么做了:使用SonataAdminBundle。CMF bundle定义了一些可编辑的元素也提供了在admin中其他的元素可编辑。

默认,当这个SonataDoctrinePHPCRAdminBundle被安装,在CMF bundle中的所有admin类将被启用。你可以在配置中关掉这个admin类。例如,禁用MenuBundle的admin类,你应该这么做:

你也能禁用/启用所有的CMF admin类,通过配置这个cmf_core bundle:

当这个admin类被启用,这个admin能够访问/admin(如果你正确安装了SonataAdminBundle)并找到著名的admin dashboard,看到所有需要的:

3rd-party-bundles-sonata-admin

你看到在左边,admin使用TreeBrowserBundle去显示现有的admin树,在这里这个admin能够去点击节点,去编辑,删除或者移动她们。

 

总结

你做到了!让我们来总结一下你在快速入门学到了什么:

  • symfony的CMF是高度可定制的内容管理系统;
  • Symfony CMF团队创建的bundle是一个具有CMS特性的bundle,可以两者一起使用还可独立使用;
  • Symfony CMF使用数据库为了让admin做更多编辑的事情,然而配置保存在文件系统去保持部署的简单并支持版本控制;
  • PHPCR是建立CMS系统的一个伟大的数据库,但symfony cmf也能使用任何其他的存储系统;
  • 相反,结合控制器到路由,路由再绑定内容对象;
  • Symfony CMF当心不要重复发明轮子。很多的bundle集合一处俗称symfony2 bundle;

 

我不能告诉你更多关于体系结构和Symfony CMF Bundle,但仍然可以有很多的探索。看看the book ,开始使用Symfony CMF来做第一个项目。

 

 

发表评论