gpt4 book ai didi

url-routing - bolt CMS : Adding routes for pages under "grouping" taxonomy

转载 作者:行者123 更新时间:2023-12-04 18:03:22 26 4
gpt4 key购买 nike

我对使用 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) 而不是为每个页面组复制模板

有人可以建议如何开始使用它吗?
如果那是最好的方法,我很乐意编写自定义 Controller 。如果是,我应该把它放在哪里?

我可以想象这个用例并不少见,将其放入扩展中会很棒,但我不确定如何开始使用它,以及是否要加入额外的抽象级别我的解决实际问题的方法。

还有一件重要的事情是:我希望能够更新 bolt,所以我不想修改现有的类...

感觉就像问了不止一个问题,随意回答任何你有想法的部分。

最佳答案

目前这比应该做的更棘手,好消息是,由于对 Controller 进行了重大重构,下一版本的 Bolt 将更加灵活且易于扩展。

为了让它现在工作,你可以创建一个静态方法来返回内容组的管道分隔字符串,这是一个简单的例子:

首先在routing.yml中:

contentgrouppage:
path: '/{contentgroup}/{slug}'
defaults:
_controller: 'controller.frontend:record'
contenttypeslug: page
contentgroup: '<put your default value here>'
requirements:
contentgroup: 'My\Routing::getTaxonomyGroups'
contenttype: page

如您所见,我们要求类 My\Routing 和方法 getTaxonomyGroups 返回允许值列表,此方法如下所示:

    use Bolt\Configuration\ResourceManager;

/**
*
*/
class Routing
{

public function getTaxonomyGroups()
{
$app = ResourceManager::getApp();
$groups = $app['config']->get('taxonomy/categories');

$urls = [];
foreach ($groups['options'] as $slug => $name) {
$urls[] = $slug;
}


return implode('|',$urls);
}
}

如您所见,获取当前应用程序对象的静态 hack 并不理想,下一个版本将被弃用,但问题是这些路由要求目前必须是静态方法,而下一个版本您将能够指定服务,例如:controller.requirements

关于url-routing - bolt CMS : Adding routes for pages under "grouping" taxonomy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31378954/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com