Odoslanie formulára s adresou up?mode=register po odsúhlasení podmienok ako na to?
- SontoEremo
- Člen | 341
Zdravím páni a dámy…
Mám SignPresenter
v ktorom mám toto
<?php
namespace ForumModule;
use Nette\Application\UI\Form;
use Nette\Utils\Html;
class SignPresenter extends \BasePresenter
{
/** @persistent */
public $backlink = '';
protected function createComponentSignUpForm()
{
$SignUp_form = new Form();
$SignUp_form->addText('username', 'Username');
$SignUp_form->addSubmit('signUp', 'Register');
$SignUp_form->onSuccess[] = callback($this, 'SignUpFormSuccessSubmited');
return $SignUp_form;
}
public function SignUpFormSuccessSubmited(Form $SignUp_form)
{
// ....
}
protected function createComponentAgreeSubmitedForm()
{
$Agree_form = new Form;
$Agree_form->addSubmit('agreed', 'I agree to these terms');
$Agree_form->addSubmit('not_agreed', 'I do not agree to these terms');
$Agree_form->onValidate[] = $this->AgreeSuccessAccepted;
return $Agree_form;
}
public function AgreeSuccessAccepted(Form $Agree_form)
{
if($Agree_form['agreed']->isSubmittedBy())
{
$this->redirect('up', array('mode' => 'register'));
}elseif($Agree_form['not_agreed']->isSubmittedBy()) {
$this->redirect('Index:');
}
}
}
a potom dve šablóny jedna je up.latte kde sú definované
podmienky a druhá je register.latte v ktorom je
formulár, potreboval by som aby po kliknutí agreed bol presmerovaný
na formulár register.latte kde adresa by bola http:// …
/up?mode=register lenže adresa i keď sa zobrazí nepresmeruje sa na
formulár ale ostane to na up.latte viem, že to ide aj normálne proste po
kliknutí redirectnúť ale ja potrebujem aby boli najprv odsúhlasené
podmienky až potom by bolo možné zobraziť formulár.
Nejaké nápady?
ďakujem vopred všetkým.
- David Matějka
- Moderator | 6445
proc tam resis nejaky mode? snad to register je akce, ne?
takze $this->redirect('register')
- SontoEremo
- Člen | 341
Dobre ďakujem ale predsa sa opítam ako teda poriešiť aby sa užívateľ
dostal na formulár až po prijatí podmienok? niečo ako ma phpbb3 najprv
súhlas a až potom formulár a ak zadá aj adresu …/ucp?mode=register tak
vždy naň vybehne potvrdenie podmienok a ja potrebujem ak zadá adresu
…/sign/register aby ho to hodilo späť na …/sign/up kde odsúhlasí
podmienky.
Teraz ak príde na …/sign/up je tam formulár pre súhlas s podmienkami ak
ich odsúhlasi tak ho to hodí na formulár čiže na …/sign/register a ak
s nimi nesúhlasi tak späť na hlavnú stránku, lenže neviem ako zadať opak
čiže vždy aby najprv boli podmienky a až potom formulár.
- SontoEremo
- Člen | 341
Pokúšal som sa o niečo takéto ale skončíto chybou:
Stránku sa nepodarilo správne presmerovať
Firefox zistil, že server smeruje požiadavku tejto stránky spôsobom, ktorým sa presmerovanie nikdy neukončí.
<?php
namespace ForumModule;
use Nette\Application\UI\Form;
use Nette\Utils\Html;
class SignPresenter extends \BasePresenter
{
/** @persistent */
public $backlink = '';
public $Agree_form = 'Agree_form';
public function startUp()
{
parent::startUp();
if(!$this->session->getSection($this->Agree_form))
{
$this->redirect('register');
} else {
$this->redirect('up');
}
}
protected function createComponentSignUpForm($name)
{
$SignUp_form = new Form($this, $name);
$SignUp_form->addText('username', 'Username');
$SignUp_form->addSubmit('signUp', 'Register');
$SignUp_form->onSuccess[] = callback($this, 'SignUpFormSuccessSubmited');
return $SignUp_form;
}
public function SignUpFormSuccessSubmited(Form $SignUp_form)
{
// ....
}
protected function createComponentAgreeSubmitedForm()
{
$Agree_form = new Form;
$Agree_form->addSubmit('agreed', 'I agree to these terms');
$Agree_form->addSubmit('not_agreed', 'I do not agree to these terms');
$Agree_form->onValidate[] = $this->AgreeSuccessAccepted;
return $Agree_form;
}
public function AgreeSuccessAccepted(Form $Agree_form)
{
if($Agree_form['agreed']->isSubmittedBy())
{
$this->redirect('register');
} elseif($Agree_form['not_agreed']->isSubmittedBy()) {
$this->redirect('Index:');
}
}
}
- David Matějka
- Moderator | 6445
ty se divis, ze se to porad presmerovava?
if(!$this->session->getSection($this->Agree_form))
{
$this->redirect('register');
} else {
$this->redirect('up');
}
- SontoEremo
- Člen | 341
Milo napsal(a):
Bijou se Ti routy Nette a redirect Apache. Tohle se stane, když máš v Apache nastaveno „vše přesměruj na SSL“ a routy SSL nejsou.
Sorry ale nepochopil som nič :)
môj router:
<?php
use Nette\Application\Routers\RouteList,
Nette\Application\Routers\Route,
Nette\Application\Routers\SimpleRouter;
/**
* Router factory.
*/
class RouterFactory
{
/**
* @return Nette\Application\IRouter
*/
public function createRouter()
{
$router = new RouteList();
$router[] = new Route('index.php', 'Forum:Index:default', Route::ONE_WAY);
$router[] = new Route('admin/<presenter>/<action>[/<id>]', array(
'module' => 'Admin',
'presenter' => 'Index',
'action' => 'default',
'id' => NULL,
));
$router[] = new Route('forum/<presenter>/<action>[/<id>]', array(
'module' => 'Forum',
'presenter' => 'Index',
'action' => 'default',
'id' => NULL,
));
$router[] = new Route('<presenter>/<action>[/<id>]', 'Forum:Index:default');
return $router;
}
}
**a teraz som na Locale kde mám nastavené v httpd.conf **
#Listen 0.0.0.0:80
#Listen [::]:80
Listen 80
- David Matějka
- Moderator | 6445
router ani apache za to nemuze, muze za to ten startup(), viz muj predchozi prispevek
- SontoEremo
- Člen | 341
matej21 napsal(a):
router ani apache za to nemuze, muze za to ten startup(), viz muj predchozi prispevek
Sorry nevšimol som ho…
No hej ale ako teda poriešiť to session? nie je tak, že čo je
v startUp()-u tak sa vykonáva ako prvé?
Takže som si myslel, keďže chcem najprv zistiť či bolo odsúhlasené alebo
nie a až potom presmerovávať.
- SontoEremo
- Člen | 341
public $Agree_form;
public function actionAgreed()
{
if($this->session->getSection($this->Agree_form['agreed']))
{
$this->redirect('register');
} else {
$this->redirect('up');
}
}
Nič sa nedeje a dá sa bez problémov prejsť na register
- besanek
- Člen | 128
Však máš Register a Up, ne? Kde jsi vzal Agreed? Navíc tu session ani nikde nenastavuješ.
Možná by se chtělo trochu zamyslet, než začneš střílet od boku otázky.
// ...
$this->getSession('signup')->agreed = true; // Když uživatel klikl na souhlasím
// ...
public function actionRegister()
{
if( $this->getSession('signup')->agreed !== true ) {
$this->redirect('up');
}
}
- SontoEremo
- Člen | 341
besanek napsal(a):
Však máš Register a Up, ne? Kde jsi vzal Agreed? Navíc tu session ani nikde nenastavuješ.
Možná by se chtělo trochu zamyslet, než začneš střílet od boku otázky.
// ... $this->getSession('signup')->agreed = true; // Když uživatel klikl na souhlasím // ... public function actionRegister() { if( $this->getSession('signup')->agreed !== true ) { $this->redirect('up'); } }
Ďakujem veľmi pekne a ospravedlňujem sa ale i tak tvoj kód ma nepustí
ďalej i keď sa s podmienkami odsúhlasi čiže ostane to na ../sign/up ale
na druhej strane ak zadám ../sign/register tak ma to redirectne na podmienky
ale tam to aj ostane
Ale aj tak ďakujem veľmi pekne.
- besanek
- Člen | 128
To přesměrování tam budeš muset nechat. Jinak Nette těžko zjistí, že má zobrazit něco jiného. :)
Jinak v tomhle případě bych i zapřemýšlel, jestli metoda AgreeSuccessAccepted() není trochu zbytečná, když jen zjistí na jaké tlačítko se kliklo a provede přesměrování. Nástřel továrničky formuláře bez ní.
protected function createComponentAgreeSubmitedForm()
{
$that = $this; //PHP 5.3.* workaround
$form = new Form;
$form->addSubmit('agreed', 'I agree to these terms')->onClick[] = function () use ( $that ) {
$that->getSession('signup')->agreed = true;
$that->redirect('register');
};
$form->addSubmit('not_agreed', 'I do not agree to these terms')->onClick[] = function () use ( $that ) {
$that->redirect('Index:');
};
return $form;
}