mak001 / silverstripe-categorization
SilverStripe 分类模块。轻松地将分类添加到页面和数据对象中。
Requires
Requires (Dev)
This package is not auto-updated.
Last update: 2020-01-10 17:04:26 UTC
README
轻松地将分类添加到页面或数据对象,并允许通过友好的URL访问分类。
以 example.com 上的页面为例,其URL段为 page,有一个名为 Categories 的关系。
可以通过访问 example.com/page/Categories 来访问分类。
访问 example.com/page/Categories/category 将返回具有 category 的 URLSegment 的 Categories 关系中的分类。
要求
- SilverStripe 4.0
安装
composer require mak001/silverstripe-categorization
使用
CategorizationExtension
要创建一个分类,请将 Mak001\Categorization\Extensions\CategorizationExtension 添加到数据对象。此扩展将为数据对象添加 标题 和 URLSegment 字段。
Category: extensions: - Mak001\Categorization\Extensions\CategorizationExtension
CategorizationControllerExtension
允许页面显示分类关系。这将选择 has_many、many_many 和 belongs_many_many 关系,如果关系类已应用 CategorizationExtension。
CategoryPageController: extensions: - Mak001\Categorization\Extensions\CategorizationControllerExtension
外部关系
外部关系也可以设置为可查看。当持有页面的子项具有关系,但持有者应具有可查看的关系时,这很有用。这可以通过以下方式完成
private static $external_relation = [ 'External' => RelationClass::class, ]; public function External() { return RelationClass::get(); }
所有外部关系都需要一个与关系名称相同的名称的方法。
关系URL段
关系段可以与关系名称不同。一个例子是 Categories 关系映射到 categories。只需添加
private static $relation_segments = [ 'Categories' => 'example_segment', ];
现在访问 example.com/page/example_segment 将指向 Categories 关系,而 example.com/page/Categories 将无法找到。
它将默认为关系名称。
模板
取一个页面类型 NameSpace/CategoryPage,它扩展了 Page,URL段为 page。当访问 example.com/page/Categories 时,可用的模板有
[ "NameSpace/CategoryPage_Categories", "Page_Categories", "NameSpace/CategoryPage", "Page", ]
它始终寻找 ClassName_Relation,而不是寻找关系的 relation_segment。
对于具有 singular_name 为 Category 和 url_segment 为 category 的分类对象,当访问 example.com/page/Categories/category 时,可用的模板有
[ "NameSpace/CategoryPage_Categories_Category", "Page_Categories_Category", "NameSpace/CategoryPage_Categories", "Page_Categories", "NameSpace/CategoryPage", "Page", ]
这些应该位于 Layouts 文件夹中。
当访问关系链接时,模板将传递一个包含关系中的分类的 Categorizations 变量。
当访问 example.com/page/Categories/category 时,模板将与上面相同。将添加一个包含具有给定 URLSegment 的指定关系中的分类的 Categorization 变量。
当访问关系链接或分类对象时,模板将传递一个 RelationName 变量,表示当前正在查看的关系。
非泛型变量
在控制器中将 $use_alternative_variables 设置为 true 将会使用关系名称和分类 $singular_name 来代替泛型的 Categorizations 和 Categorization 变量名称。
修改关系列表
使用泛型的 modifyCategorizationList($list, $request) 扩展点修改传递给模板的列表。这将适用于所有列表。为了更精细地控制特定的关系列表,请使用 modify{$relationName}List(),将 {$relationName} 替换为关系的名称。