Estoy buscando un buen enfoque con el formulario de agregar / actualizar ya preparado (por defecto) Magento User (module-user). Se puede acceder al formulario en el panel de administración mediante esta ruta:
Sistema> Todos los usuarios> [elegido_usuario]> Pestaña de edición principal del usuario (Información de la cuenta)
Ahora estoy intentando usar di.xml en mi módulo personalizado donde especifico dependencias: `
<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" />
``
Este es el contenido que ya hice para una clase Main.php
// @codingStandardsIgnoreFile espacio de nombres Nombre del proveedor \ Nombre del módulo \ Bloque \ Usuario \ Editar \ Pestaña; use \ Magento \ User \ Block \ User \ Edit \ Tab \ Main como UserEditMainTab; use \ Magento \ Backend \ Block \ Template \ Context; use \ Magento \ Framework \ Registry; use \ Magento \ Framework \ Data \ FormFactory; use \ Magento \ Backend \ Model \ Auth \ Session; use \ Magento \ Framework \ Locale \ ListsInterface; La clase Main extiende UserEditMainTab { función pública __construct ( Contexto $ context, Registro $ registro, FormFactory $ formFactory, Sesión $ authSession, ListsInterface $ localeLists, matriz $ datos = [] ) { parent :: __ construct ($ context, $ registro, $ formFactory, $ authSession, $ localeLists, $ data); } función protegida _prepareForm () { / ** @var $ model \ Magento \ User \ Model \ User * / $ model = $ this -> _ coreRegistry-> registro ('permisos_usuario'); / ** @var \ Magento \ Framework \ Data \ Form $ form * / $ form = $ this -> _ formFactory-> create (); $ form-> setHtmlIdPrefix ('user_'); $ baseFieldset = $ form-> addFieldset ('base_fieldset', ['legend' => __ ('Información de la cuenta __ TEST')]); if ($ model-> getUserId ()) { $ baseFieldset-> addField ('user_id', 'hidden', ['name' => 'user_id']); } más { if (! $ model-> hasData ('is_active')) { $ modelo-> setIsActive (1); } } $ baseFieldset-> addField ( 'user_image', 'imagen', [ 'name' => 'user_image', 'label' => __ ('Imagen de usuario'), 'id' => 'user_image', 'title' => __ ('Imagen de usuario'), 'required' => false, 'note' => 'Permitir tipo de imagen: jpg, jpeg, png' ] ); $ baseFieldset-> addField ( 'nombre de usuario', 'texto', [ 'name' => 'nombre de usuario', 'label' => __ ('Nombre de usuario'), 'id' => 'nombre de usuario', 'title' => __ ('Nombre de usuario'), 'required' => verdadero ] ); $ baseFieldset-> addField ( 'primer nombre', 'texto', [ 'name' => 'firstname', 'label' => __ ('Nombre'), 'id' => 'nombre', 'title' => __ ('Nombre'), 'required' => verdadero ] ); $ baseFieldset-> addField ( 'apellido', 'texto', [ 'name' => 'apellido', 'label' => __ ('Apellido'), 'id' => 'apellido', 'title' => __ ('Apellido'), 'required' => verdadero ] ); $ baseFieldset-> addField ( 'Email', 'texto', [ 'name' => 'email', 'label' => __ ('Correo electrónico'), 'id' => 'customer_email', 'title' => __ ('Correo electrónico del usuario'), 'class' => 'required-entry validate-email', 'required' => verdadero ] ); $ isNewObject = $ modelo-> isObjectNew (); if ($ isNewObject) { $ passwordLabel = __ ('Contraseña'); } más { $ passwordLabel = __ ('Nueva contraseña'); } $ confirmLabel = __ ('Confirmación de contraseña'); $ this -> _ addPasswordFields ($ baseFieldset, $ passwordLabel, $ confirmLabel, $ isNewObject); $ baseFieldset-> addField ( 'interface_locale', 'Seleccione', [ 'name' => 'interface_locale', 'label' => __ ('Configuración regional de interfaz'), 'title' => __ ('Configuración regional de interfaz'), 'values' => $ this -> _ LocaleLists-> getTranslatedOptionLocales (), 'class' => 'select' ] ); if ($ this -> _ authSession-> getUser () -> getId ()! = $ model-> getUserId ()) { $ baseFieldset-> addField ( 'está activo', 'Seleccione', [ 'name' => 'is_active', 'label' => __ ('Esta cuenta es'), 'id' => 'is_active', 'title' => __ ('Estado de la cuenta'), 'class' => 'input-select', 'opciones' => ['1' => __ ('Activo'), '0' => __ ('Inactivo')] ] ); } $ baseFieldset-> addField ('user_roles', 'hidden', ['name' => 'user_roles', 'id' => '_user_roles']); $ currentUserVerificationFieldset = $ form-> addFieldset ( 'current_user_verification_fieldset', ['leyenda' => __ ('Verificación de identidad del usuario actual')] ); $ currentUserVerificationFieldset-> addField ( self :: CURRENT_USER_PASSWORD_FIELD, 'contraseña', [ 'name' => self :: CURRENT_USER_PASSWORD_FIELD, 'label' => __ ('Su contraseña'), 'id' => self :: CURRENT_USER_PASSWORD_FIELD, 'title' => __ ('Su contraseña'), 'class' => 'input-text validate-current-password required-entry', 'required' => verdadero ] ); $ datos = $ modelo-> getData (); sin establecer ($ datos ['contraseña']); unset ($ data [self :: CURRENT_USER_PASSWORD_FIELD]); $ form-> setValues ($ data); $ this-> setForm ($ form); return parent :: _ prepareForm (); } }
y algo de código para User.php
espacio de nombres Nombre_proveedor \ Nombre_módulo \ Bloque \ Función \ Cuadrícula; use \ Magento \ User \ Block \ Role \ Grid \ User como RoleGridUser; use \ Magento \ Backend \ Block \ Widget \ Grid \ Extended como ExtendedGrid; clase Usuario extiende RoleGridUser { función protegida _prepareColumns () { parent :: _ prepareCollection (); $ this-> addColumn ( 'user_image', [ 'header' => __ ('Imagen de usuario'), 'ancho' => 5, 'align' => 'left', 'clasificable' => verdadero, 'index' => 'user_image' ] ); return ExtendedGrid :: _ prepareCollection (); } }
Si miras más de cerca, ahora que estoy tratando de agregar un campo con la imagen del usuario.
Desafortunadamente, no veo ningún cambio en el frente de administración. Por supuesto, la columna necesaria fue agregada por el script InstallSchema anteriormente a la tabla ' admin_user '.
Contenido de directorios en formato de árbol:
Nombre del módulo ├── Bloque │ ├── Catálogo │ │ └── Producto │ │ └── RelatedPosts.php │ ├── Rol │ │ └── Cuadrícula │ │ └── User.php │ └── Usuario │ └── Editar └── └── Pestaña │ └── Main.php ├── composer.json ├── etc. │ ├── di.xml │ └── module.xml ├── Configuración └── InstallSchema.php
¿Qué hice mal?
Respuestas:
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 / Pestaña / Main.php
Limpiar cache.
fuente
/module-user/Controller/Adminhtml/User/Save.php
- guarde la cadena con la ruta de la imagen en la tabla 'admin_user'. Perdón por muchas preguntas. ¡aprecio tu ayuda! ¡salud!después de que algunas investigaciones obtuvieron una solución para esto
con el valor que necesitas mira el ejemplo:
Espero que ayude a algunos de ustedes ...
fuente
Sustitución de la declaración
con este
trabajó para mi. Aquí está el código completo. Agregar el campo "Tienda accesible" de la siguiente manera.
Y gracias @Rob por compartir la pista por dónde empezar.
fuente
Solo para agregar otro ejemplo de trabajo, he logrado sobrescribir la página de administración del sitio web. Intenté 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, he completado el existente, usando su identificación definida en la clase del 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 la tabla store_website de la base de datos magento.
Aquí está el resultado de trabajo (probado en Magento 2.1):
Y el archivo di.xml en el directorio Vendor / Store / etc / adminhtml (nada nuevo aquí de la respuesta validada):
fuente
Acabo de hacer un cambio menor en su solución y funcionó para mí:
Si lo desea, puedo publicar toda la solución, pero tengo que revisarla porque, según las normas de mi empresa, no puedo mostrar el código en foros públicos. Así que avísame si puedes hacerlo tú mismo.
fuente