Я шукаю гарний підхід із додаванням / оновленням вже підготовленої (за замовчуванням) форми Magento User (користувач модуля). Форму можна отримати на панелі адміністратора цим шляхом:
Система> Усі користувачі> [вибраний_користувач]> Основна вкладка редагування користувача (інформація про акаунт)
Тепер я намагаюся використовувати di.xml у своєму спеціальному модулі, де я вказую залежності: `
<preference for="Magento\User\Block\User\Edit\Tab\Main" type="Vendor_Name\Module_Name\Block\User\Edit\Tab\Main" />
<preference for="Magento\User\Block\Role\Grid\User" type="Vendor_Name\Module_Name\Block\Role\Grid\User" />
`
Це вміст, який я вже створив для класу Main.php
// @codingStandardsIgnoreFile простір імен Vendor_Name \ Module_Name \ Block \ User \ Edit \ Tab; використовувати \ Magento \ Користувач \ Блок \ Користувач \ Редагувати \ Вкладку \ Main як UserEditMainTab; використовувати \ Magento \ Backend \ Block \ Template \ Context; використовувати \ Magento \ Framework \ Реєстр; використовувати \ Magento \ Framework \ Дані \ FormFactory; використовувати \ Magento \ Backend \ Модель \ Auth \ Session; використовувати \ Magento \ Framework \ Locale \ ListsInterface; клас Main розширює UserEditMainTab { публічна функція __construct ( Контекст $ контексту, Реєстр $ реєстру, FormFactory $ formFactory, Сесія $ authСесія, СпискиІнтерфейс $ localeLists, масив $ data = [] ) { батьківська конструкція :: __ ($ контекст, $ реєстр, $ формаFactory, $ authSession, $ localeLists, $ data); } захищена функція _prepareForm () { / ** @var $ модель \ Magento \ Користувач \ Модель \ Користувач * / $ model = $ this -> _ coreRegistry-> register ('permissions_user'); / ** @var \ Magento \ Framework \ Дані \ Форма $ форма * / $ form = $ this -> _ formFactory-> create (); $ form-> setHtmlIdPrefix ('user_'); $ baseFieldset = $ form-> addFieldset ('base_fieldset', ['legend' => __ ('Інформація про рахунок __ TEST')]); if ($ model-> getUserId ()) { $ baseFieldset-> addField ('user_id', 'hidden', ['name' => 'user_id']); } else { if (! $ model-> hasData ('is_active')) { $ model-> setIsActive (1); } } $ baseFieldset-> addField ( 'user_image', "зображення", [ 'name' => 'user_image', 'label' => __ ('Зображення користувача'), 'id' => 'user_image', 'title' => __ ('Зображення користувача'), 'потрібно' => помилково, 'note' => 'Дозволити тип зображення: jpg, jpeg, png' ] ); $ baseFieldset-> addField ( "ім'я користувача", "текст", [ 'ім'я' => 'ім'я користувача', 'label' => __ ('Ім'я користувача'), 'id' => 'ім'я користувача', 'title' => __ ('Ім'я користувача'), 'обов'язково' => вірно ] ); $ baseFieldset-> addField ( 'ім'я', "текст", [ 'ім'я' => 'ім'я', 'label' => __ ('Ім'я'), 'id' => 'ім'я', 'title' => __ ('Ім'я'), 'обов'язково' => вірно ] ); $ baseFieldset-> addField ( 'прізвище', "текст", [ 'ім'я' => 'прізвище', 'label' => __ ('Прізвище'), 'id' => 'прізвище', 'title' => __ ('Прізвище'), 'обов'язково' => вірно ] ); $ baseFieldset-> addField ( "електронна пошта", "текст", [ 'name' => 'email', 'label' => __ ('Електронна пошта'), 'id' => 'customer_email', 'title' => __ ('Електронна адреса користувача'), 'class' => 'обов'язковий запис для підтвердження електронної пошти', 'обов'язково' => вірно ] ); $ isNewObject = $ model-> isObjectNew (); if ($ isNewObject) { $ passwordLabel = __ ('Пароль'); } else { $ passwordLabel = __ ("Новий пароль"); } $ proofLabel = __ ('Підтвердження пароля'); $ this -> _ addPasswordFields ($ baseFieldset, $ passwordLabel, $ підтвердженняLabel, $ isNewObject); $ baseFieldset-> addField ( 'interface_locale', "вибрати", [ 'name' => 'interface_locale', 'label' => __ ('Місце інтерфейсу'), 'title' => __ ('Місце інтерфейсу'), 'values' => $ this -> _ LocaleLists-> getTranslatedOptionLocales (), 'class' => 'select' ] ); if ($ this -> _ authSession-> getUser () -> getId ()! = $ model-> getUserId ()) { $ baseFieldset-> addField ( 'is_active', "вибрати", [ 'name' => 'is_active', 'label' => __ ("Цей обліковий запис є"), 'id' => 'is_active', 'title' => __ ('Стан облікового запису'), 'class' => 'input-select', 'options' => ['1' => __ ('Active'), '0' => __ ('неактивний')] ] ); } $ baseFieldset-> addField ('user_roles', 'hidden', ['name' => 'user_roles', 'id' => '_user_roles']); $ currentUserVerificationFieldset = $ form-> addFieldset ( 'current_user_verification_fieldset', ['legend' => __ ('Поточна перевірка ідентичності користувача')] ); $ currentUserVerificationFieldset-> addField ( self :: CURRENT_USER_PASSWORD_FIELD, "пароль", [ 'name' => self :: CURRENT_USER_PASSWORD_FIELD, 'label' => __ ("Ваш пароль"), 'id' => self :: CURRENT_USER_PASSWORD_FIELD, 'title' => __ ('Ваш пароль'), 'class' => 'введення тексту, необхідний для введення тексту-поточного пароля', 'обов'язково' => вірно ] ); $ data = $ model-> getData (); unset ($ data ['пароль')); unset ($ data [self :: CURRENT_USER_PASSWORD_FIELD]); $ form-> setValues ($ дані); $ this-> setForm ($ форма); повернення батьків :: _ readyForm (); } }
і деякий код для User.php
простір імен Vendor_Name \ Module_Name \ Block \ Role \ Grid; використовувати \ Magento \ Користувач \ Блок \ Роль \ Grid \ Користувач як RoleGridUser; використовувати \ Magento \ Backend \ Block \ Widget \ Grid \ Extended як ExtendedGrid; Користувач класу розширює RoleGridUser { захищена функція _prepareColumns () { батьківська: _ підготовкаCollection (); $ this-> addColumn ( 'user_image', [ 'header' => __ ('Зображення користувача'), 'ширина' => 5, 'align' => 'зліва', 'sortable' => правда, 'index' => 'user_image' ] ); повернути ExtendedGrid :: _ PrepaCollection (); } }
Якщо ви придивитесь ближче, ви вже зараз, коли я намагаюся додати поле із зображенням користувача.
На жаль, я не бачу змін у фронті адміністратора. Звичайно, потрібний стовпець був доданий сценарієм InstallSchema раніше до таблиці ' admin_user '.
Зміст каталогів у деревоподібному форматі:
Ім'я модуля ├── Блок │ ├── Каталог │ │ └── Товар │ │ └── RelatedPosts.php │ ├── Роль │ │ └── Сітка │ │ └── User.php │ └── Користувач │ └── Редагувати │ └── табл │ └── Main.php ├── composer.json ├── тощо │ ├── di.xml │ └── module.xml ├── Налаштування └── InstallSchema.php
Що я зробив не так?