Problém s PersonFormControl – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s PersonFormControl – PHP – Fórum – Programujte.comProblém s PersonFormControl – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
jAkErCZ0
Stálý člen
23. 11. 2017   #1
-
0
-

Zdravím,

Mám takový problém a to dle jednoho seriálu z portálu itnetwork jsi dělám e-shop postaveny na nette ale narazil jsem nq problém v dílu 34

Kde


 
/** * Vytváří a vrací komponentu formuláře pro správu osoby. * @return Form formulář pro správu osoby */ protected function createComponentPersonForm() { $countries = $this->personManager->getCountries(); $form = $this->formFactory->create(); // Registrace. if (!$this->getUser()->isLoggedIn()) { $form->addCheckbox('create_account', 'Vytvořit zákaznický účet')->setHtmlId('create_account'); $form->addGroup('Zákaznický účet')->setOption('id', 'create-account-controls'); $form->addPassword('password', 'Heslo') ->setAttribute('title', 'Zadejte heslo alespoň na 6 znaků.') ->addConditionOn($form['create_account'], Form::EQUAL, true) ->setRequired() ->addRule(Form::PATTERN, 'Heslo nesmí obsahovat diakritiku a musí být dlouhé alespoň 6 znaků.', '.{6,}'); $form->addPassword('password_repeat', 'Heslo znovu') ->setOmitted() ->setAttribute('title', 'Zadejte heslo alespoň na 6 znaků.') ->addRule(Form::EQUAL, 'Hesla nesouhlasí.', $form['password']); } // Detail. $form->addGroup('Osoba'); $personDetail = $form->addContainer('person_detail'); $personDetail->addText('email', 'Email')->setType('email')->addRule(Form::EMAIL)->setRequired(); $firstName = $personDetail->addText('first_name', 'Jméno'); $lastName = $personDetail->addText('last_name', 'Příjmení'); $personDetail->addText('company_name', 'Společnost'); $firstName->addConditionOn($personDetail['company_name'], Form::BLANK)->setRequired() ->elseCondition()->addRule(Form::BLANK, 'Osoba může být fyzická (Jméno a Příjmení), nebo právnická (Společnost).'); $lastName->addConditionOn($personDetail['company_name'], Form::BLANK)->setRequired() ->elseCondition()->addRule(Form::BLANK, 'Osoba může být fyzická (Jméno a Příjmení), nebo právnická (Společnost).'); $personDetail->addText('identification_number', 'IČ')->setType('number') ->addCondition(Form::FILLED)->addRule(Form::INTEGER); $personDetail->addText('tax_number', 'DIČ'); // Kontaktní údaje - součástí detailu. $personDetail->setCurrentGroup($form->addGroup('Kontaktní údaje')); $personDetail->addText('phone', 'Telefon'); $personDetail->addText('fax', 'Fax'); // Adresa. $form->addGroup('Adresa'); $address = $form->addContainer('address'); $address->addText('street', 'Ulice'); $address->addText('registry_number', 'Číslo popisné')->setRequired(); $address->addText('house_number', 'Číslo orientační'); $address->addText('city', 'Město')->setRequired(); $address->addText('zip', 'PSČ')->setRequired(); $address->addSelect('country_id', 'Stát', $countries)->setRequired(); // Checkbox pro možnost buď vyplnit nebo nevyplnit dodací adresu. $form->addCheckbox('omit_delivery_address', 'Dodací adresa se shoduje s fakturační') ->setValue(true)->setHtmlId('omit_delivery_address'); // Dodací adresa. $form->addGroup('Doručovací adresa')->setOption('id', 'delivery-address-controls'); $deliveryAddress = $form->addContainer('delivery_address'); $deliveryAddress->addText('street', 'Ulice'); $deliveryAddress->addText('registry_number', 'Číslo popisné') ->addConditionOn($form['omit_delivery_address'], Form::EQUAL, false)->setRequired(); $deliveryAddress->addText('house_number', 'Číslo orientační'); $deliveryAddress->addText('city', 'Město') ->addConditionOn($form['omit_delivery_address'], Form::EQUAL, false)->setRequired(); $deliveryAddress->addText('zip', 'PSČ') ->addConditionOn($form['omit_delivery_address'], Form::EQUAL, false)->setRequired(); $deliveryAddress->addSelect('country_id', 'Stát', $countries) ->addConditionOn($form['omit_delivery_address'], Form::EQUAL, false)->setRequired(); if ($this->getUser()->isLoggedIn()) { if ($this->getUser()->isInRole('admin')) { // Bankovní údaje, pokud je uživatel administrátor. $form->addGroup('Platební údaje'); $bankAccount = $form->addContainer('bank_account'); $bankAccount->addText('bank_code', 'Kód banky')->setType('number') ->addCondition(Form::FILLED)->addRule(Form::INTEGER); $bankAccount->addText('account_number', 'Číslo účtu')->setType('number') ->addCondition(Form::FILLED)->addRule(Form::INTEGER); $bankAccount->addTextArea('registry_entry', 'Spisová značka'); } $form->setCurrentGroup(); $form->addSubmit('send', 'Odeslat'); } else { // Pokud uživatel není přihlášen, tak ještě doplníme antispam podle aktuálního roku. $form->setCurrentGroup(); $form->addText('y', 'Zadej aktuální rok')->setType('number')->setRequired() ->setOmitted()->addRule(Form::INTEGER) ->addRule(Form::EQUAL, 'Špatně vyplněný antispam.', date("Y")); $form->addSubmit('register', 'Registrovat'); } $form->onSuccess[] = [$this, 'processForm']; return $form;

Funkce register která se vola v objednávce

<?php /** Registrace nové osoby během dokončení objednávky. */ public function actionRegister() { // Doplníme vlastní zpracování k úspěšnému odeslání formuláře pro správu osob. $this['personForm']->onSuccess[] = function (Form $form, ArrayHash $values) { if (isset($values->user_id)) $this->flashMessage('Byl jste úspěšně registrován.', self::MSG_SUCCESS); try { $this->orderManager->setPerson($values->person_id); } catch (InvalidArgumentException $ex) { $this->flashMessage('Nepodařilo se vytvořit osobu se zadanými údaji.', self::MSG_ERROR); } $this->redirect('this'); // Později zde budeme přesměrovávat na pokračování v nákupu. }; } ?>

**register()

Metodu zavoláme ve chvíli, kdy neregistrovaný uživatel dorazí do fáze objednávky, kdy má zadat své kontaktní údaje. Tehdy mu chceme nabídnout možnost vytvořit uživatelský účet, ale využít ji nemusí.**

Kde si uživatel má vyplnit své údaje a přejít na platební metody… Problém je ten že pokud dotyčný nevyplní heslo přes registraci na další krok nepřejde i když v seriálu je řečeno že uživatel se může a nemusí registrovat tak v tomto případě to nefunguje ale jakmile se heslo doplní tak už to vše šlape jak má…

Nevíte někdo jak mohu opravit to aby uživatel mohl zakoupit zboží aniž by se musel registrovat tak jak je napsáno v seriálu.

Díky moc všem za pomoc

Nahlásit jako SPAM
IP: 37.188.144.–
weroro0
Návštěvník
23. 11. 2017   #2
-
0
-

Obal to do značky "Zdrojový kód". Kto to tu má po tebe čítať?

Nahlásit jako SPAM
IP: 91.235.54.–
Javascript (ES5, ES6+) / Typescript Developer, Vanilla Front-end ninja, HTML, CSS specialist

Hlúpa otázka vzniká ako reakcia na nedostatok relevantných informácií.
jAkErCZ0
Stálý člen
23. 11. 2017   #3
-
0
-

Omlouvám se za styl ale píší to z mobilního telefonu kde to moc nefunguje ten editor.

Děkuji za pochopení

P.S pokud je tu moderátor byl bych rad kdyby mi to upravil ať to vypadá lépe k přečtení

Děkuji

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 37.188.144.–
peter
~ Anonymní uživatel
4014 příspěvků
23. 11. 2017   #4
-
0
-

   

<?php
/** Registrace nové osoby během dokončení objednávky. */
public function actionRegister() {
// Doplníme vlastní zpracování k úspěšnému odeslání formuláře pro správu osob. $this['personForm']->onSuccess[] = function (Form $form, ArrayHash $values) {
	if (isset($values->user_id)) $this->flashMessage('Byl jste úspěšně registrován.', self:: MSG_SUCCESS);
try {
	$this->orderManager->setPerson($values->person_id);
}
catch (InvalidArgumentException $ex) {
	$this->flashMessage('Nepodařilo se vytvořit osobu se zadanými údaji.', self:: MSG_ERROR);
}
	$this->redirect('this');
	// Později zde budeme přesměrovávat na pokračování v nákupu.
}
	;
}
Nahlásit jako SPAM
IP: 2001:718:2601:258:b01b:ab...–
peter
~ Anonymní uživatel
4014 příspěvků
23. 11. 2017   #5
-
0
-

ok, verze 2, pspad tam nezformatoval ten radek v komentari.  

<?php
/** Registrace nové osoby během dokončení objednávky. */
public function actionRegister() {
// Doplníme vlastní zpracování k úspěšnému odeslání formuláře pro správu osob. 
        $this['personForm']->onSuccess[] = function (Form $form, ArrayHash $values) {
	if (isset($values->user_id)) $this->flashMessage('Byl jste úspěšně registrován.', self:: MSG_SUCCESS);
try {
	$this->orderManager->setPerson($values->person_id);
}
catch (InvalidArgumentException $ex) {
	$this->flashMessage('Nepodařilo se vytvořit osobu se zadanými údaji.', self:: MSG_ERROR);
}
	$this->redirect('this');
	// Později zde budeme přesměrovávat na pokračování v nákupu.
}
	;
}
Nahlásit jako SPAM
IP: 2001:718:2601:258:b01b:ab...–
jAkErCZ0
Stálý člen
23. 11. 2017   #6
-
0
-

#5 peter

Budu hádat že si mi to jen přehodil do čitelnější verze že?

Nebo si našel čím to je?


 

Nahlásit jako SPAM
IP: 37.188.144.–
peter
~ Anonymní uživatel
4014 příspěvků
23. 11. 2017   #7
-
0
-

A mimochodem, ta funkce resi registraci, pokud je zadane $values->user_id. Nic s paswordem ho nezajima. Myslim si, ze nebude pouzitelna. Treba napsat nejaky kod tam, kde ji volas.
 

Nahlásit jako SPAM
IP: 2001:718:2601:258:b01b:ab...–
peter
~ Anonymní uživatel
4014 příspěvků
23. 11. 2017   #8
-
0
-

jAkErCZ - jj, hadas spravne. Pustil jsem si pspad, zkopiroval tvuj text, nasel v menu preformatovat jako strukturovany css, zkopiroval, klikl na forku na tlacitko '<?', vlozil, klikl vlozit, klikl odeslat :) Mohl jsi to udelat sam v dalsi zpravicce. Na to neni treba moderatora. Stejne je dost obtizne nejakeho najit :)

Nahlásit jako SPAM
IP: 2001:718:2601:258:b01b:ab...–
jAkErCZ0
Stálý člen
23. 11. 2017   #9
-
0
-

#8 peter

Ale ja to posílal přes mobil :D tam nic takového nemám jinak přes PC to je easy...

Tak jsem zvědav zda-li to dam do kupy jelikož jsou zákazníci kteří se proste nechtějí registrovat ale můj system to vyžaduje i kdyz podle dokumentace k němu to ma jít ať uz se regne nebo neřekne.

Nahlásit jako SPAM
IP: 37.188.144.–
peter
~ Anonymní uživatel
4014 příspěvků
23. 11. 2017   #10
-
0
-

Zkusim ti popsat, co to presne dela 

function actionRegister() {
   $form->onSuccess[] = function...
   }

Nic vic ten kousek kodu nedela. Co dela ta funkce neni vubec podstatne, protoze ta se nejspis spousti, az kdyz je vse success. Cili tahle udalost nastava az po tom, co chces zmenit.

Nahlásit jako SPAM
IP: 2001:718:2601:258:b01b:ab...–
peter
~ Anonymní uživatel
4014 příspěvků
23. 11. 2017   #11
-
0
-

Tak si tam muzes registrovat guesty a zakaznika prihlasit na neprihlaseneho guesta. Ale musi se to napsat do kodu nekde driv.
Nebo, jeste je tu moznost, ze ti forko cast kodu odmazalo. Tak to mozna ulozit na jsfiddle.net. On sice bude pindat, ze to neni javascript, ale snad nic nesmaze :)
 

Nahlásit jako SPAM
IP: 2001:718:2601:258:b01b:ab...–
jAkErCZ0
Stálý člen
23. 11. 2017   #12
-
0
-

#10 peter

Jenže tam jde o to ze kdyz dojde zákazník do fáze kdy ma vyplnit své údaje pro obědnávku ma možnost se zároveň i registrovat a to tak ze klikne na checkbox a vyjede mu možnost zadat heslo to kdyz udělám tak vše funguje bez problému ale pokud se proste nechci registrovat tak na checkbox neklidní díky tomu se mi tam heslo nezobrazí ale kdyz kliknu jít dal tak se nic nestane a nechce me to pustit jelikož mi přijde jakoby to čekalo a chtělo abych to heslo zadal chápeš?

Nahlásit jako SPAM
IP: 37.188.144.–
Řešení
jAkErCZ0
Stálý člen
23. 11. 2017   #13
-
0
-
Vyřešeno Nejlepší odpověď

Opraveno... 

Starý kód

      // Registrace.
        if (!$this->getUser()->isLoggedIn()) {
            $form->addCheckbox('create_account', 'Vytvořit zákaznický účet')->setHtmlId('create_account');
            $form->addGroup('Zákaznický účet')->setOption('id', 'create-account-controls');
            $form->addPassword('password', 'Heslo')
                    ->setAttribute('class', 'form-control required')
                    ->setAttribute('title', 'Zadejte heslo alespoň na 6 znaků.')
                    ->addConditionOn($form['create_account'], Form::EQUAL, true)
                    ->setRequired()
                    ->addRule(Form::PATTERN, 'Heslo nesmí obsahovat diakritiku a musí být dlouhé alespoň 6 znaků.', '.{6,}');
            $form->addPassword('password_repeat', 'Heslo znovu')
                    ->setAttribute('class', 'form-control required')
                    ->setAttribute('title', 'Zadejte heslo alespoň na 6 znaků.')
                    ->setRequired()
                    ->setOmitted()                  
                    ->addRule(Form::EQUAL, 'Hesla nesouhlasí.', $form['password']);
        }

Nový kód

      // Registrace.
        if (!$this->getUser()->isLoggedIn()) {
            $form->addCheckbox('create_account', 'Vytvořit zákaznický účet')->setHtmlId('create_account');
            $form->addGroup('Zákaznický účet')->setOption('id', 'create-account-controls');
            $form->addPassword('password', 'Heslo')
                    ->setAttribute('class', 'form-control required')
                    ->setAttribute('title', 'Zadejte heslo alespoň na 6 znaků.')
                    ->addConditionOn($form['create_account'], Form::EQUAL, true)
                    ->setRequired()
                    ->endCondition()
                    ->addCondition(Form::FILLED)
                    ->addRule(Form::PATTERN, 'Heslo nesmí obsahovat diakritiku a musí být dlouhé alespoň 6 znaků.', '.{6,}');
            $form->addPassword('password_repeat', 'Heslo znovu')
                    ->setAttribute('class', 'form-control required')
                    ->setAttribute('title', 'Zadejte heslo alespoň na 6 znaků.')
                    ->addConditionOn($form['create_account'], Form::EQUAL, true)
                    ->setRequired()
                    ->endCondition()                    
                    ->addCondition(Form::FILLED)                   
                    ->addRule(Form::EQUAL, 'Hesla nesouhlasí.', $form['password']);
        }

Do form přidány podmínky

->setRequired()
->endCondition()                    
->addCondition(Form::FILLED) 

Díky nim je teď registrace na zákazníkovy zda-li se chce registrovat nebo si jen objednat zboží.

Nahlásit jako SPAM
IP: 94.112.128.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Podobná vlákna

Problem — založil Ghosta

Problém — založil pali6

Problém v C — založil Robin

Problem s C++ — založil ower

Problem — založil jurec

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý