Magento 2 + как удалить ограничение символов из поля мета-ключевого слова в продукте


Как удалить ограничение в 255 символов из поля мета-ключевых слов в продукте в администраторе при сохранении или обновлении существующего?

enter image description here

enter image description here

Author: Jessy Loran, 2019-04-12

1 answers

После некоторой отладки я обнаружил, что все входные данные имеют ограничение по длине 255, и все они имеют один и тот же шаблон. Ограничение устанавливается самим html-шаблоном (своего рода жестко запрограммированным). Путь к файлу:

Vendor/magento/module-ui/view/base/web/templates/form/element/input.html

Поэтому мы должны переопределить его в пользовательскую тему adminhtml.

Прежде чем начать, пожалуйста, замените "Поставщик" и "Тема" на "Поставщик" и "Модуль". имена

Если у вас его нет:

Создайте следующие файлы:

Приложение/дизайн/adminhtml/Поставщик/Тема/композитор.json

{
"name": "<vendor>/<theme>",
"description": "N/A",
"require": {
    "php": "~5.5.0|~5.6.0|~7.0.0",
    "magento/theme-adminhtml-backend": "*",
            "magento/framework": "100.0.*"
},
"type": "magento2-theme",
"version": "1.0.0",
"license": [

],
"autoload": {
    "files": [
        "registration.php"
    ]
}

}

App/design/adminhtml/Vendor/Theme/registration.php

<?php

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::THEME,
    'adminhtml/<Vendor>/<Theme>',
    __DIR__
);

App/design/adminhtml/Vendor/Theme/theme.xml

<theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/theme.xsd">
    <title>Theme</title>
    <parent>Magento/backend</parent>
</theme>

Это файлы тем.

Теперь нам нужно создать пользовательский модуль, чтобы это работало:

App/code/Vendor/Theme/registration.php

<?php

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Vendor_Theme',
    __DIR__
);

Приложение/код/Поставщик/Тема/композитор.json

{
    "name": "vendor/theme",
    "description": "",
    "require": {
        "php": "~5.5.0|~5.6.0|~7.0.0",

        "magento/magento-composer-installer": "*"
    },
    "suggest": {

    },
    "type": "magento2-module",
    "version": "0.1.0",
    "license": [

    ],
    "autoload": {
        "files": [
            "registration.php"
        ],
        "psr-4": {
            "Vendor\\Theme\\": ""
        }
    },
    "extra": {
        "map": [
            [
                "*",
                "Vendor/Theme"
            ]
        ]
    }
}

App/code/Vendor/Theme/etc/module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Vendor_Theme" setup_version="0.1.0">
    </module>
</config>

App/code/Vendor/Theme/etc/di.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Theme\Model\View\Design">
        <arguments>
            <argument name="themes" xsi:type="array">
                <item name="adminhtml" xsi:type="string">Vendor/Theme</item>
            </argument>
        </arguments>
    </type>
</config>

Теперь у нас есть пользовательская тема adminhtml (бэкэнд), которая переопределяет тему Magento_Backend.

А вот и волшебство:

Входной файл шаблона для компонентов пользовательского интерфейса:

Vendor/magento/module-ui/view/base/web/templates/form/element/input.html

Мы копируем его по относительному пути в нашей пользовательской теме:

App/design/adminhtml/Vendor/Theme/Magento_Catalog/web/form/element/input.html

Мы изменяем содержимое на:

<!--Overrides: vendor/magento/module-ui/view/base/web/templates/form/element/input.html -->
<!-- ko if: inputName == "product[meta_keyword]" -->
<input class="admin__control-text" type="text"
       data-bind="
        event: {change: userChanges},
        value: value,
        hasFocus: focused,
        valueUpdate: valueUpdate,
        attr: {
            name: inputName,
            placeholder: placeholder,
            'aria-describedby': noticeId,
            id: uid,
            disabled: disabled
    }"/>
<!--/ko-->
<!-- ko ifnot: inputName == "product[meta_keyword]" -->
<input class="admin__control-text" type="text"
       data-bind="
        event: {change: userChanges},
        value: value,
        hasFocus: focused,
        valueUpdate: valueUpdate,
        attr: {
            name: inputName,
            placeholder: placeholder,
            'aria-describedby': noticeId,
            id: uid,
            disabled: disabled,
            maxlength: 255
    }"/>
<!-- /ko -->

Как вы можете видеть здесь, мы говорим knockoutjs отображать входные данные без условия максимальной длины только в том случае, если имя ввода "продукт[meta_keyword]" (это наш ввод, который мы хотим) ещё, мы обычно обрабатываем входные данные, чтобы не делать то, чего мы не хотим.

Теперь нам нужно сделать так, чтобы наш шаблон переопределял файл шаблона Magento_Ui:

Как мы видим в Magento_Ui requirejs_config.js основания,

Vendor/magento/module-ui/view/base/requirejs-config.js

Существует пространство имен для путей шаблонов компонентов пользовательского интерфейса:

....
paths: {
    'ui/template': 'Magento_Ui/templates'
},
....

Это означает, что все пути к шаблонам из "magento_ui/шаблоны" заменяются на "пользовательский интерфейс/шаблон".

Итак, мы создаем наш requirejs_config.js :

App/design/adminhtml/Vendor/Theme/Magento_Catalog/requirejs-config.js

var config = {
    map: {
        "*": {
            "ui/template/form/element/input": "Magento_Catalog/form/element/input"
        }
    }
};

Теперь очистите кэш, удалите статические файлы (или разверните их) и обновите страницу, и вы должны увидеть что-то вроде этого:

template override inspection

Это работает для версии 2.3.1, и это должно работать для более низких версий

 4
Author: Luci, 2019-04-12 09:49:56