mak001/silverstripe-categorization

SilverStripe 分类模块。轻松地将分类添加到页面和数据对象中。

安装: 28

依赖项: 0

建议者: 0

安全: 0

星级: 1

观察者: 1

分支: 0

开放问题: 1

类型:silverstripe-vendormodule

dev-master / 1.0.x-dev 2018-07-23 00:55 UTC

This package is not auto-updated.

Last update: 2020-01-10 17:04:26 UTC


README

Build Status codecov

轻松地将分类添加到页面或数据对象,并允许通过友好的URL访问分类。

example.com 上的页面为例,其URL段为 page,有一个名为 Categories 的关系。

可以通过访问 example.com/page/Categories 来访问分类。

访问 example.com/page/Categories/category 将返回具有 categoryURLSegmentCategories 关系中的分类。

要求

  • SilverStripe 4.0

安装

composer require mak001/silverstripe-categorization

使用

CategorizationExtension

要创建一个分类,请将 Mak001\Categorization\Extensions\CategorizationExtension 添加到数据对象。此扩展将为数据对象添加 标题URLSegment 字段。

Category:
  extensions:
    - Mak001\Categorization\Extensions\CategorizationExtension

CategorizationControllerExtension

允许页面显示分类关系。这将选择 has_manymany_manybelongs_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_nameCategoryurl_segmentcategory 的分类对象,当访问 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 来代替泛型的 CategorizationsCategorization 变量名称。

修改关系列表

使用泛型的 modifyCategorizationList($list, $request) 扩展点修改传递给模板的列表。这将适用于所有列表。为了更精细地控制特定的关系列表,请使用 modify{$relationName}List(),将 {$relationName} 替换为关系的名称。