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