dzolinar Posted April 29, 2020 Share Posted April 29, 2020 Witam wszystkich Na wstępie dodam, że jest to mój pierwszy post na tym forum dlatego też proszę o wyrozumiałość. Od pewnego już czasu próbuje znaleźć rozwiązanie dla modyfikacji formularza rejestracyjnego w moim sklepie. Aktualnie mój formularz pozwala zdecydować klientowi jaki typ konta klienta chce założyć. Wybór konta tyczy się tutaj różnych typów współpracy i przypisania do odpowiednich grup klientów. Poszczególne grupy klientów mają odpowiednią walidacje i wymagają wypisania dodatkowych pól formularza rejestracyjnego i ewentualnie załączenia dokumentu. Problem którego nie potrafię rozwiązać to dynamiczne pokazywanie/ukrywanie pól wymaganych dla poszczególnych grup klienckich. Zależy mi aby formularz był maksymalnie "czysty" i szybki i nie pokazywał pól formularza klientom, którzy nie nie musza ich wypisywać. Zobrazuje to na poniższym screenie idąc dalej dla kolejnego typu konta "Hodowca" do ukrycia będą już tylko Firma i NIP i podobnie dla pozostałych opcji. Wszystko miało by się przełączać dynamicznie w zależności od tego co jest wybrane w polu "Rodzaj konta". Dodam tylko, że wszystkie pola dodałem ręcznie do presty i zanim przeszukałem sporo stron w necie aby znaleźć rozwiązanie sprawdziłem kilka gotowych rozwiązań(modułów), które tworzą dodatkowe pola w formularzu rejestracyjnym. Najbliżej był moduł od FME Custom Registration Fields ale niestety nie działał prawidłowo do tego stopnia ze Panowie z FME polegli w supporcie. Poniżej modyfikacja którą wprowadziłem do CustomerFormatter.php aby uzyskać dodatkowe pola: if ($this->ask_for_birthdate) { $format['birthday'] = (new FormField()) ->setName('birthday') ->setType('text') ->setLabel( $this->translator->trans( 'Birthdate', [], 'Shop.Forms.Labels' ) ) ->addAvailableValue('placeholder', Tools::getDateFormat()) ->addAvailableValue( 'comment', $this->translator->trans('(E.g.: %date_format%)', array('%date_format%' => Tools::formatDateStr('31 May 1970')), 'Shop.Forms.Help') ); } $accountField = (new FormField) ->setName('account_type') ->setType('select') ->setLabel( $this->translator->trans( 'Rodzaj konta', [], 'Shop.Forms.Labels' ) ) ->setRequired(true); $accountField->addAvailableValue(3, $this->translator->trans('Klient detaliczny',[],'Shop.Forms.Labels')); $accountField->setValue(3); $accountField->addAvailableValue(4, $this->translator->trans('Hodowca - konto profesjonalne',[],'Shop.Forms.Labels')); $accountField->addAvailableValue(5, $this->translator->trans('Sklep zoologiczny - konto profesjonalne',[],'Shop.Forms.Labels')); $accountField->addAvailableValue(6, $this->translator->trans('Hurtownia zoologiczna - konto profesjonalne',[],'Shop.Forms.Labels')); $accountField->addAvailableValue(7, $this->translator->trans('Gabinet weterynaryjny - konto profesjonalne',[],'Shop.Forms.Labels')); $format[$accountField->getName()] = $accountField; if (Configuration::get('PS_B2B_ENABLE')) { $format['company'] = (new FormField()) ->setName('company') ->setType('text') ->setLabel($this->translator->trans( 'Company', [], 'Shop.Forms.Labels' )); $format['siret'] = (new FormField()) ->setName('siret') ->setType('text') ->setLabel($this->translator->trans( // Please localize this string with the applicable registration number type in your country. For example : "SIRET" in France and "Código fiscal" in Spain. 'Identification number', [], 'Shop.Forms.Labels' )); } //additional fields $format['company1'] = (new FormField) ->setName('company1') ->setLabel( $this->translator->trans( 'Nazwa Hodowli', [], 'Shop.Forms.Labels' ) ) ->setRequired(true) ; $format['phone'] = (new FormField) ->setName('phone') ->setLabel( $this->translator->trans( 'Phone', [], 'Shop.Forms.Labels' ) ) ->setRequired(true) ; $format['address1'] = (new FormField) ->setName('address1') ->setLabel( $this->translator->trans( 'Address', [], 'Shop.Forms.Labels' ) ) ->setRequired(true) ; $format['postcode'] = (new FormField) ->setName('postcode') ->setLabel( $this->translator->trans( 'Zip/Postal Code', [], 'Shop.Forms.Labels' ) ) ->setRequired(true) ; $format['city'] = (new FormField) ->setName('city') ->setLabel( $this->translator->trans( 'City', [], 'Shop.Forms.Labels' ) ) ->setRequired(true) ; $rodzaj_hodowli = (new FormField) ->setName('rodzaj_hodowli') ->setType('select') ->setLabel( $this->translator->trans( 'Hodowla', [], 'Shop.Forms.Labels' ) ) ->setRequired(true); $rodzaj_hodowli->addAvailableValue('koty', $this->translator->trans('Hodowla kotów',[],'Shop.Forms.Labels')); $rodzaj_hodowli->addAvailableValue('psy', $this->translator->trans('Hodowla psów',[],'Shop.Forms.Labels')); $format[$rodzaj_hodowli->getName()] = $rodzaj_hodowli; $format['rasa'] = (new FormField) ->setName('rasa') ->setLabel( $this->translator->trans( 'Hodowane rasy', [], 'Shop.Forms.Labels' ) ) ->setRequired(true); $format['wielkosc_hd']= (new FormField) ->setName('wielkosc_hd') ->setLabel( $this->translator->trans( 'Wielkość hodowli', [], 'Shop.Forms.Labels' ) ) ->setRequired(true); if ($this->ask_for_partner_optin) { $format['optin'] = (new FormField()) ->setName('optin') ->setType('checkbox') ->setLabel( $this->translator->trans( 'Receive offers from our partners', [], 'Shop.Theme.Customeraccount' ) ) ->setRequired($this->partner_optin_is_required); } Będę naprawdę wdzięczny za wszelkie pomysły jak ten temat ugryźć. Link to comment Share on other sites More sharing options...
Kundelek Posted April 30, 2020 Share Posted April 30, 2020 (edited) Kurcze, gdy tak patrzę to myślę, że ten pomysł mógłby zostać ogólnie wprowadzony. Chyba przydałoby się to każdemu. ________________________________________________________________________https://max8.pl/ Edited May 5, 2020 by Kundelek (see edit history) Link to comment Share on other sites More sharing options...
programista_presta Posted May 1, 2020 Share Posted May 1, 2020 @Kundelek jeśli masz jakieś pomysły możesz je zgłosić do twórców prestashop i na pewno uzyskasz bardziej szczegółową odpowiedź, dlaczego to wprowadzą/ nie wprowadzą https://github.com/PrestaShop/PrestaShop/issues Link to comment Share on other sites More sharing options...
dzolinar Posted May 4, 2020 Author Share Posted May 4, 2020 Widzę, że chyba mój pomysł przekracza możliwość Presty... Może w takim wypadku ktoś pomoże mi w realizacji prostszych opcji modyfikacja formularza rejestracyjnego które wpadły mi do głowy... Zakładając że nie ma możliwość dynamicznej zmiany pól może prostsza byłaby opcja gdyby po wybraniu typu konta ( z opcji select ) następowałoby przeładowanie całego formularza z polami przypisanymi tylko do wybranej opcji . Czyli po wybraniu opcji np Hodowca formularz automatycznie się przeładowuje i wyświetli dodatkowe pola takie jak Nazwa Hodowli, Adres Hodowli, Wielkość Hodowli itd... Inny pomysł, który jednak najmniej mi się podoba to stworzenie zupełnie osobnych formularzy rejestracyjnych dla poszczególnych grup klientów. Jeśli dobrze pamiętam to takie rozwiązanie było tutaj opisywane. Z góry dziękuję za pomoc Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now