Я ищу хороший подход с добавлением / обновлением уже подготовленной (по умолчанию) формы пользователя (модуля-пользователя) Magento. Форма доступна в админ панели по этому пути:
Система> Все пользователи> [selected_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 \ User \ Block \ User \ Edit \ Tab \ Main as UserEditMainTab; use \ Magento \ Backend \ Block \ Template \ Context; использовать \ Magento \ Framework \ Registry; использовать \ Magento \ Framework \ Data \ FormFactory; использовать \ Magento \ Backend \ Model \ Auth \ Session; использовать \ Magento \ Framework \ Locale \ ListsInterface; Класс Main расширяет UserEditMainTab { публичная функция __construct ( Context $ context, Registry $ Registry, FormFactory $ formFactory, Сессия $ authSession, ListsInterface $ localeLists, массив $ data = [] ) { конструкция parent :: __ ($ context, $ registry, $ formFactory, $ authSession, $ localeLists, $ data); } защищенная функция _prepareForm () { / ** @var $ model \ Magento \ Пользователь \ Модель \ Пользователь * / $ model = $ this -> _ coreRegistry-> registry ('permissions_user'); / ** @var \ Magento \ Framework \ Data \ Form $ form * / $ form = $ this -> _ formFactory-> create (); $ Форма-> setHtmlIdPrefix ( 'user_'); $ baseFieldset = $ form-> addFieldset ('base_fieldset', ['legend' => __ ('Account Information __ TEST')]); if ($ model-> getUserId ()) { $ baseFieldset-> addField ('user_id', 'hidden', ['name' => 'user_id']); } еще { if (! $ model-> hasData ('is_active')) { $ Модели-> setIsActive (1); } } $ BaseFieldset-> AddField ( 'User_image', 'образ', [ 'name' => 'user_image', 'label' => __ ('User Image'), 'id' => 'user_image', 'title' => __ ('User Image'), 'required' => false, 'note' => 'Разрешить тип изображения: jpg, jpeg, png' ] ); $ BaseFieldset-> AddField ( «Имя пользователя», 'текст', [ 'name' => 'username', 'label' => __ ('Имя пользователя'), 'id' => 'username', 'title' => __ ('Имя пользователя'), 'required' => true ] ); $ BaseFieldset-> AddField ( 'Имя', 'текст', [ 'name' => 'firstname', 'label' => __ ('Имя'), 'id' => 'firstname', 'title' => __ ('Имя'), 'required' => true ] ); $ BaseFieldset-> AddField ( 'фамилия', 'текст', [ 'name' => 'фамилия', 'label' => __ ('Фамилия'), 'id' => 'фамилия', 'title' => __ ('Фамилия'), 'required' => true ] ); $ BaseFieldset-> AddField ( 'электронное письмо', 'текст', [ 'name' => 'email', 'label' => __ ('Email'), 'id' => 'customer_email', 'title' => __ ('Email пользователя'), 'class' => 'required-entry validate-email', 'required' => true ] ); $ isNewObject = $ model-> isObjectNew (); if ($ isNewObject) { $ passwordLabel = __ ('Пароль'); } еще { $ passwordLabel = __ ('Новый пароль'); } $ translationLabel = __ («Подтверждение пароля»); $ this -> _ addPasswordFields ($ baseFieldset, $ passwordLabel, $ translationLabel, $ 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' => __ ('Inactive')] ] ); } $ baseFieldset-> addField ('user_roles', 'hidden', ['name' => 'user_roles', 'id' => '_user_roles']); $ currentUserVerificationFieldset = $ form-> addFieldset ( 'Current_user_verification_fieldset', ['legend' => __ ('Проверка подлинности текущего пользователя')] ); $ CurrentUserVerificationFieldset-> AddField ( самостоятельно :: CURRENT_USER_PASSWORD_FIELD, 'пароль', [ 'name' => self :: CURRENT_USER_PASSWORD_FIELD, 'label' => __ ('Ваш пароль'), 'id' => self :: CURRENT_USER_PASSWORD_FIELD, 'title' => __ ('Ваш пароль'), 'class' => 'input-text validate-current-password required-entry', 'required' => true ] ); $ data = $ model-> getData (); снята с охраны ($ данных [ 'пароль']); снята с охраны ($ данных [само :: CURRENT_USER_PASSWORD_FIELD]); $ Форма-> setValues ($ данных); $ This-> Setform ($ форма); вернуть родителя :: _ prepareForm (); } }
и немного кода для User.php
пространство имен Vendor_Name \ Module_Name \ Block \ Role \ Grid; используйте \ Magento \ User \ Block \ Role \ Grid \ User в качестве RoleGridUser; используйте \ Magento \ Backend \ Block \ Widget \ Grid \ Extended как ExtendedGrid; Класс User расширяет RoleGridUser { защищенная функция _prepareColumns () { Родитель :: _ prepareCollection (); $ This-> addColumn ( 'User_image', [ 'header' => __ ('User Image'), 'ширина' => 5, 'align' => 'left', 'сортируемый' => правда, 'index' => 'user_image' ] ); return ExtendedGrid :: _ prepareCollection (); } }
Если вы посмотрите поближе, то уже сейчас, когда я пытаюсь добавить поле с изображением пользователя.
К сожалению, я не вижу никаких изменений в администрировании. Конечно, необходимый столбец был добавлен скриптом InstallSchema ранее в таблицу ' admin_user '.
Содержимое каталогов в древовидном формате:
mODULE_NAME Block── Блок │ ├── Каталог │ │ └── Продукт │ │ └── RelatedPosts.php │ ├── Роль │ │ └── Сетка │ │ └── User.php │ └── Пользователь Edit └── Править Tab └── Вкладка │ └── Main.php Comp── composer.json Etc── и т. Д. │ ├── di.xml │ └── module.xml Setup── Настройка Install── InstallSchema.php
Что я сделал не так?
источник
Ответы:
Для добавления поля изображения вы можете попробовать использовать плагин и всегда стараться избегать перезаписи всего класса.
Производитель / модуль / и т.д. / adminhtml / di.xml
Производитель / модуль / плагин / Block / Adminhtml / User / Edit / Tab / main.php
Очистить кэш.
источник
/module-user/Controller/Adminhtml/User/Save.php
- сохранить строку с путем изображения в таблице 'admin_user'. Извините за многие вопросы. ценю твою помощь! ура!после некоторых исследований получили решение для этого
со значением, которое вам нужно. посмотрите пример:
Я надеюсь, что это поможет некоторым из вас ..
источник
Замена заявления
с этим
работал на меня. Вот полный код. Добавляем поле «Доступный магазин» следующим образом.
И спасибо @Rob за то, что поделились подсказкой, с чего начать.
источник
Просто чтобы добавить еще один рабочий пример, мне удалось переписать страницу администрирования веб-сайта. Я пытался добавить поле URL на страницу редактирования сайта.
Я сделал именно то, что сказано в проверенном ответе, но я не добавил новый набор полей. Вместо этого я дополнил существующий, используя его идентификатор, определенный в классе Website.
Кроме того, я использовал наследование для извлечения модели веб-сайта и извлечения текущего значения из базы данных, чтобы поместить его в форму (оно также скопировано из класса веб-сайта Magento).
Предварительно необходимо добавить столбец url в таблицу store_website базы данных magento.
Вот рабочий результат (протестирован в Magento 2.1):
И файл di.xml в каталоге Vendor / Store / etc / adminhtml (здесь нет ничего нового из проверенного ответа):
источник
Я просто внес небольшое изменение в ваше решение, и оно сработало для меня:
Если вы хотите, я могу опубликовать полное решение, но я должен пересмотреть его, потому что в соответствии с нормами моей компании я не могу показать код на открытых форумах. Так что просто дайте мне знать, если вы можете сделать это самостоятельно.
источник