Jump to content

Modyfikacja formularza rejestracyjnego - dynamiczne ukrywanie pól


dzolinar

Recommended Posts

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

spacer.png

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...