silverstripe/tagfield

SilverStripe 的标签字段

安装次数: 914,439

依赖项: 48

建议者: 0

安全: 0

星标: 57

关注者: 16

分支: 73

类型:silverstripe-vendormodule


README

CI Silverstripe supported module

为 SilverStripe 定制的标签输入字段。

安装

composer require silverstripe/tagfield

概述

Screenshot

允许将标签存储为关系或逗号分隔的字符串。支持懒加载的自动完成。

注意:该字段针对 Silverstripe CMS UI 的使用进行了优化。表单字段类本身可以在 CMS 外部使用,但您需要构建自己的前端来解析原始字段数据(data-schema 属性)。

使用

关系标签

use SilverStripe\ORM\DataObject;

class BlogPost extends DataObject
{
    private static $many_many = [
        'BlogTags' => BlogTag::class
    ];
}
use SilverStripe\ORM\DataObject;

class BlogTag extends DataObject
{
    private static $db = [
        'Title' => 'Varchar(200)',
    ];

    private static $belongs_many_many = [
        'BlogPosts' => BlogPost::class
    ];
}
$field = TagField::create(
    'BlogTags',
    'Blog Tags',
    BlogTag::get(),
    $this->BlogTags()
)
    ->setShouldLazyLoad(true) // tags should be lazy loaded
    ->setCanCreate(true);     // new tag DataObjects can be created

注意:这假设您已导入命名空间类,例如:使用 SilverStripe\TagField\TagField;

一对一关系

您还可以使用 TagField 选择 has_one 关系的值。假设 BlogPost 有一个 BlogCategory

class BlogCategory extends DataObject
{
    private static $db = [
        'Title' => 'Varchar(200)',
    ];
}
use SilverStripe\ORM\DataObject;

class BlogPost extends DataObject
{
    private static $has_one = [
        'BlogCategory' => BlogCategory::class
    ];
}
$field = TagField::create(
    'BlogCategoryID',
    $this->fieldLabel('BlogCategory'),
    BlogCategory::get()
)
    ->setIsMultiple(false)
    ->setCanCreate(true);

注意:我们使用 ID 后缀作为字段名称(例如:BlogCategoryID 而不是 BlogCategory),并通过设置 ->setIsMultiple(false) 只允许一个值。

字符串标签

use SilverStripe\ORM\DataObject;

class BlogPost extends DataObject
{
    private static $db = [
        'Tags' => 'Text',
    ];
}
$field = StringTagField::create(
    'Tags',
    'Tags',
    ['one', 'two'],
    explode(',', $this->Tags ?: '')
);

$field->setShouldLazyLoad(true); // tags should be lazy loaded

更多详细信息请参阅 docs/en

与 silverstripe-taxonomy 一起使用 TagField

TagField 假设对象上有 Title 字段。对于没有 Title 字段的类,使用 setTitleField 进行相应修改。

$field = TagField::create(
    'Tags',
    'Blog Tags',
    TaxonomyTerm::get(),
)
    ->setTitleField('Name');

版本控制

此库遵循 Semver。根据 Semver,您将能够升级到该库的任何次要或补丁版本,而不会对公共 API 产生任何破坏性更改。Semver 还要求我们明确定义此库的公共 API。

所有具有 public 可见性的方法都是公共 API 的一部分。所有其他方法都不是公共 API 的一部分。在可能的情况下,我们将尝试在次要/补丁版本中保持 protected 方法的向后兼容性,但如果您正在重写方法,请在升级之前测试您的作品。

报告问题

请为您发现的任何错误或缺失的功能 创建一个问题