Ocena wątku:
- 0 głosów - średnia: 0
- 1
- 2
- 3
- 4
- 5
[problem] YiiFramework zdublowane ID w widgetach
|
Liczba postów: 340
Liczba wątków: 38
Dołączył: 28-04-2010
Reputacja:
15
Witam,
Na stronie głównej posiadam dwa widgety zawierające odpowiednio formularz logowania i rejestracji. Oba formularze korzystają z tego samego modelu, w którym zdefiniowane są scenariusze dla tych dwóch przypadków. Oba formularze dodawana są do widoku za pomocą metody renderPartial przez co pojawia się problem zdublowania ID dla poszczególnych pól formularza i przez to nie działa walidator compareAttribute. Czy jest jakiś prosty sposób na zmianę ID pól jednego z formularzy by nie musieć grzebać w akcjach logowania i rejestracji a tym bardziej w modelu?
Jak pomogłem daj '+'. To nie boli, a ja mam satysfakcję
Any sufficiently advanced technology is indistinguishable from magic.
Liczba postów: 2,587
Liczba wątków: 2
Dołączył: 03-04-2010
Reputacja:
58
Wrzuć coś z kodu, bo ja chyba nie ogarniam dziś, nie łapię po prostu o co biega
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Liczba postów: 340
Liczba wątków: 38
Dołączył: 28-04-2010
Reputacja:
15
16-03-2012, 00:21
(Ten post był ostatnio modyfikowany: 16-03-2012, 00:26 przez R_Rafalsky.)
Dobra to tak na szybko
Widok Login:
Kod: <?php
$form=$this->beginWidget('CActiveForm', array(
'id'=>'login_form_widget',
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
)); ?>
<div class="row">
<?php echo $form->label($model,'login'); ?>
<?php echo $form->textField($model,'login'); ?>
<?php echo $form->error($model,'login'); ?>
</div>
<div class="row">
<?php echo $form->label($model,'password2'); ?>
<?php echo $form->passwordField($model,'password2'); ?>
<?php echo $form->error($model,'password2'); ?>
</div>
<div class="row rememberMe">
<?php echo $form->checkBox($model,'rememberMe'); ?>
<?php echo $form->label($model,'rememberMe'); ?>
<?php echo $form->error($model,'rememberMe'); ?>
</div>
<div class="clear"></div>
<div class="row buttons">
<?php echo CHtml::submitButton('Zaloguj',array('id'=>'lightbox_login_submit')); ?>
</div>
<?php $this->endWidget(); ?>
Widok register
Kod: <?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'rejestracja-form',
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
)); ?>
<div class="row">
<?php echo $form->labelEx($model,'login'); ?>
<?php echo $form->textField($model,'login'); ?>
<?php echo $form->error($model,'login'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'password2'); ?>
<?php echo $form->passwordField($model,'password2'); ?>
<?php echo $form->error($model,'password2'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'password'); ?>
<?php echo $form->passwordField($model,'password'); ?>
<?php echo $form->error($model,'password'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'email'); ?>
<?php echo $form->textField($model,'email'); ?>
<span class="adnotation">E-maile nie będą ujawniane osobom trzecim</span>
<?php echo $form->error($model,'email'); ?>
</div>
<div class="accept_terms row">
<?php echo $form->checkBox($model,'accept'); ?>
<?php echo $form->labelEx($model,'accept'); ?>
<?php echo $form->error($model,'accept'); ?>
</div>
<div class="clear"></div>
<div id="register" class="row buttons">
<?php echo CHtml::submitButton('Zarejestruj',array('submit' => '/rejestracja',"id"=>"lightbox_register_submit")); ?>
</div>
</div>
<?php $this->endWidget(); ?>
Layout:
Kod: <?php
$this->renderPartial('site/login',array('model'=>$model));
?>
<?php
$this->renderPartial('site/register',array('model'=>$model));
?>
W ten sposób ID dla login i haslo są zdublowane (występują zarówno w logowaniu i rejestracji, które jednocześnie są na stronie) i powoduje błędy w JS - nie wspominam już o walidacji. Tutaj masz screen z konsoli:
http://screenshooter.net/8216679/awqscet
EDIT:
Nie chcę przerabiać żadnej z tych akcji ani nawet modelu. Jakie jest najmniej inwazyjne rozwiązanie by id w tych widgetach się różniło i poszczególne akcje mogły spokojnie walidować formularz za pomocą metod $model->attributes($_POST) i $model->validate();
W ostatniej chwili dostałem info, by logowanie i rejestracja było w formie lightboxach bez AJAXa (bo tak brzydko się ładuje a powinno być od razu) i komplikuje mi to sprawę
Jak pomogłem daj '+'. To nie boli, a ja mam satysfakcję
Any sufficiently advanced technology is indistinguishable from magic.
Liczba postów: 2,587
Liczba wątków: 2
Dołączył: 03-04-2010
Reputacja:
58
http://www.yiiframework.com/doc/api/1.1/CHtml#textField-detail
Trzeci parametr, $htmlOptions podajesz jako tablica: array('id' => 'ID POLA')
PS: id nie ma nic do walidacji po stronie serwera.
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Liczba postów: 340
Liczba wątków: 38
Dołączył: 28-04-2010
Reputacja:
15
Eh to ja mam jednak gorszy dzień  Takie głupoty porobić. Wstyd
Poza tym compare nie działało mi dlatego, gdyż było przypisane do scenariusza rejestracji, reszta waldiatorów była bez scenariusza, instancję modelu tworzyłem bez scenariusza i stąd nie miałem walidacji. Głupie błędy a pół dnia zmarnowane...
Dzięki!
Jak pomogłem daj '+'. To nie boli, a ja mam satysfakcję
Any sufficiently advanced technology is indistinguishable from magic.
|
Użytkownicy przeglądający ten wątek: 1 gości
|
|
Sponsorzy i przyjaciele
|
|
|