[Noob] Wrzucić Logowanie Na Główną Stronę

Witam,

O ile wykonanie samej podstrony z logowaniem nie stanowi jakiegoś mega wyzwania dla mnie z wykorzystaniem CActiveForm o tyle umieszczenie tego wszystkiego na jednej stronie w layoucie juz stanowi problem i nie wiem jak to ugryźć.

Utworzyłem layout




<html>

	<head>

		<?php

			Yii::app()->clientScript->registerPackage('css-strona');

		?>

	</head>

	<body>

		<div id="strona">

			<div id="naglowek" class="srodek">

				<div id="logowanie">

				<?php

					if (Yii::app()->user->isGuest){

						echo 'gosc';

					} else {

						echo 'zalogowany';

					}

				?>

				</div>

			</div>

			<div id="tresc" class="srodek">

				<?php echo $content; ?>

			</div>

			<div id="stopka" class="srodek">

			</div>

		</div>

	</body>

</html>



Layout jest bardzo prosty, jednak nic wiecej nie potrzebuję. W div#logowanie chciałbym umieścić okienka login/haslo i z normalnego punktu widzenia to nie jest problem pare razy echo kilka tekstow w czystym html i formularz utworzę. Jednak chcę wykorzystać dobrodziejstwo Yii i utworzyć CActiveForm, który będzie generowany(?) na podstawie modelu formlogin. I tutaj się gubię - normalnie dziecko we mgle.

Opierając się o te informacje, próbuję to wykombinować, jednak juz ja nie wiem czy ja za dużo chcę czy za dużo nie umiem.

Jesteście genialni !! :)

odpowiedzią jest $this->renderPartial(); - chyba, że się mylę to z chęcią zapoznam się z innymi pomysłami

To rozwiązanie jest na wpół. Nie chce działać walidacja po stronie klienta - nie ładuje się :(

Zamiast szydzić wrzuć lepiej kod widoku, który chcesz renderować za pomocą renderPartial (choć możesz też wyświetlić formularz najzwyczajniej w świecie za pomocą echo). Nikt tu nie ma szklanej kuli i nie wywróży co napisałeś, że nie działa walidacja.

Czy przeczytałeś dokumentacje CActiveForm i uruchomiłeś walidację po stronie klienta, tak jak w przykładzie?

Czy w konsoli Javascript masz jakieś błędy?

Wróć, wróć. Z całym szacunkiem jednakże tekst o genialności miał nieść przesłanie "jesteście tak świetnie pomocni, iż samo wyżalenie się z mojej bezsilności przyniosło mi rozwiązanie". Naprawdę nie miałem nikogo obrażać czy też szydzić.

Odnośnie mojego problemu to JS nawet się sam nie dodał jak to jest w przypadku “gotowej stronki pokazowej”. Okazuje się, że poza ustawieniem CActiveForm “‘enableClientValidation’=>true,” należy dorzucić “echo $form->error($model, ‘login’);” aby automagicznie kod JS odpowiedzialny za sprawdzanie wprowadzanych danych został wygenerowany.

Zatem raz jeszcze przepraszam tych co się poczuli urażeni - nie miałem takiego zamiaru. Problem się rozwiazał

I kod odpowiedzialny za widok




<?php

	$form = $form = $this->beginWidget('CActiveForm', array(

		'id'=>'formLogowanie',

		'action' => '/strona/logowanie',

		'enableClientValidation'=>true,

		'clientOptions'=>array(

			'validateOnSubmit'=>true,

			'validateOnChange' => true,

			'hideErrorMessage' => true,

		),

	));?>

		<div id="login">

			<?php	

				echo $form->label($model, 'login'); 

				echo $form->textField($model, 'login');

				echo $form->error($model, 'login');

				echo ' ';

			?>

		</div>

		<div id="haslo">

			<?php

				echo $form->label($model, 'haslo');

				echo $form->passwordField($model, 'haslo');

				echo $form->error($model, 'haslo');

				echo ' ';

			?>

		</div>

			<?php

				echo CHtml::submitButton('zaloguj');

				$this->endWidget();

			?>