anubarak / craft-relabel

Relabel 插件 Craft

安装数量: 68,137

依赖关系: 1

建议者: 0

安全: 0

星标: 29

关注者: 3

分支: 4

开放问题: 1

类型:craft-plugin

2.0.2 2020-08-05 09:53 UTC

README

drawing

要求

此插件需要 Craft CMS 3.0.0 或更高版本。重要:如果您来自 Craft 2,目前没有迁移功能,因此所有标签都将被删除。如果您真的需要迁移,请随时联系我或备份表并在自己的设备上插入它。

安装

要安装插件,请按照以下说明操作。

  1. 打开您的终端并转到您的 Craft 项目

     cd /path/to/project
    
  2. 然后告诉 Composer 加载插件

     composer require anubarak/craft-relabel
    
  3. 在控制面板中,转到设置 → 插件,并点击“安装”按钮以安装 Relabel。

基本提示

Relabel 创建一个自定义数据库表,用于存储新标签。默认 Craft 字段不会被任何方式触及。字符串通过 JavaScript 替换,因此您可以在任何时候删除/卸载插件,而不会在您的控制面板中造成更改。Relabel 与 Craft 3 项目配置兼容,因此您只需要在您的开发环境中重新标记字段即可同步所有数据。

使用方法

转到您的字段布局,点击轮形图标并选择“重命名”

Screenshot

您的字段布局将具有不同的标签和描述。

要接收包含您新重命名字符串的错误消息,请

$errors = Relabel::getErrors($element);

或者用 Twig

{% set errors = relabel.getErrors(element) %}

为自定义元素类型注册 Relabel

有一个事件可以将 Relabel 注册到自定义表单中,

use anubarak\relabel\services\RelabelService;

Event::on(
    RelabelService::class,
    RelabelService::EVENT_REGISTER_LABELS,
    function(RegisterLabelEvent $event) use($myCustomElement){
        $event->fieldLayoutId = $myCustomElement->fieldLayoutId;
    }
);

注册额外的 Relabel

您还可以在您的插件 init 函数中为每个字段布局注册额外的标签。重要:您需要在事件中而不是在特定的控制器中,因为我在控制器动作开始之前需要传递这些变量,否则我无法向请求注入所需的 JavaScript。这是一个如何注册自定义嵌套字段布局的示例

Event::on(
    RelabelService::class,
    RelabelService::EVENT_REGISTER_ADDITIONAL_LABELS,
    function(Event $event) {
        $layoutId = $event->fieldLayoutId;
        $fields = Craft::$app->getFields()->getFieldsByLayoutId($layoutId);
        $plugin = Craft::$app->getPlugins()->getPlugin('relabel');
        /** @var RelabelService $service */
        $service = $plugin->get('relabel');

        foreach ($fields as $field){
            if($field instanceof Field){
                $blocks = $field->getBlockTypes();
                foreach ($blocks as $block){
                    $layoutForBlock = (int)$block->fieldLayoutId;
                    $index = $field->handle . '.' . $block->handle;
                    $relabels = $service->getAllLabelsForLayout($layoutForBlock, $index);
                    foreach ($relabels as $relabel){
                        $event->labels[] = $relabel;
                    }
                }
            }
        }
    }
);

如果 Relabel 还不支持您的 HTML,请随时联系我,我们将找到使其工作的方式。

目前支持的元素类型包括

  • craft\elements\Entries
  • craft\elements\Assets
  • craft\elements\GlobalSets
  • craft\elements\Categories
  • craft\elements\Users
  • verbb\voucher\elements\Voucher
  • verbb\voucher\elements\Code
  • craft\commerce\elements\Order
  • craft\commerce\elements\Product
  • craft\commerce\elements\Variant
  • Solspace\Calendar\elements\Calendar

在 Ajax 请求后注册自定义标签

Craft 条目可以通过更改条目类型来更改字段布局,如果您想通过 JavaScript 也更改自定义元素类型的字段布局,则需要包含这些行

$labelsForLayout = Relabel::getService()->getAllLabelsForLayout($layout->id);
Craft::$app->getView()->registerJs('Craft.relabel.changeEntryType(' . json_encode($labelsForLayout) . ');');