Je recherche une bonne approche avec l'ajout / mise à jour déjà préparé (par défaut) du formulaire Utilisateur Magento (module-utilisateur). Le formulaire peut être atteint dans le panneau d'administration par ce chemin:
Système> Tous les utilisateurs> [utilisateur choisi]> Onglet d'édition principal de l'utilisateur (Informations sur le compte)
Maintenant, j'essaie d'utiliser di.xml dans mon module personnalisé où je spécifie les dépendances: `
<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" />
"
C'est du contenu que j'ai déjà créé pour une classe Main.php
// @codingStandardsIgnoreFile espace de noms Vendor_Name \ Module_Name \ Block \ User \ Edit \ Tab; utilisez \ Magento \ User \ Block \ User \ Edit \ Tab \ Main comme UserEditMainTab; utilisez \ Magento \ Backend \ Block \ Template \ Context; utilisez \ Magento \ Framework \ Registry; utilisez \ Magento \ Framework \ Data \ FormFactory; utilisez \ Magento \ Backend \ Model \ Auth \ Session; use \ Magento \ Framework \ Locale \ ListsInterface; La classe Main étend UserEditMainTab { fonction publique __construct ( Context $ context, Registry $ Registry, FormFactory $ formFactory, Session $ authSession, ListsInterface $ localeLists, tableau $ data = [] ) { parent :: __ construct ($ context, $ registry, $ formFactory, $ authSession, $ localeLists, $ data); } fonction protégée _prepareForm () { / ** @var $ model \ Magento \ User \ Model \ User * / $ model = $ this -> _ coreRegistry-> registre ('permissions_user'); / ** @var \ Magento \ Framework \ Data \ Form $ form * / $ form = $ this -> _ formFactory-> create (); $ form-> setHtmlIdPrefix ('user_'); $ baseFieldset = $ form-> addFieldset ('base_fieldset', ['legend' => __ ('Account Information __ TEST')]); if ($ model-> getUserId ()) { $ baseFieldset-> addField ('user_id', 'hidden', ['name' => 'user_id']); } autre { if (! $ model-> hasData ('is_active')) { $ model-> setIsActive (1); } } $ baseFieldset-> addField ( 'user_image', 'image', [ 'name' => 'user_image', 'label' => __ ('Image utilisateur'), 'id' => 'image_utilisateur', 'title' => __ ('Image utilisateur'), 'required' => false, 'note' => 'Autoriser le type d'image: jpg, jpeg, png' ] ); $ baseFieldset-> addField ( 'Nom d'utilisateur', 'texte', [ 'name' => 'username', 'label' => __ ('Nom d'utilisateur'), 'id' => 'nom d'utilisateur', 'title' => __ ('Nom d'utilisateur'), 'required' => vrai ] ); $ baseFieldset-> addField ( 'Prénom', 'texte', [ 'name' => 'firstname', 'label' => __ ('Prénom'), 'id' => 'prénom', 'title' => __ ('Prénom'), 'required' => vrai ] ); $ baseFieldset-> addField ( 'nom de famille', 'texte', [ 'name' => 'lastname', 'label' => __ ('Nom'), 'id' => 'nom', 'title' => __ ('Nom'), 'required' => vrai ] ); $ baseFieldset-> addField ( 'email', 'texte', [ 'name' => 'email', 'label' => __ ('Email'), 'id' => 'email_client', 'title' => __ ('Email de l'utilisateur'), 'class' => 'required-entry validate-email', 'required' => vrai ] ); $ isNewObject = $ model-> isObjectNew (); if ($ isNewObject) { $ passwordLabel = __ ('Mot de passe'); } autre { $ passwordLabel = __ ('Nouveau mot de passe'); } $ confirmationLabel = __ ('Confirmation du mot de passe'); $ this -> _ addPasswordFields ($ baseFieldset, $ passwordLabel, $ confirmationLabel, $ isNewObject); $ baseFieldset-> addField ( 'interface_locale', 'sélectionner', [ 'name' => 'interface_locale', 'label' => __ ('Interface Locale'), 'title' => __ ('Interface Locale'), 'values' => $ this -> _ LocaleLists-> getTranslatedOptionLocales (), 'class' => 'select' ] ); if ($ this -> _ authSession-> getUser () -> getId ()! = $ model-> getUserId ()) { $ baseFieldset-> addField ( 'c'est actif', 'sélectionner', [ 'name' => 'is_active', 'label' => __ ('Ce compte est'), 'id' => 'is_active', 'title' => __ ('Statut du compte'), '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' => __ ('Vérification de l'identité de l'utilisateur actuel')] ); $ currentUserVerificationFieldset-> addField ( self :: CURRENT_USER_PASSWORD_FIELD, 'mot de passe', [ 'name' => self :: CURRENT_USER_PASSWORD_FIELD, 'label' => __ ('Votre mot de passe'), 'id' => self :: CURRENT_USER_PASSWORD_FIELD, 'title' => __ ('Votre mot de passe'), 'class' => 'input-text validate-current-password required-entry', 'required' => vrai ] ); $ data = $ model-> getData (); unset ($ data ['mot de passe']); unset ($ data [self :: CURRENT_USER_PASSWORD_FIELD]); $ form-> setValues ($ data); $ this-> setForm ($ form); return parent :: _ prepareForm (); } }
et du code pour User.php
espace de noms Vendor_Name \ Module_Name \ Block \ Role \ Grid; utilisez \ Magento \ User \ Block \ Role \ Grid \ User comme RoleGridUser; utilisez \ Magento \ Backend \ Block \ Widget \ Grid \ Extended comme ExtendedGrid; classe User étend RoleGridUser { fonction protégée _prepareColumns () { parent :: _ prepareCollection (); $ this-> addColumn ( 'user_image', [ 'header' => __ ('Image utilisateur'), 'largeur' => 5, 'align' => 'left', 'sortable' => true, 'index' => 'image_utilisateur' ] ); return ExtendedGrid :: _ prepareCollection (); } }
Si vous regardez de plus près vous déjà maintenant que j'essaie d'ajouter un champ avec l'image de l'utilisateur.
Malheureusement, je ne vois aucun changement dans la partie administrative. Bien sûr, la colonne nécessaire a été ajoutée par le script InstallSchema plus tôt dans la table ' admin_user '.
Contenu des répertoires sous forme d'arborescence:
Module_Name ├── Bloquer │ ├── Catalogue │ │ └── Produit │ │ └── RelatedPosts.php │ ├── Rôle │ │ └── Grille │ │ └── User.php │ └── Utilisateur │ └── Modifier │ └── Tab │ └── Main.php ├── composer.json ├── etc │ ├── di.xml │ └── module.xml ├── Configuration └── InstallSchema.php
Qu'ai-je fait de mal?
Réponses:
Pour ajouter un champ d'image, vous pouvez essayer d'utiliser le plugin et toujours essayer d'éviter d'écraser toute la classe.
Fournisseur / Module / etc / adminhtml / di.xml
Fournisseur / Module / Plugin / Bloquer / Adminhtml / Utilisateur / Modifier / Tab / Main.php
Vider le cache.
la source
/module-user/Controller/Adminhtml/User/Save.php
- enregistrer la chaîne avec le chemin de l'image dans la table 'admin_user'. Désolé pour de nombreuses questions. apprécier ton aide! à votre santé!après quelques recherches a obtenu une solution pour cela
avec la valeur dont vous avez besoin. voir l'exemple:
J'espère que cela aidera certains d'entre vous ..
la source
Remplacement de la déclaration
avec ça
travaillé pour moi. Voici le code complet. Ajout du champ "Boutique accessible" comme suit.
Et merci à @Rob d'avoir partagé l'indice par où commencer.
la source
Juste pour ajouter un autre exemple de travail, j'ai réussi à remplacer la page d'administration du site Web. J'essayais d'ajouter un champ URL à la page de modification du site Web.
J'ai fait exactement ce qui est dit dans la réponse validée mais je n'ai pas ajouté de nouveau fieldset. Au lieu de cela, j'ai terminé celui existant, en utilisant son id défini dans la classe Website.
En outre, j'ai utilisé l'héritage pour récupérer le modèle de site Web et récupérer la valeur actuelle de la base de données pour le placer dans le formulaire (il est également copié de la classe de site Web Magento).
Au préalable, il est nécessaire d'ajouter la colonne 'url' dans la table store_website de la base de données magento.
Voici le résultat de travail (testé dans Magento 2.1):
Et le fichier di.xml dans le répertoire Vendor / Store / etc / adminhtml (rien de nouveau ici à partir de la réponse validée):
la source
Je viens de faire un changement mineur dans votre solution et cela a fonctionné pour moi:
Si vous le souhaitez, je peux publier l'intégralité de la solution - mais je dois la réviser car, conformément aux normes de mon entreprise, je ne peux pas afficher le code sur les forums publics. Alors, faites-moi savoir si vous pouvez le faire vous-même.
la source