Создание и сопровождение сайтов

Блог. Yii. Подсказки по yii. Глава одиннадцатая.

Поиск

Подсказки по Yii. Глава одиннадцатая.

  1. Действия до валидации и после.

    Иногда необходимо выполнить какие-нибудь действия до валидации.

    Например в зависимости от значения переменной задать название сценария для валидации:

    1. public function onBeforeValidate($event) {  
    2.     $scenarioArray = array(  
    3.                     1 => 'scanario1',  
    4.                     2 => 'scanario2',  
    5.                     3 => 'scanario3',  
    6.                     4 => 'scanario4',  
    7.                     5 => 'scanario5',  
    8.     );  
    9.     $this->scenario = $scenarioArray[$this->fieldFromDB1];  
    10.   
    11.     if (!$this->field2 || !$this->field3)  
    12.         $this->addError('phone''Заполните поля field2 и field3');  
    13.     else   
    14.         $this->fieldFromDB2 = $this->field2.$this->field3;  
    15. }  

    , здесь field2 и field3 - поля, которых нет в БД, но они объявлены в модели.

    И после валидации можно выполнить некий код:

    1. public function onAfterValidate($event) {  
    2.     // здесь некий код  
    3. }  

    В модели ещё есть просто beforeValidate().

    В данном случае мы рассмотрели onBeforeValidate(), которая аргументом принимает событие.

     

  2. Добавляем индикатор загрузки при ajax запросах.

    Выполняя ajax запрос очень полезно показывать пользователю "что что-то происходит" и его клик по ссылке/кнопке был не напрасен.

    Добавим дивчик на страницу:

    1. <div id="loading" style="display:none;">Загрузка ...</div>  

    Стили:

    1. #loading{   
    2.     positionfixed;   
    3.     top40px;   
    4.     leftleft: 0;   
    5.     z-index: 5000;   
    6.     background-color#3C69AC;   
    7.     font-size: 100%;  
    8.     color#FFFFFF;   
    9.     padding5px;  
    10. }  

    Отображение и скрытие дивчика:

    1. Yii::app()->clientScript->registerScript('loading'' 
    2.     $("#loading").bind("ajaxSend", function(){ 
    3.         $(this).show(); 
    4.     }).bind("ajaxComplete", function(){ 
    5.         $(this).hide(); 
    6.     }); 
    7. ', CClientScript::POS_READY);  

     

  3. Пути к папкам.

    Наверное многие сталкивались с загрузкой изображений и указанием абсолютных путей к папке, в которую будут складываться загруженные файлы.

    На помощь может прийти старый добрый dirname(__FILE__);/dirname(__FILE__) . '/../'; и другие вариации.

    Но в Yii есть метод getPathOfAlias, использование которого является правильным и красивым решением.

    Например, для загрузки в папку uploads

    yii-tips-11-01

    используйте:

    1. Yii::getPathOfAlias('webroot.uploads');  

    Для загрузки в папку uploads/qrcodes

    yii-tips-11-02

    используйте:

    1. Yii::getPathOfAlias('webroot.uploads.qrcodes');  

    Для загрузки в папку protected/modules/cropimage используйте:

     

    1. Yii::getPathOfAlias('application.modules.cropimage');  

     

    Использовать

    1. Yii::getPathOfAlias('webroot.protected.modules.cropimage');  

    нельзя по той причине, что папка protected закрыта для доступа через htaccess.

     

Обсудить статью на форуме