syntro/silverstripe-elemental-baseitem

用于处理具有子元素的 elemental 块的基本项目权限

安装数量: 5,119

依赖项: 4

建议者: 0

安全: 0

星标: 1

关注者: 2

分支: 0

开放问题: 0

类型:silverstripe-vendormodule

1.2.1 2024-04-19 14:43 UTC

This package is auto-updated.

Last update: 2024-09-19 15:39:46 UTC


README

🎭 Tests phpstan codecov composer Packagist Version

此模块添加了一个空白的基本项目,您可以使用它向元素添加子项目,并添加一个模拟这些项目父 ElementalArea 感觉的网格字段配置,允许编辑器像处理元素一样处理这些“块”。

当目标是创建一个充当某些内容“块”容器元素时,此模块最好使用。例如,这些块可能是卡片、画廊中的图片或旋转木马中的幻灯片。

需求

  • SilverStripe ^4
  • Silverstripe elemental ^4

安装

composer require syntro/silverstripe-elemental-baseitem

许可证

请参阅 许可证

文档

首先,简单地扩展基本项目

use Syntro\SilverStripeElementalBaseitem\Model\BaseItem;

class Teaser extends BaseItem
{
    private static $displays_title_in_template = true;

    private static $db = [
        // Whatever you need for the item to render
    ];

    private static $has_one = [
        'Section' => TeaserCardsBlock::class,
    ];
}

默认情况下,baseItem 有一个 Title 和一个 ShowTitle 字段,类似于 elemental 中的 BaseElement。它们还将使用来自 silverstripe-elemental 模块的标题复合字段。此行为可以通过在 yaml 配置中将 displays_title_in_template 设置为 false 或直接在类中禁用。

然后,添加到所需元素的关系并配置网格字段

use DNADesign\Elemental\Models\BaseElement;
use Syntro\SilverStripeElementalBaseitem\Forms\GridFieldConfig_ElementalChildren;

class TeaserCardsBlock extends BaseElement
{
    private static $has_many = [
        'Teasers' => Teaser::class
    ];

    /**
     * @return FieldList
     */
    public function getCMSFields()
    {
        $this->beforeUpdateCMSFields(function ($fields) {
            if ($this->ID) {
                /** @var GridField $griditems */
                $griditems = $fields->fieldByName('Root.Teasers.Teasers');
                $griditems->setConfig(GridFieldConfig_ElementalChildren::create());
            }
        });
        return parent::getCMSFields();
    }
}

维护者

错误跟踪器

错误在此存储库的问题部分跟踪。在提交问题之前,请阅读现有问题以确保您的独特性。

如果问题看起来像是新的错误

  • 创建新问题
  • 描述重现您的问题所需的步骤和预期结果。单元测试、截图和屏幕录像在这里可能会有所帮助。
  • 尽可能详细地描述您的环境:SilverStripe 版本、浏览器、PHP 版本、操作系统、任何已安装的 SilverStripe 模块。

请直接向模块维护者报告安全问题。请勿在错误跟踪器中提交安全问题。

开发和贡献

如果您想为此模块做出贡献,请确保您提出一个拉取请求,并与模块维护者进行讨论。