【发布时间】:2015-07-13 08:45:53
【问题描述】:
我正在使用 Bolt 开发的网站内容的心理模型是,有“子页面”:
- 每个页面(内容类型)都与一个“子页面”相关
- 每个“子页面”都有自己的菜单,可以使用自己的模板
- 页面的 url 应该类似于 /{sub_page_slug}/{page_slug}
在文档中,我找到了关于 Taxonomies 的部分,这听起来像是我想要的“分组”分类法。
所以我在taxonomy.yml 中添加了以下内容:
pagegroups:
slug: pagegroups
singular_slug: pagegroup
behaves_like: grouping
options: { main, work, others }
在contenttype.yml 中添加正确的内容后,我可以将页面分配给“子页面”,即页面组。 (为了能够获得页组的其他信息,我还有一个“页组”内容类型,其中 slug 计算 taxonomy.yml 中的条目。)
为了允许/others/stefan 和/work/currently 这样的路由,我在routing.yml 中添加了以下内容:
work_page_binding:
path: '/work/{slug}'
defaults: { _controller: 'Bolt\Controllers\Frontend::record', 'contenttypeslug': 'page' }
contenttype: pages
others_page_binding:
path: '/others/{slug}'
defaults: { _controller: 'Bolt\Controllers\Frontend::record', 'contenttypeslug': 'page' }
contenttype: pages
但要使其与模板和菜单一起使用,页面组中的所有页面都必须使用正确的模板,这样才能显示正确的菜单。
我想一定有一种更动态的路由方式:
pagegroups_page_binding:
path: '/{pagegroup}/{slug}'
defaults: { [???] }
contenttype: pages
restrictions:
pagegroup: [???]
具有以下优点:
- 它会检查已配置页面组的列表,所以唯一要添加的是
taxonomy.yml中的条目,而不是为每个页面组添加新路由(当然,仍然要配置页面组内容元素条目和菜单必须发生) - 在模板中设置了正确的页面组内容元素,因此我可以简单地编写
menu(pagegroup.slug),而不是为每个页面组复制模板
有人可以建议如何开始使用它吗?
如果这是最好的方法,我很乐意编写自定义控制器。如果是,我应该把它放在哪里?
我可以想象这个用例并不少见,将它放入扩展中会很棒,但我不确定如何开始使用它,以及是否会加入额外的抽象级别我如何解决实际问题的方法。
还有一个重要的事情是:我希望能够更新bolt,所以我不想修改现有的类...
感觉就像问了一个以上的问题,随意回答你有想法的任何部分。
【问题讨论】:
标签: url-routing silex bolt-cms