Ich bin auf der Suche nach einem guten Ansatz mit bereits vorbereitetem (standardmäßig) Magento-Benutzerformular (Modulbenutzer). Das Formular kann im Admin-Bereich über folgenden Pfad erreicht werden:
System> Alle Benutzer> [Ausgewählter_Benutzer]> Hauptbearbeitungsregisterkarte des Benutzers (Kontoinformationen)
Jetzt versuche ich, di.xml in meinem benutzerdefinierten Modul zu verwenden, in dem ich Abhängigkeiten spezifiziere: `
<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" />
`
Dies ist Inhalt, den ich bereits für eine Main.php-Klasse erstellt habe
// @codingStandardsIgnoreFile Namespace Vendor_Name \ Module_Name \ Block \ User \ Edit \ Tab; Verwenden Sie \ Magento \ User \ Block \ User \ Edit \ Tab \ Main als UserEditMainTab. Verwenden Sie \ Magento \ Backend \ Block \ Template \ Context. Verwenden Sie \ Magento \ Framework \ Registry. Verwenden Sie \ Magento \ Framework \ Data \ FormFactory. Verwenden Sie \ Magento \ Backend \ Model \ Auth \ Session. Verwenden Sie \ Magento \ Framework \ Locale \ ListsInterface. Klasse Main erweitert UserEditMainTab { öffentliche Funktion __construct ( Kontext $ Kontext, Registrierung $ Registrierung, FormFactory $ formFactory, Sitzung $ authSession, ListsInterface $ localeLists, Array $ data = [] ) { parent :: __ Konstrukt ($ context, $ registry, $ formFactory, $ authSession, $ localeLists, $ data); }} geschützte Funktion _prepareForm () { / ** @var $ model \ Magento \ User \ Model \ User * / $ model = $ this -> _ coreRegistry-> registry ('permissions_user'); / ** @var \ Magento \ Framework \ Data \ Form $ form * / $ form = $ this -> _ formFactory-> create (); $ form-> setHtmlIdPrefix ('user_'); $ baseFieldset = $ form-> addFieldset ('base_fieldset', ['legend' => __ ('Kontoinformationen __ TEST')]); if ($ model-> getUserId ()) { $ baseFieldset-> addField ('user_id', 'hidden', ['name' => 'user_id']); } else { if (! $ model-> hasData ('is_active')) { $ model-> setIsActive (1); }} }} $ baseFieldset-> addField ( 'user_image', 'Bild', [ 'name' => 'user_image', 'label' => __ ('User Image'), 'id' => 'user_image', 'title' => __ ('User Image'), 'erforderlich' => falsch, 'note' => 'Bildtyp zulassen: jpg, jpeg, png' ]] ); $ baseFieldset-> addField ( 'Nutzername', 'Text', [ 'name' => 'username', 'label' => __ ('Benutzername'), 'id' => 'Benutzername', 'title' => __ ('Benutzername'), 'erforderlich' => wahr ]] ); $ baseFieldset-> addField ( 'Vorname', 'Text', [ 'name' => 'firstname', 'label' => __ ('Vorname'), 'id' => 'Vorname', 'title' => __ ('Vorname'), 'erforderlich' => wahr ]] ); $ baseFieldset-> addField ( 'Familienname, Nachname', 'Text', [ 'name' => 'lastname', 'label' => __ ('Nachname'), 'id' => 'Nachname', 'title' => __ ('Nachname'), 'erforderlich' => wahr ]] ); $ baseFieldset-> addField ( 'Email', 'Text', [ 'name' => 'email', 'label' => __ ('Email'), 'id' => 'customer_email', 'title' => __ ('Benutzer-E-Mail'), 'class' => 'validate-email für erforderlichen Eintrag', 'erforderlich' => wahr ]] ); $ isNewObject = $ model-> isObjectNew (); if ($ isNewObject) { $ passwordLabel = __ ('Passwort'); } else { $ passwordLabel = __ ('Neues Passwort'); }} $ verifyLabel = __ ('Passwortbestätigung'); $ this -> _ addPasswordFields ($ baseFieldset, $ passwordLabel, $ verifyLabel, $ isNewObject); $ baseFieldset-> addField ( 'interface_locale', 'wählen', [ 'name' => 'interface_locale', 'label' => __ ('Interface Locale'), 'title' => __ ('Interface Locale'), 'values' => $ this -> _ LocaleLists-> getTranslatedOptionLocales (), 'class' => 'select' ]] ); if ($ this -> _ authSession-> getUser () -> getId ()! = $ model-> getUserId ()) { $ baseFieldset-> addField ( 'ist aktiv', 'wählen', [ 'name' => 'is_active', 'label' => __ ('Dieses Konto ist'), 'id' => 'is_active', 'title' => __ ('Kontostatus'), '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' => __ ('Überprüfung der aktuellen Benutzeridentität')] ); $ currentUserVerificationFieldset-> addField ( self :: CURRENT_USER_PASSWORD_FIELD, 'Passwort', [ 'name' => self :: CURRENT_USER_PASSWORD_FIELD, 'label' => __ ('Ihr Passwort'), 'id' => self :: CURRENT_USER_PASSWORD_FIELD, 'title' => __ ('Ihr Passwort'), 'class' => 'input-text validate-current-password required-entry', 'erforderlich' => wahr ]] ); $ data = $ model-> getData (); nicht gesetzt ($ data ['password']); nicht gesetzt ($ data [self :: CURRENT_USER_PASSWORD_FIELD]); $ form-> setValues ($ data); $ this-> setForm ($ form); return parent :: _ prepareForm (); }} }}
und etwas Code für User.php
Namespace Vendor_Name \ Module_Name \ Block \ Role \ Grid; Verwenden Sie \ Magento \ User \ Block \ Role \ Grid \ User als RoleGridUser. Verwenden Sie \ Magento \ Backend \ Block \ Widget \ Grid \ Extended als ExtendedGrid. Klasse Benutzer erweitert RoleGridUser { geschützte Funktion _prepareColumns () { parent :: _ prepareCollection (); $ this-> addColumn ( 'user_image', [ 'header' => __ ('User Image'), 'width' => 5, 'align' => 'left', 'sortierbar' => wahr, 'index' => 'user_image' ]] ); return ExtendedGrid :: _ prepareCollection (); }} }}
Wenn Sie genauer hinschauen, werden Sie bereits jetzt versuchen, ein Feld mit dem Bild des Benutzers hinzuzufügen.
Leider sehe ich keine Änderungen in der Admin-Front. Natürlich wurde die erforderliche Spalte vom InstallSchema-Skript früher zur Tabelle ' admin_user ' hinzugefügt .
Inhalt von Verzeichnissen in einem baumartigen Format:
Modulname ├── Blockieren │ ├ Katalog │ │ └ Produkt │ │ └ RelatedPosts.php │ ├ Rolle │ │ └ Gitter │ │ └ User.php │ └ Benutzer │ └ Bearbeiten │ └ Tab │ └ Main.php ├── composer.json ├── etc. │ ├ di.xml │ └ module.xml ├── Setup └── InstallSchema.php
Was habe ich falsch gemacht?
Antworten:
Zum Hinzufügen eines Bildfelds können Sie versuchen, das Plugin zu verwenden und immer zu vermeiden, dass die gesamte Klasse überschrieben wird.
Hersteller / Modul / etc / adminhtml / di.xml
Anbieter / Modul / Plugin / Block / Adminhtml / Benutzer / Bearbeiten / Tab / Main.php
Cache leeren.
quelle
/module-user/Controller/Adminhtml/User/Save.php
Überlegungen aktualisieren: - Speichern Sie die Zeichenfolge mit dem Bildpfad in der Tabelle 'admin_user'. Entschuldigung für viele Fragen. schätze deine Hilfe! Prost!Nach einigen Recherchen bekam man eine Lösung dafür
mit dem Wert, den Sie brauchen. siehe das Beispiel:
Ich hoffe es wird einigen von euch helfen ..
quelle
Ersetzen der Anweisung
mit diesem
arbeitete für mich. Hier ist der vollständige Code. Fügen Sie das Feld "Accessible Store" wie folgt hinzu.
Und danke @Rob für den Hinweis, wo man anfangen soll.
quelle
Um ein weiteres funktionierendes Beispiel hinzuzufügen, ist es mir gelungen, die Website-Administrationsseite zu überschreiben. Ich habe versucht, der Website-Bearbeitungsseite ein URL-Feld hinzuzufügen.
Ich habe genau das getan, was in der validierten Antwort steht, aber ich habe kein neues Feldset hinzugefügt. Stattdessen habe ich die vorhandene mit der in der Website-Klasse definierten ID vervollständigt.
Außerdem habe ich die Vererbung verwendet, um das Website-Modell abzurufen und den aktuellen Wert aus der Datenbank abzurufen, um ihn in das Formular einzufügen (er wurde auch aus der Magento-Website-Klasse kopiert).
Voraussetzung ist, dass die Spalte 'url' in der Tabelle store_website der Magento-Datenbank hinzugefügt wird.
Hier ist das Arbeitsergebnis (getestet in Magento 2.1):
Und die Datei di.xml im Verzeichnis Vendor / Store / etc / adminhtml (hier nichts Neues aus der validierten Antwort):
quelle
Ich habe nur eine kleine Änderung an Ihrer Lösung vorgenommen und es hat bei mir funktioniert:
Wenn Sie möchten, kann ich die gesamte Lösung veröffentlichen - aber ich muss sie überarbeiten, da ich den Code gemäß meinen Unternehmensnormen nicht in öffentlichen Foren anzeigen kann. Lassen Sie mich einfach wissen, ob Sie es selbst tun können.
quelle