RSS-подписка

RSS-лента

Новые статьи

Последние комментарии


Получать обновления на эл. почту

Ваш e-mail:

Рассылка новостей от Loco

Шпаргалка по 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);  

В итоге получится в строке фильтров над перечнем записей фильтрующий раскрывающийся список для типов записей.

 

Источник: loco.ru

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:
  • 0 Шпаргалка по Yii, подсказки и полезные приёмы (12.06.2016) ← вы тут

Комментарии (1)     Подпишитесь на RSS комментариев к этой статье.

1 комментарий

#994
Anatol говорит:
August 20, 2013 at 04:59 pm

 Может  так попробовать?

$last_id = Yii::app()->db->getLastInsertId();

$last_id = Yii::app()->db->getLastInsertId();