Saltar al contenido

Magento 2 Agregar nuevo campo al formulario de administración de Magento_User

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *