Szukam dobrego podejścia z dodanym / zaktualizowanym już (domyślnie) formularzem użytkownika Magento (moduł-użytkownik). Do formularza można dotrzeć w panelu administracyjnym, korzystając z tej ścieżki:
System> Wszyscy użytkownicy> [wybrany_użytkownik]> główna karta edycji użytkownika (Informacje o koncie)
Teraz próbuję użyć di.xml w moim module niestandardowym, w którym określam zależności: `
<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" />
`
To jest treść, którą już stworzyłem dla klasy Main.php
// @codingStandardsIgnoreFile przestrzeń nazw nazwa_dostawcy \ nazwa_modułu \ blok \ użytkownik \ edycja \ tab; użyj \ Magento \ User \ Block \ User \ Edit \ Tab \ Main jako UserEditMainTab; użyj \ Magento \ Backend \ Block \ Template \ Context; use \ Magento \ Framework \ Registry; use \ Magento \ Framework \ Data \ FormFactory; użyj \ Magento \ Backend \ Model \ Auth \ Session; use \ Magento \ Framework \ Locale \ ListsInterface; klasa Main rozszerza UserEditMainTab { funkcja publiczna __construct ( Kontekst $ kontekst, Rejestr $ rejestr, FormFactory $ formFactory, Sesja $ authSession, ListsInterface $ localeLists, tablica $ data = [] ) { rodzic :: __ konstrukcja ($ kontekst, $ rejestr, $ formFactory, $ authSession, $ localeLists, $ data); } funkcja chroniona _prepareForm () { / ** @var $ model \ Magento \ Użytkownik \ Model \ Użytkownik * / $ model = $ this -> _ coreRegistry-> register ('permissions_user'); / ** @var \ Magento \ Framework \ Data \ Form $ form * / $ form = $ this -> _ formFactory-> create (); $ form-> setHtmlIdPrefix ('user_'); $ baseFieldset = $ form-> addFieldset ('base_fieldset', ['legend' => __ ('Informacje o koncie __ 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”, 'wizerunek', [ „name” => „user_image”, „label” => __ („Obraz użytkownika”), „id” => „user_image”, „title” => __ („Obraz użytkownika”), „wymagane” => fałsz, „note” => „Zezwól na typ obrazu: jpg, jpeg, png” ] ); $ baseFieldset-> addField ( 'Nazwa Użytkownika', 'tekst', [ „name” => „username”, „label” => __ („Nazwa użytkownika”), „id” => „nazwa użytkownika”, „title” => __ („Nazwa użytkownika”), „wymagane” => prawda ] ); $ baseFieldset-> addField ( 'Imię', 'tekst', [ „name” => „firstname”, „label” => __ („Imię”), „id” => „imię”, „title” => __ („Imię”), „wymagane” => prawda ] ); $ baseFieldset-> addField ( 'nazwisko', 'tekst', [ „imię” => „nazwisko”, „label” => __ („Nazwisko”), „id” => „nazwisko”, „title” => __ („nazwisko”), „wymagane” => prawda ] ); $ baseFieldset-> addField ( 'e-mail', 'tekst', [ „name” => „email”, „label” => __ („Email”), „id” => „customer_email”, „title” => __ („E-mail użytkownika”), „klasa” => „wymagany-poprawny adres e-mail”, „wymagane” => prawda ] ); $ isNewObject = $ model-> isObjectNew (); if ($ isNewObject) { $ passwordLabel = __ („Hasło”); } else { $ passwordLabel = __ („Nowe hasło”); } $ potwierdzenieLabel = __ („Potwierdzenie hasła”); $ this -> _ addPasswordFields ($ baseFieldset, $ passwordLabel, $ confirmLabel, $ isNewObject); $ baseFieldset-> addField ( „interfejs_lokalny”, 'Wybierz', [ „name” => „interface_locale”, „label” => __ („Ustawienia regionalne interfejsu”), „title” => __ („Ustawienia regionalne interfejsu”), 'wartości' => $ to -> _ LocaleLists-> getTranslatedOptionLocales (), „klasa” => „wybierz” ] ); if ($ this -> _ authSession-> getUser () -> getId ()! = $ model-> getUserId ()) { $ baseFieldset-> addField ( 'jest aktywny', 'Wybierz', [ „name” => „is_active”, „label” => __ („To konto to”), „id” => „is_active”, „title” => __ („Status konta”), „class” => „input-select”, „opcje” => [„1” => __ („Aktywny”), „0” => __ („Nieaktywny”)] ] ); } $ baseFieldset-> addField ('user_roles', 'hidden', ['name' => 'user_roles', 'id' => '_user_roles']); $ currentUserVerificationFieldset = $ form-> addFieldset ( „current_user_verification_fieldset”, ['legend' => __ („Bieżąca weryfikacja tożsamości użytkownika”)] ); $ currentUserVerificationFieldset-> addField ( self :: CURRENT_USER_PASSWORD_FIELD, 'hasło', [ 'name' => self :: CURRENT_USER_PASSWORD_FIELD, „label” => __ („Twoje hasło”), „id” => self :: CURRENT_USER_PASSWORD_FIELD, „title” => __ („Twoje hasło”), „class” => „input-text validate-current-password wymagany-wpis”, „wymagane” => prawda ] ); $ data = $ model-> getData (); nieustawiony ($ data [„hasło”]); nieustawiony ($ data [self :: CURRENT_USER_PASSWORD_FIELD]); $ form-> setValues ($ data); $ this-> setForm ($ form); return parent :: _ preparForm (); } }
i trochę kodu dla User.php
przestrzeń nazw nazwa_dostawcy \ nazwa_modułu \ blok \ rola \ siatka; użyj \ Magento \ User \ Block \ Role \ Grid \ User jako RoleGridUser; użyj \ Magento \ Backend \ Block \ Widget \ Grid \ Extended jako ExtendedGrid; klasa Użytkownik rozszerza RoleGridUser { funkcja chroniona _prepareColumns () { parent :: _ preparCollection (); $ this-> addColumn ( „user_image”, [ „header” => __ („Obraz użytkownika”), „szerokość” => 5, „align” => „left”, „sortable” => true, „index” => „user_image” ] ); return ExtendedGrid :: _ preparCollection (); } }
Jeśli przyjrzysz się bliżej, już teraz próbuję dodać pole z wizerunkiem użytkownika.
Niestety nie widzę żadnych zmian w panelu administratora. Oczywiście potrzebna kolumna została wcześniej dodana przez skrypt InstallSchema do tabeli „ admin_user ”.
Zawartość katalogów w formacie drzewiastym:
Nazwa modułu ├── Blokuj │ ├── Katalog └── │ └── Produkt └── │ └── RelatedPosts.php ├── ├── Rola │ │ └── Siatka └── │ └── User.php └── └── Użytkownik └── └── Edytuj │ └── Tab └── └── Main.php ├── composer.json ├── itp ├── ├── di.xml └── └── module.xml ├── Konfiguracja └── InstallSchema.php
Co zrobiłem źle?
źródło
Odpowiedzi:
Aby dodać pole obrazu, możesz spróbować użyć wtyczki i zawsze staraj się unikać zastępowania całej klasy.
Dostawca / Moduł / etc / adminhtml / di.xml
Vendor / Module / Plugin / Block / Adminhtml / User / Edit / Tab / Main.php
Wyczyść pamięć podręczną.
źródło
/module-user/Controller/Adminhtml/User/Save.php
- zapisz ciąg ze ścieżką obrazu w tabeli „admin_user”. Przepraszam za wiele pytań. doceniam Twoją pomoc! Twoje zdrowie!po kilku badaniach udało się znaleźć rozwiązanie tego problemu
o wartości, której potrzebujesz. patrz przykład:
Mam nadzieję, że to pomoże niektórym z was ...
źródło
Zastępowanie instrukcji
z tym
pracował dla mnie. Oto pełny kod. Dodanie pola „Sklep dostępny” w następujący sposób.
I dzięki @Rob za podzielenie się wskazówką, od czego zacząć.
źródło
Aby dodać kolejny działający przykład, udało mi się zastąpić stronę administratora witryny. Próbowałem dodać pole adresu URL do strony edycji witryny.
Zrobiłem dokładnie to, co zostało powiedziane w potwierdzonej odpowiedzi, ale nie dodałem nowego zestawu pól. Zamiast tego ukończyłem już istniejący, używając jego identyfikatora zdefiniowanego w klasie WWW.
Poza tym użyłem dziedziczenia do pobrania modelu strony i pobrania bieżącej wartości z bazy danych, aby umieścić ją w formularzu (jest ona również skopiowana z klasy Magento Website).
Wymagane jest dodanie kolumny „url” w tabeli store_website bazy danych magento.
Oto wynik pracy (przetestowany w Magento 2.1):
Oraz plik di.xml w katalogu Vendor / Store / etc / adminhtml (nic nowego tutaj z potwierdzonej odpowiedzi):
źródło
Właśnie dokonałem niewielkiej zmiany w twoim rozwiązaniu i zadziałało dla mnie:
Jeśli chcesz, mogę opublikować całe rozwiązanie - ale muszę je poprawić, ponieważ zgodnie z normami mojej firmy nie mogę wyświetlać kodu na forach publicznych. Po prostu daj mi znać, czy możesz to zrobić sam.
źródło