Шпаргалка по Yii, подсказки и полезные приёмы
1. Получить id последней вставленной записи из таблицы:
$lastId = Yii::app()->db->createCommand('SELECT id FROM yourTable ORDER BY id DESC LIMIT 1')->queryScalar();
2. Доступ в виде к модулю/контроллеру/действию:
// Module if(isset($this->module)): echo $this->module->getName(); endif; // Controller - текущее название (id) контроллера в контроллере или представлении echo $this->ID; echo Yii::app()->controller->id; // Action - название текущего экшна echo $this->action->id; echo $this->getAction()->getId();
3. Вызов в моделях функции, общей для них. Как избегать дублирования кода?
Надо создать в папке models общую модель YourappActiveRecord, которая расширяет CActiveRecord. И в неё поместить общую для всех моделей функцию. А эти все модели уже наследовать от YourappActiveRecord. (здесь видна аналогия с контроллерами: все контроллеры наследуются от Controller, который в свою очередь наследуется от CController, это и понятно и еонтроллеры и модели - суть классы). Бывает, можно не заметить и пихать в Controller функцию, а вызывать её в моделях - тогда, конечно Yii ругается, что не определён метод - он ждёт его в модели, а не в контроллере.
4. Проверка если страница главная (Home)
$isFrontpage = false; if ((Yii::app()->controller->getId().'/'.Yii::app()->controller->getAction()->getId()) == 'site/index' ) { $isFrontpage = true; } if($isFrontpage == false) {...здесь действия ваши для страниц, не являющейся домашней...}
5. Как указывать GET параметры в URL ссылки
<?php echo CHtml::link('Link Text', Yii::app()->createUrl('controller/action',array( 'param1'=>'value1', 'param2'=>'value2', 'param3'=>'value3')); ?>
6. Как получать и подставлять в значение атрибута GET параметр из URL (.../request?group=45)
В контроллере пишем проверку
if(isset($_GET['group'])) { $model->group = $_GET['group']; }
7. Проверка существует ли виджет (компонент) в модуле
<?php if(Yii::app()->hasComponent('RecentSongs')) : ... ?>
8. Вставка изображения в CGridview
Установить 'type' => 'image' и в 'value' указать путь до изображения в кавычках
$this->widget('zii.widgets.grid.CGridView', array( 'dataProvider'=>$model->search(), 'filter'=>$model, 'columns'=>array( array ( 'name' => 'img', 'type' => 'image', 'value'=> 'url/to/image', /* например: 'Yii::app()->request->baseUrl.$data->img' */ 'filter' => false, ), ... ));
9. Подключение css
Yii::app()->clientScript->registerCssFile(Yii::app()->assetManager->publish(Yii::app()->basePath . '/css/').'style.css', 'screen');
10. Подключение js-файла
Yii::app()->clientScript->registerScriptFile(Yii::app()->assetManager->publish(Yii::app()->basePath . '/js/'). '/jcarousel/lib/jquery.jcarousel.min.js', CClientScript::POS_END);
11. Вставка js-скрипта в теле страницы
Yii::app()->clientScript->registerScript('loading', ' $("#loading").bind("ajaxSend", function(){ $(this).show(); }).bind("ajaxComplete", function(){ $(this).hide(); }); ', CClientScript::POS_READY);
где POS_READY - скрипт выполнится в $(document).ready(function() { })
POS_LOAD - скрипт выполнится в window.onload
POS_END - вставка перед закрывающим тэгом body
POS_BEGIN - вставка перед открывающим тэгом body
POS_HEAD - вставка перед тэгом title
12. CGridView. Добавляем раскрывающийся список для сортировки/поиска. (monoray.ru)
По-умолчанию, в CGridView filter, установленный в значение true, является текстовым полем.
Чтобы сделать его раскрывающимся списком (dropDownList), в виджете CGridView добавьте следующий код:
'filter' => array(0 => 'Все', 1 => 'Продажа', 2 => 'Аренда'),
Должно получиться типа такого:
$this->widget('zii.widgets.grid.CGridView', array( 'id'=>'apartments-grid', 'dataProvider'=>$model->search(), 'filter'=>$model, 'columns'=>array( ... array( 'name' => 'type', 'type' => 'raw', 'value' => 'Apartment::getNameByType($data->type)', 'filter' => array(0 => 'Все', 1 => 'Продажа', 2 => 'Аренда'), ), ... ) ));
Осталось добавить в метод search модели нижеприведённый код:
if ($this->type)
$criteria->compare('type', $this->type);
В итоге получится в строке фильтров над перечнем записей фильтрующий раскрывающийся список для типов записей.
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Вы можете почитать все статьи от almix'а.
- 0 Шпаргалка по Yii, подсказки и полезные приёмы (12.06.2016) ← вы тут
1 комментарий
Может так попробовать?
$last_id = Yii::app()->db->getLastInsertId();