首页内容列表显示-使用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) }}

刷新页面,最新动态也显示成功了。

下一节,我们将把顶部导航区的两个菜单动态显示出来,并对菜单进行缓存优化。

课程讨论

当前内容评论功能已关闭。