Luego de tanto luchar hemos dado con el arreglo de esta cuestión que tantos usuarios de este sitio web tienen. Si quieres aportar algún dato no dudes en compartir tu comentario.
Solución:
Para agregar un campo de imagen, puede intentar usar el complemento y siempre tratar de evitar sobrescribir toda la clase.
Proveedor / Módulo / etc / adminhtml / di.xml
Proveedor / Módulo / Complemento / Bloque / Adminhtml / Usuario / Editar / Tab / Main.php
namespace VendorModulePluginBlockAdminhtmlUserEditTab;
class Main
/**
* Get form HTML
*
* @return string
*/
public function aroundGetFormHtml(
MagentoUserBlockUserEditTabMain $subject,
Closure $proceed
)
$form = $subject->getForm();
if (is_object($form))
$fieldset = $form->addFieldset('admin_user_image', ['legend' => __('User Image')]);
$fieldset->addField(
'user_image',
'image',
[
'name' => 'user_image',
'label' => __('Image'),
'id' => 'user_image',
'title' => __('Image'),
'required' => false,
'note' => 'Allow image type: jpg, jpeg, png'
]
);
$subject->setForm($form);
return $proceed();
Limpiar cache.
Reemplazo de la declaración
return parent::_prepareForm();
con este
return MagentoBackendBlockWidgetFormGeneric::_prepareForm();
trabajó para mi. Aquí está el código completo. Añadiendo el campo “Tienda accesible” de la siguiente manera.
deployedLocales = $deployedLocales
?: ObjectManager::getInstance()->get(OptionInterface::class);
parent::__construct($context, $registry, $formFactory, $authSession, $localeLists, $data, $this->deployedLocales);
/**
* Prepare form fields
*
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
* @return MagentoBackendBlockWidgetForm
*/
protected function _prepareForm()
//die('test');
/** @var $model MagentoUserModelUser */
$model = $this->_coreRegistry->registry('permissions_user');
/** @var MagentoFrameworkDataForm $form */
$form = $this->_formFactory->create();
$form->setHtmlIdPrefix('user_');
$baseFieldset = $form->addFieldset('base_fieldset', ['legend' => __('Account Information')]);
if ($model->getUserId())
$baseFieldset->addField('user_id', 'hidden', ['name' => 'user_id']);
else
if (!$model->hasData('is_active'))
$model->setIsActive(1);
$baseFieldset->addField(
'username',
'text',
[
'name' => 'username',
'label' => __('User Name'),
'id' => 'username',
'title' => __('User Name'),
'required' => true
]
);
$baseFieldset->addField(
'firstname',
'text',
[
'name' => 'firstname',
'label' => __('First Name'),
'id' => 'firstname',
'title' => __('First Name'),
'required' => true
]
);
$baseFieldset->addField(
'lastname',
'text',
[
'name' => 'lastname',
'label' => __('Last Name'),
'id' => 'lastname',
'title' => __('Last Name'),
'required' => true
]
);
// Adding new field for Scope Access
$baseFieldset->addField(
'accessible_store',
'select',
[
'name' => 'accessible_store',
'label' => __('Accessible Store'),
'id' => 'accessible_store',
'title' => __('Accessible Store'),
'class' => 'input-select',
'options' => ['3' => __('Global Store'),
'1' => __('Malaysia Pavillion'),
'2' => __('Thailand Pavilion')],
'required' => true
]
);
$baseFieldset->addField(
'email',
'text',
[
'name' => 'email',
'label' => __('Email'),
'id' => 'customer_email',
'title' => __('User Email'),
'class' => 'required-entry validate-email',
'required' => true
]
);
$isNewObject = $model->isObjectNew();
if ($isNewObject)
$passwordLabel = __('Password');
else
$passwordLabel = __('New Password');
$confirmationLabel = __('Password Confirmation');
$this->_addPasswordFields($baseFieldset, $passwordLabel, $confirmationLabel, $isNewObject);
$baseFieldset->addField(
'interface_locale',
'select',
[
'name' => 'interface_locale',
'label' => __('Interface Locale'),
'title' => __('Interface Locale'),
'values' => $this->deployedLocales->getOptionLocales(),
'class' => 'select'
]
);
if ($this->_authSession->getUser()->getId() != $model->getUserId())
$baseFieldset->addField(
'is_active',
'select',
[
'name' => 'is_active',
'label' => __('This account is'),
'id' => 'is_active',
'title' => __('Account Status'),
'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' => __('Current User Identity Verification')]
);
$currentUserVerificationFieldset->addField(
self::CURRENT_USER_PASSWORD_FIELD,
'password',
[
'name' => self::CURRENT_USER_PASSWORD_FIELD,
'label' => __('Your Password'),
'id' => self::CURRENT_USER_PASSWORD_FIELD,
'title' => __('Your Password'),
'class' => 'input-text validate-current-password required-entry',
'required' => true
]
);
$data = $model->getData();
unset($data['password']);
unset($data[self::CURRENT_USER_PASSWORD_FIELD]);
$form->setValues($data);
$this->setForm($form);
//return parent::_prepareForm();
return MagentoBackendBlockWidgetFormGeneric::_prepareForm();
Y gracias @Rob por compartir la pista por dónde empezar.
Solo para agregar otro ejemplo funcional, logré sobrescribir la página de administración del sitio web. Estaba intentando agregar un campo de URL a la página de edición del sitio web.
Hice exactamente lo que se dice en la respuesta validada, pero no agregué un nuevo conjunto de campos. En cambio, completé el existente, usando su identificación definida en la clase Sitio web.
Además, he usado la herencia para recuperar el modelo del sitio web y recuperar el valor actual de la base de datos para ponerlo dentro del formulario (también se copia de la clase del sitio web de Magento).
Como requisito previo, es necesario agregar la columna url
en el store_website
tabla de la base de datos de Magento.
Aquí está el resultado de trabajo (probado en Magento 2.1):
getForm();
if (is_object($form))
// From MagentoBackendBlockSystemStoreEditFormWebsite :
$websiteModel = $this->_coreRegistry->registry('store_data');
$postData = $this->_coreRegistry->registry('store_post_data');
if ($postData)
$websiteModel->setData($postData['website']);
// Fieldset name from MagentoBackendBlockSystemStoreEditFormWebsite
$fieldset = $form->getElement('website_fieldset');
$fieldset->addField(
'website_url',
'text',
[
'name' => 'website[url]', // From MagentoBackendBlockSystemStoreEditFormWebsite
'label' => __('Website URL'),
'value' => $websiteModel->getData('url'),
'title' => __('Website URL'),
'required' => false
]
);
$subject->setForm($form);
return $proceed();
Y el di.xml
presentar en Proveedor / Tienda / etc / adminhtml directorio (nada nuevo aquí de la respuesta validada):
Si haces scroll puedes encontrar las interpretaciones de otros administradores, tú igualmente puedes dejar el tuyo si te gusta.