首页内容列表显示-使用TEEBB快速搭建您的网站
我们已经把顶部导航区块抽取到了header.html.twig文件里。
我们在header文件中完成顶部导航区块的功能。
TEEBB使用了`SonataBlockBundle`, 并且提供了几个block类型,可以在命令行中输入
symfony console debug:sonata:block
查看所有的block类型。在顶部导航区我们想要展示最新的一篇公告,使用:
>> teebb.core.block.contents
entity_class "Teebb\\CoreBundle\\Entity\\Content"
label ""
translation_domain "messages"
limit 5
template "@TeebbCore\/blocks\/last_contents.html.twig"
criteria []
order []
exclude []
这个block类型可以按指定条件获取对应数量的内容。
`entity_class`:在TEEBB中所有可以使用字段系统的类型EntityType,都对应一个Entity类,用于存储具体的内容数据。
所有内容类型的对应的Entity类都是`Teebb\\CoreBundle\\Entity\\Content`类,block类型已经设置了默认参数为Content类可以省略。
`label`: 你可以设置一个label标签,如果你的的block模板需要一个标题,可以在模板中输出这个label标签。
`translation_domain`: 如是你需要做国际化,这是进行翻译的域名称,默认使用messages,对应的翻译文件为:messages.{local}.yaml或者messages.{local}.xml
`limit`: 获取的内容的数量。
`template`: block的模板文件,一会我们会定义自己的模板。
`criteria`: 获取内容列表时的查询条件。举个例子:Content类中定义了typeAlias属性来存储当前内容所属于的类型,在twig中,我们可以设置参数 `{typeAlias: 'announcement'}`。
`order`: 结果的排序,比如id降序可以写成 `{id: 'DESC'}`。
`exclude`: 如果你想在查询结果中排除某些项,需要设置这个参数。
在模板中,我们使用twig函数:sonata_block_render 来渲染block。
{{ sonata_block_render({type:'teebb.core.block.contents'}, {
limit:1,
order: {createdAt: 'DESC'},
criteria: {typeAlias: 'announcement'},
template: 'blocks/latest_announcement.html.twig'
}) }}
我们来定义最新公告block模板,在templates目录下创建blocks目录,添加latest_announcement.html.twig
每个block类型,都对应一个blockService类,在execute函数中,将参数传入block模板。
使用 {{dump()}} 函数来查看blocks模板中有什么参数,contents参数是我们的公告内容列表,
在twig中使用for关键字来循环遍历结果:
{% for content in contents %}
{% endfor %}
把header.html.twig中公告那段html代码粘贴过来,修改,
这里a 链接我们想指向内容的详细页面,TEEBB给我们提供了详情页路由,teebb_content_show,
使用symfony console debug:route teebb_content_show,
我们看到 url路径中 有对大扩号,这个是路径参数,我们可以给这个路径参数传值,
使用
{{ path(teebb_content_show, {slug: content.slug}) }}
嗯?你怎么知道content有这个slug,让我们打开Content类,slug属性保存内容的url别名。
我们给NEW添加国际化, 使用twig的国际化过滤器trans,可以看到phpstorm高亮提示需要翻译了。
默认的translation_domain是messages,可以在messages.zh_CN.yaml中定义字面翻译。
刷新!最新的一篇公告,显示了出来。
同样的操作,我们来完成content区块的最新动态列表:
回到front目录index.html.twig文件, 在content区块底部,
{{ sonata_block_render({type:'teebb.core.block.contents'}, {
limit: 2,
order: {createdAt: 'DESC'},
criteria: {typeAlias: 'news'},
template: 'blocks/latest_news.html.twig'
}) }}
在最新动态block模板中,修改标题、路径、创建日期使用date过滤器来格式化日期的显示,
文章的摘要这里怎么办呢?
teebb提供了`macro`模板文件,对通用的功能也进行了抽取,
引入macro文件,
{% import '@TeebbCore/macros.html.twig' as macro %}
调用macro函数getContentSummary可以获取内容对象第一条摘要内容:
{{ macro.getContentSummary(content, 'content', content.typeAlias) }}
刷新页面,最新动态也显示成功了。
下一节,我们将把顶部导航区的两个菜单动态显示出来,并对菜单进行缓存优化。