Quick Login Widget для расширения Yii-user
Если вы хотите отобразить форму для входа в личный кабинет не в отдельном представлении, а в любом месте на желаемой странице, то нужно создать специальный виджет. Назовём его Quick Login Widget (виджет быстрого входа)Чтобы показать этот виджет, вызываем в представлении файл этого виджета следующим кодом
<?php $this->widget('application.modules.user.widget.LoginWidget'); >
Создать папку widgets (можно и в components, кто к какой структуре привычен) в modules/user
<?php
/**
* Login widget for Yii-user
*
* Usage:
*
* <code>
* # Basic:
* $this->widget('LoginWidget');
* </code>
*
* @author Vitaliy Stepanenko <mail@vitaliy.in>
* @license BSD
* @package yii-user.widgets
* @version $Id:$
* @since File available since revision 91
*/
/**
* Login widget for Yii-user
*/
class LoginWidget extends CWidget {
/**
* List of Urls, on which this widget will be not rendered.
*
* @var array
*/
public $ignoredUrls = array(
'user/registration',
'user/login',
'user/profile'
);
/**
* Checks that current Url is not in ignore list
* @see ignoredUrls
* @return bool
*
*/
protected function isCurrentUrlAllowed()
{
if (!empty($this->ignoredUrls)) {
$route = Yii::app()->urlManager->parseUrl(Yii::app()->request);
foreach ($this->ignoredUrls as $url){
if (strpos($route,$url) === 0){
return false;
}
}
}
return true;
}
/**
* Publish widget assets
*/
protected function publishAssets()
{
if(($theme = Yii::app()->getTheme()) !== null) {
$className = str_replace('\\', '_', ltrim(get_class($this), '\\')); # Possibly namespaced class
$path = $theme->getViewPath() . DIRECTORY_SEPARATOR . $className;
if (!is_dir($path)) $path = $this->getViewPath();
}else{
$path = $this->getViewPath();
}
return Yii::app()->assetManager->publish(
$path . DIRECTORY_SEPARATOR . 'assets',
false,
-1,
YII_DEBUG
);
}
/**
* Executes the widget.
* This method is called by {@link CBaseController::endWidget}.
*/
public function run()
{
if (!$this->isCurrentUrlAllowed()) {
return;
}
$assetUrl = $this->publishAssets();
$module = Yii::app()->getModule('user'); # Call this before using any other classes from Yii-user
$model = new UserLogin; # to provide import of all needed classes in UserModule::init()
$viewName = 'loginWidgetForm';
if (Yii::app()->user->isGuest) {
if(isset($_POST['UserLogin'])){
$model->attributes = $_POST['UserLogin'];
if($model->validate()) {
//$user = $module->user();
//$user->lastvisit = time();
//$user->save();
#Not shure, that we need this code, coz redirecting can be controlled in RBAC system
//if ($actionId == 'login') Yii::app()->controller->redirect('/');
//$viewName = 'loginWidgetDone';
$controller=$this->getController();
if (Yii::app()->user->returnUrl=='/index.php')
$controller->redirect('/');
else
$controller->redirect(Yii::app()->user->returnUrl);
}
}
} else {
//$viewName = 'loginWidgetDone';
$this->redirect(Yii::app()->controller->module->returnUrl);
}
/*if (Yii::app()->user->isGuest) {
$model=new UserLogin;
// collect user input data
if(isset($_POST['UserLogin']))
{
$model->attributes=$_POST['UserLogin'];
// validate user input and redirect to previous page if valid
if($model->validate()) {
$this->lastViset();
if (Yii::app()->user->returnUrl=='/index.php')
$this->redirect(Yii::app()->controller->module->returnUrl);
else
$this->redirect(Yii::app()->user->returnUrl);
}
}
// display the login form
$this->render('/user/login',array('model'=>$model));
} else
$this->redirect(Yii::app()->controller->module->returnUrl);
*/
$this->render($viewName,array(
'model' => $model,
'user' => $module->user(),
'assetUrl' => $assetUrl,
'module' => $module,
));
}
}
В папке modules/user/views файл loginWidgetDone.php
<?php
Yii::app()->clientScript
->registerCssFile( $assetUrl . '/userLogin.css' )
->registerScriptFile( $assetUrl . '/userLogin.js' )
?>
<div class="login">
<div class="row">
<?php echo UserModule::t('Hello, {username}!',array('{username}'=>CHtml::link($user->username,$module->profileUrl)))?><br>
<?php echo CHtml::link(UserModule::t('Logout'),$module->logoutUrl)?>
</div>
</div>
и файл loginWidgetForm.php (у меня добавлено своё оформление)
<?php
Yii::app()->clientScript
->registerCssFile( $assetUrl . '/userLogin.css' )
->registerScriptFile( $assetUrl . '/userLogin.js' )
?>
<div class="login form">
<div id="harrisNewsHeader">
<div id="HarrisNews">
<h3><?php echo UserModule::t("Login"); ?></h3>
<?php if(Yii::app()->user->hasFlash('loginMessage')): ?>
<div class="success"><?php echo Yii::app()->user->getFlash('loginMessage'); ?></div>
<?php endif; ?>
<?php echo CHtml::beginForm(); ?>
<div class="row">
<?php echo CHtml::activeLabelEx($model,'username'),
CHtml::activeTextField($model,'username'),
CHtml::error($model,'username') ?>
</div>
<div class="row">
<?php echo CHtml::activeLabelEx($model,'password'),
CHtml::activePasswordField($model,'password'),
CHtml::error($model,'password') ?>
</div>
<div class="row">
<p class="hint">
<?php echo CHtml::link(UserModule::t("Register"),Yii::app()->getModule('user')->registrationUrl); ?> | <?php echo CHtml::link(UserModule::t("Lost Password?"),Yii::app()->getModule('user')->recoveryUrl); ?>
</p>
</div>
<div class="row rememberMe">
<?php echo CHtml::activeCheckBox($model,'rememberMe'); ?>
<?php echo CHtml::activeLabelEx($model,'rememberMe'); ?>
</div>
<div class="row submit">
<?php echo CHtml::submitButton(UserModule::t("Login")); ?>
</div>
<?php echo CHtml::endForm(); ?>
</div>
<div id="HarrisNewsFooter"></div>
</div>
</div>
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Вы можете почитать все статьи от almix'а.
- 14 Разработка приложения на Yii. Урок 14: Выводим список категорий как новый виджет на сайте (29.04.2015)
- 13 Разработка приложения на Yii. Урок 13: Внедряем категории для статей. (29.04.2015)
- 12 Разработка приложения на Yii. Урок 12: Профилирование приложения, включаем кеширование. (20.01.2015)
- 11 Yiico. Видеокурс по разработке сайта на Yii. Урок 11: Отладка приложения, включаем журналирование. (20.01.2015)
- 10 Yiico. Видеокурс по разработке сайта на Yii. Урок 10: Если ваше приложение находится не в корневой папке, а во вложенной. (19.10.2014)
- 9 Разработка сайта на Yii с нуля. Урок 9. Выборка статей определённого автора. (13.08.2014)
- 8 Разработка сайта на Yii с нуля. Урок 8. Вызов в моделях функции, общей для них. Как избегать дублирования кода? (25.07.2014)
- 7 Разработка сайта на Yii с нуля. Урок 7. Изменение количества выводимых записей на странице в CGridView. Включаем сессии Yii. (04.09.2013)
- 6 Разработка сайта на Yii с нуля. Урок 6. Автоматич. отправка оповещений об одобренных комментариях на email автора комментария (11.08.2013)
- 5 Разработка сайта на Yii с нуля. Урок 5. Переименовываем blog в yiico. Изменяем "Home" в breadcrumbs. Включаем Gzip-сжатие. (09.08.2013)
- 4 Курс по Yii с нуля. Урок 4. Дорабатываем простую работу с пользователями: хранение пароля при редактировании пользователя. (13.04.2013)
- 3 Курс по Yii с нуля. Урок 3. Создаём новых пользователей. Организуем простую систему авторизации. Аутентификация, пароли, соли. (20.07.2014)
- 2 Yii + Git (github) на Mac. (24.03.2013)
- 2 Курс по Yii с нуля. Урок 2. Переносим и настраиваем Yii и проект нашего сайта на рабочем сервере. Избавляемся от index.php в url (09.07.2014)
- 1 Курс по Yii с нуля. Урок 1. Устанавливаем Yii на локальном компьютере. Заводим проект будущего сайта. (10.03.2013)
- 0 Composer – пакетный менеджер PHP. Что и как? (22.07.2014)
- 0 MySQL: проверить содержится ли значение в поле столбца (в столбце хранится строка значений через запятую) (22.05.2014)
- 0 Yii: Статичные страницы (создание, редактирование, удаление) (28.04.2014)
- 0 Yii: Расширение ECKEditor = Связка ckeditor + kcfinder (визуальный редактор с бесплатным файловым менеджером) (28.04.2014)
- 0 Yii: Bootstrap tabs, делаем активной вкладку на которую выполняется переход по ссылке (20.03.2014)
- 0 Yii: Доступ к атрибуту модели из файла шаблона (Вызов в шаблоне какого-либо атрибута модели). (17.02.2014)
- 0 Yii: Множественный автокомплит с помощью CJuiAutoComplete (автокомплит нескольких значений в одно поле) (07.02.2014)
- 0 Yii: Фотогалерея через поведение (доработка расширения imagesgallerymanager) (08.03.2016)
- 0 Yii: Установка и настройка Yii-app заготовки приложения от Crisu83 (09.03.2014)
- 0 Twitter Bootstrap Carousel Crossfade (09.09.2013)


