chrometoaster/silverstripe-advanced-taxonomies

高级分类

安装: 1,740

依赖项: 0

建议者: 0

安全性: 0

星标: 2

关注者: 4

分支: 4

类型:silverstripe-vendormodule

4.0.0-alpha10 2021-10-11 00:56 UTC

README

概述

受 Silverstripe 的 Taxonomy 模块启发,Chrometoaster 的 Advanced taxonomies 模块也增加了在 Silverstripe 中管理层次分类的能力。

它还提供了通用的 CMS 界面,用于将分类术语(标签)分配给页面和文件,并提供将此功能扩展到任何其他数据对象的方法,例如 Elemental blocks。

除了基本的术语标记外,该模块旨在帮助专业的信息架构师和内容设计师使用分类来对网站上的大部分内容(如果不是全部内容)进行分类,使用一系列相互关联的层次分类。高级逻辑使分类在内容广泛关系中的使用成为一种更健壮的选项,特别是当必须联合使用多个分类时。

请注意,此模块旨在替换 Silverstripe 的分类模块,而不是对其的扩展。此模块忽略了分类类型作为独立的模型,通过顶级分类术语容纳 type 属性,有时在代码库中称为 types,以提高可读性和上下文。

主要功能

分类术语模型及其相关扩展、助手、验证器等的主要功能。

单数和复数显示名称

  • 用于不同情况下的额外名称,包括前端和后端

描述

  • 用于整个 CMS(例如在网格字段中)的术语描述,以帮助编辑在标记时(当有不同分类下的类似术语时很有用)。

定义字段

  • 在 CMS 中使用的作者面对的定义
  • 面向最终用户的定义,例如在术语表中使用

单选选项

  • 根据术语/概念的属性,可以将分类定义为“单选”或“多选”——协同或互斥。
  • 在作者将单选分类术语标记为数据对象时应用验证规则(即一次只能标记一个术语)。

仅限内部选项

  • 可以将分类仅限于内部使用,即它不会对最终用户可见,标记分类仅供“管理目的”使用——在 CMS 中创建项目列表、筛选等。

必需分类

  • 任何术语都可以配置一个或多个必需分类。
  • 当当前术语分配给数据对象时,必需分类将提示作者从其他分类中选择术语。
  • 如果根术语设置了必需分类,则所有子术语都将继承这些要求。可以在单个术语上手动覆盖继承,并进一步配置要求。

URLSegment

  • 全局唯一缩略名,目前是全球唯一的(这个约束可能在未来放宽,以允许在不同父项下有相同的段)。

用法

要求

  • SilverStripe 4.x
  • PHP ^7.3(PHP8 未测试)

安装

composer require chrometoaster/silverstripe-advanced-taxonomies

配置

默认情况下,该模块将 DataObjectTaxonomiesDataExtension 扩展应用于 SiteTreeFile 类,在 config.yml 中。

要向项目特定的数据模型添加扩展,创建一个类似于以下示例的 yaml 配置文件

App\Models\YourDataModel:
  extensions:
    - Chrometoaster\AdvancedTaxonomies\Extensions\DataObjectTaxonomiesDataExtension
App\Models\YourOtherCustomDataModel:
  extensions:
    - Chrometoaster\AdvancedTaxonomies\Extensions\DataObjectTaxonomiesDataExtension

根据需求,此模块中可以修改一些设置。以下列出了这些设置。

开发人员说明

验证消息中的 HTML

Chrometoaster\AdvancedTaxonomies\Validators\TaxonomyRulesValidator以HTML格式生成错误消息。这种行为有时可能存在问题,尤其是在CMS的React-like部分,例如资产管理员。为此,验证器提供了一个方法来禁用HTML输出,实际上应用纯文本术语装饰器而不是富文本装饰器。

如果您需要使用相同的行为,即仅输出纯文本错误消息,请在获取验证器实例后设置属性,例如在数据扩展中

use Chrometoaster\AdvancedTaxonomies\Validators\TaxonomyRulesValidator;

$validator = TaxonomyRulesValidator::create();
$validator->setHTMLOutput(false);

// get the validation error or empty string
$requiredTypesValidationError = $validator->validateRequiredTypes($this->getOwner()->Tags());

// use the validation message further
// ...

CMS和资产管理员部分的验证

在'asset-admin'界面中,当标签分配给文件时,消息仅在保存文件后才出现,而在页面部分(任何非React上下文),通过'添加标签'网格字段界面添加术语时,验证会即时执行。

贡献

代码规范

本项目遵循以下标准定义

如果您正在帮忙,请也遵循上述标准。

翻译

我们希望长期支持多种语言,但截至目前,代码库中只有一些方面被翻译。

有关更多详细信息,请参阅docs.silverstripe.org上的"i18n"主题,如果您希望在此开发领域做出贡献。