Улучшаем панель управления пользователя [готовое решение]
Добавлено: 23 май 2013, 17:20
Признаюсь честно, первый раз попав в панель управления в качестве пользователя, я заблудился... в трех соснах... и во второй раз тоже...
Дабы не смущать пользователей, было решено кое-что поправить. Заодно убрать оттуда форму поиска.
Вот что у меня получилось:
Теперь пара слов о том каким образом это было сделано.
Прежде всего был написан отдельный лайаут для панели (см. вложение) с кнопками.
Кнопки "платежи" и "пополнить баланс" не будут видны в бесплатной версии.
Форма поиска, для повышения гибкости системы, также вынесена в отдельный файл.
Затем были убраны некоторые, уже ставшие лишними, ссылки в самих представлениях.
Главная страница панели была разбита по вкладкам.
Как сделать:
1. Копируем файл usercpanel.php в папку \protected\views\layouts
2. Подключаем этот лайаут.
открываем \protected\modules\usercpanel\controllers\MainController.php и в начале файла после
добавляем функцию init:
аналогичным образом поступаем с файлом \protected\modules\userads\controllers\MainController.php. Здесь перед
добавляем:
3. Заменяем файл \protected\modules\usercpanel\views\index.php на файл из архива
4. Убираем лишние ссылки.
в файле \protected\modules\userads\views\create.php убираем или комментируем код
в файле \protected\modules\userads\views\update.php ищем и убираем строчку
5. Добавляем классы.
файл \protected\modules\userads\views\index.php
меняем на:
файл \protected\modules\userads\views\update.php
меняем на:
6. Добавляем в \css\styles.css:
Если для кнопок нужно применить полностью свои стили, то в начале usercpanel.php лучше убрать строчку.
Не забудьте перевести надпись "Your profile" в управлении переводами.
Данный пример требует передачи модели пользователя в лайаут (распространяется только на платный модуль "payment"),
поэтому владельцам платных версий могу предложить раскомментировать первую строчку в начале файла usercpanel.php из архива.
Возможно, это не очень правильно с точки зрения экономии ресурсов, но:
1. естественно, используемые в панели управления модели User и UserAds - разные, а для общей менюхи нужна только модель User (поэтому использование виджета в качестве решения также не должно дать положительных результатов);
2. Yii вообще не передает модель в layout, что вполне логично.
Надеюсь, разработчики подскажут более красивое решение данного вопроса без переписывания модулей.
В бесплатной версии, модели в лайауте не нужны, поэтому все работает без такой модификации.
Дабы не смущать пользователей, было решено кое-что поправить. Заодно убрать оттуда форму поиска.
Вот что у меня получилось:
Теперь пара слов о том каким образом это было сделано.
Прежде всего был написан отдельный лайаут для панели (см. вложение) с кнопками.
Кнопки "платежи" и "пополнить баланс" не будут видны в бесплатной версии.
Форма поиска, для повышения гибкости системы, также вынесена в отдельный файл.
Затем были убраны некоторые, уже ставшие лишними, ссылки в самих представлениях.
Главная страница панели была разбита по вкладкам.
Как сделать:
1. Копируем файл usercpanel.php в папку \protected\views\layouts
2. Подключаем этот лайаут.
открываем \protected\modules\usercpanel\controllers\MainController.php и в начале файла после
- Код: Выделить всё
public $modelName = 'User';
добавляем функцию init:
- Код: Выделить всё
public function init() {
$this->layout='//layouts/usercpanel';
parent::init();
}
аналогичным образом поступаем с файлом \protected\modules\userads\controllers\MainController.php. Здесь перед
- Код: Выделить всё
parent::init();
добавляем:
- Код: Выделить всё
$this->layout='//layouts/usercpanel';
3. Заменяем файл \protected\modules\usercpanel\views\index.php на файл из архива
4. Убираем лишние ссылки.
в файле \protected\modules\userads\views\create.php убираем или комментируем код
- Код: Выделить всё
$this->widget('zii.widgets.CMenu', array(
'items' => array(
array('label'=>tt('Manage apartments', 'apartments'), 'url'=>array('index')),
)
));
в файле \protected\modules\userads\views\update.php ищем и убираем строчку
- Код: Выделить всё
array('label' => tt('Manage apartments', 'apartments'), 'url'=>array('index')),
5. Добавляем классы.
файл \protected\modules\userads\views\index.php
- Код: Выделить всё
$this->widget('zii.widgets.CMenu', array(
'items' => array(
array('label' => tt('Add apartment', 'apartments'), 'url'=>array('create')),
)
));
меняем на:
- Код: Выделить всё
$this->widget('zii.widgets.CMenu', array(
'items' => array(
array('label' => tt('Add apartment', 'apartments'), 'url'=>array('create')),
),
'htmlOptions' => array('class' => 'cpanel_submenu'),
));
файл \protected\modules\userads\views\update.php
- Код: Выделить всё
$this->widget('zii.widgets.CMenu', array(
'items' => $menuItems
));
меняем на:
- Код: Выделить всё
$this->widget('zii.widgets.CMenu', array(
'items' => $menuItems,
'htmlOptions' => array('class' => 'cpanel_submenu'),
));
6. Добавляем в \css\styles.css:
- Код: Выделить всё
/*--------------------- usercpanel --------------------*/
.nav-list{
margin:2px 0 0 0;
height:35px;
padding:0;
background-color:#eee;
}
.nav-list li{
list-style:none;
float:left;
}
.nav-list li a{
background-color:#fff;
text-decoration:none;
padding:3px 15px;
margin:3px 10px;
border:#ddd 1px solid;
display:block;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
}
.nav-list li a:hover{
background-color:#fff;
border:#aaa 1px solid;
}
.cpanel_submenu {
height:25px;
}
.cpanel_submenu li{
float:left;
display:block;
margin-right:15px;
}
.usercpanel-wrapper h1{
margin-bottom:20px;
}
a:focus{
outline:none;
}
/*--------------------- /usercpanel --------------------*/
Если для кнопок нужно применить полностью свои стили, то в начале usercpanel.php лучше убрать строчку.
- Код: Выделить всё
<?php Yii::app()->bootstrap->registerAllCss(); ?>
Не забудьте перевести надпись "Your profile" в управлении переводами.
Данный пример требует передачи модели пользователя в лайаут (распространяется только на платный модуль "payment"),
поэтому владельцам платных версий могу предложить раскомментировать первую строчку в начале файла usercpanel.php из архива.
- Код: Выделить всё
<?php if (!isset($model)) $model = User::model()->findByPk(Yii::app()->user->id); ?>
Возможно, это не очень правильно с точки зрения экономии ресурсов, но:
1. естественно, используемые в панели управления модели User и UserAds - разные, а для общей менюхи нужна только модель User (поэтому использование виджета в качестве решения также не должно дать положительных результатов);
2. Yii вообще не передает модель в layout, что вполне логично.
Надеюсь, разработчики подскажут более красивое решение данного вопроса без переписывания модулей.
В бесплатной версии, модели в лайауте не нужны, поэтому все работает без такой модификации.