Magento 2 + как удалить ограничение символов из поля мета-ключевого слова в продукте
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"
}
}
};
Теперь очистите кэш, удалите статические файлы (или разверните их) и обновите страницу, и вы должны увидеть что-то вроде этого:
Это работает для версии 2.3.1, и это должно работать для более низких версий