Я шукаю гарний підхід із додаванням / оновленням вже підготовленої (за замовчуванням) форми 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
Що я зробив не так?