jacksleight / statamic-bonus-routes
Requires
- statamic/cms: ^4.0|^5.0
README
附加路由
这个Statamic插件简化了设置基于集合和分类的附加路由的过程,通过为您处理动态挂载和数据检索。这对于以下情况很有用:
- 在活动集合的条目页面下方添加注册页面
- 在博客集合的条目页面上方添加基于日期的归档页面
- 将筛选的新闻集合挂载到网站的各个部分
- 自定义和挂载分类URL
通过编写自己的自定义路由和控制器,所有这些都成为可能,这个插件只是让这个过程更简单,并为您节省了硬编码URL的麻烦。
安装
您可以在Statamic控制面板的“工具 > 附加组件”部分搜索此插件并点击“安装”,或者从项目根目录运行以下命令
composer require jacksleight/statamic-bonus-routes
入门
您可以使用Route::bonus()
方法定义附加路由。这些应添加到您的routes/web.php
文件中。此方法接受以下参数
- 类型 (字符串): 路由类型和处理程序
- uri (字符串): 路由URI
- 视图 (字符串): 应渲染的视图名称
- 数据 (数组,可选): 任何要解析到模板的附加数据
集合路由
支持两种类型的集合路由,显示和索引。显示路由与Statamic的标准路由完全相同,将请求的条目解析到视图模板或404(如果没有找到内容)。索引路由用于列表和一般非条目特定页面。
集合显示路由必须包含Statamic标准路由使用的所有参数。它们可以包含额外的参数,并且它们可以按不同的顺序排列,但它们必须全部包含。
以下是一些示例附加集合路由。
// Add a date based blog archive page Route::bonus('collection:blog', '{mount}/{year}', 'blog.archive'); // Add a seperate blog post comments page Route::bonus('collection:blog', '{mount}/{year}/{slug}/comments', 'blog.comments'); // Mount a blog collection to an additional entry Route::bonus('collection:blog', '{mount:entry-id}/{year}/{slug}', 'blog.show');
分类路由
支持两种类型的分类路由,显示和索引。显示路由与Statamic的标准路由完全相同,将请求的术语解析到视图模板或404(如果没有找到内容)。索引路由用于列表和一般非术语特定页面。
分类显示路由必须包含一个slug
参数。
以下是一些示例附加分类路由。
// Customise a taxonomy's URL Route::bonus('taxonomy:topics', 'categories/{slug}', 'topics.show'); // Add a seperate posts page under a taxonomy term Route::bonus('taxonomy:topics', 'topics/{slug}/posts', 'topics.posts'); // Mount a taxonomy to an entry Route::bonus('taxonomy:topics', '{mount:entry-id}/{slug}', 'topics.show');
链接到路由
附加路由是普通的Laravel路由。要链接到它们,您需要给它们一个名称,然后在模板中使用route
标签。在定义路由后调用Laravel的name方法来给它们命名
Route::bonus('collection:blog', '{mount}/{year}', 'blog.archive')->name('blog.archive');
然后在模板中使用route
标签
{{ route:blog.archive year="2022" }}
路由缓存
附加路由是普通的Laravel路由,在启用路由缓存时将被缓存。这意味着对挂载条目的更改可能不会立即反映在路由中。此插件提供了一个实用程序,允许您通过控制面板刷新路由缓存,您可以在工具 > 路由缓存刷新
下找到它。或者,您可以通过在命令行中运行php artisan route:cache
来刷新缓存。
路由覆盖
本插件本身不会以任何方式覆盖、更改或干扰Statamic的路由。然而,自定义Laravel路由优先于Statamic路由。如果您定义了一个与Statamic路由相同的额外路由,它将覆盖Statamic。应尽量避免这种情况,最好尽可能使用Statamic的路由。