Skip to content
Relabel Plugin for Craft
Branch: master
Clone or download
Anubarak and robin schambach ## 1.3.0 - 2019-04-18
### Added
- Added changed labels for Categories and Entries in the Craft.elementIndex
Latest commit cb97046 Apr 18, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
resources/img Change events Oct 6, 2018
src ## 1.3.0 - 2019-04-18 Apr 18, 2019
.craftplugin include to composer Aug 13, 2018
.gitignore include to composer Aug 13, 2018
CHANGELOG.md ## 1.3.0 - 2019-04-18 Apr 18, 2019
LICENSE.md include to composer Aug 13, 2018
README.md
composer.json

README.md

Relabel Plugin for Craft CMS 3.x

drawing

Requirements

This plugin requires Craft CMS 3.0.0 or later. Important: if you are coming from Craft 2 - there is no migration currently so all your Relabels will be deleted. If you really need a migration feel free to contact me or backup the table and insert it on your own

Installation

To install the plugin, follow these instructions.

  1. Open your terminal and go to your Craft project:

     cd /path/to/project
    
  2. Then tell Composer to load the plugin:

     composer require anubarak/craft-relabel
    
  3. In the Control Panel, go to Settings → Plugins and click the “Install” button for Relabel .

Basic Hints

Relabel creates a custom Database table that stores the new labels. Default Craft fields are not touched in any way. The strings are replaced by JavaScript so you can remove/uninstall the plugin whenever you want without breaking changes in your Control Panel. Relabel is compatible with the Craft 3 project config so you only need to relabel your fields in your main environment and can sync all data.

Usage

Go to your field layout, click on the wheel icon and select "Relabel"

Screenshot

Your field layout will have a different label and description.

To receive error messages that contains your new relabel strings do

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

Or in Twig

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

Register Relabel for custom element types

There is an event to register Relabel for a custom form,

use anubarak\relabel\services\RelabelService;

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

Register additional Relabels

You can as well register additional Labels for every field layout within your Plugins init function as well. Important: you need to have the event there and not in certain Controllers because I need to pass those variables before the Controller action begins otherwise I'm not able to inject the required JavaScript to the request. This is an example how you could register custom nested field layouts

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;
                    }
                }
            }
        }
    }
);

If Relabel does not support your HTML yet, feel free to contact me and we'll find a way to make it work

Currently supported Element Types are

  • 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

Register custom labels after Ajax requests

Crafts entries are able to change the field layout by changing the entry type, if you want to be able to change the field layout for a custom element type via Javascript as well you need to include these lines

$labelsForLayout = Relabel::getService()->getAllLabelsForLayout($layout->id);
Craft::$app->getView()->registerJs('Craft.relabel.changeEntryType(' . json_encode($labelsForLayout) . ');');
You can’t perform that action at this time.