Grav 使用复数 URL
在 Grav 中,子页面常常在父页面中以列表的形式展示。在父页面中,使用 @page.children
来定义子页面集合。如果父级页面的文件夹名字是 cases
,那么子页面 lado-demo
的链接就是 cases/lado-demo
。但 case/lado-demo
明显更合理一些。
方案一:使用单独的文件夹
1. 为子页面建立单数命名的文件夹
创建一个 case
文件夹,并将 lado-demo
移动到其内,现在可以通过 case/lado-demo
来访问这个页面了。
当你编辑 case
页面并保存时,Grav 会自动创建一个 case.md
。尽管最初只创建了一个目录,一旦修改保存,就和普通页面没有区别了。为了避免在菜单中显示 case
的链接,将其 visible
设置为否。
尽管网站上并没有直接到 case
页面的链接,但搜索引擎的爬虫、手动输入 URL 失误,都有可能直接访问到一个空白的网页。也许你想到将其设置为不可路由的,不过最简单的办法是设定一个页面重定向,跳转到列表页面 cases
。
2. 创建复数命名的列表页面
创建页面 cases
,并设置:
content:
items:
'@page.children': '/case'
在多数主题中使用 page.activeChild
来判断是否应该高亮菜单,而这个方案将子页面的父页面和列表页面一分为二,列表页面对应的菜单项的高亮状态无法正常检测。
方案二:使用 alias
为父页面添加 Canonical 路由
在高级标签页中,为页面 case
增加一个 Canonical 路由 cases
。如果你安装了 Sitemap 插件,在 /sitemap.xml 中可以看到,父页面的链接已经变成了 cases
,而子页面中仍为 case/lado-demo
。
不过,在菜单、面包屑导航中,链接仍为 case
。
修改模板
将菜单和导航模板中的 page.url
改为 page.routeCanonical
。如果有些位置没有及时更改,也没有关系,多数主题出于 SEO 的目的,都会在 head 中添加:
<link rel="canonical" href="{{ page.routeCanonical() }}">
顺手为添加一个站点重定向 /case$
到 /cases
,就更完美了。
总结
使用以上方法,实现了子页面与列表页面分别使用单数和复数的命名,实际上,子页面和列表页面使用完全不相干的命名也是可以的。