Итак, после недолгих изучений Yii было принято решение уже что нибудь начать.
А начать я решил с базы квартир для Риэлтеров.
Имхо, если проект довести до ума, сделать удобным в использовании – за применением не заржавеет.
Вообще, какая разница с чем оперировать – основные принципы в работе в разных отраслях одинаковы.
Вот так взять и начать сразу не вышло 🙂 – всё же нужны какие то реальные данные, с ними интереснее.
Соответственно, первое что было сделано – парсер объявлений о аренде квартир с arenda.ngs.ru (можно чтоб присылали готовый файл за деньги – но я жадный).
Парсеры я привык писать на чистом PHP – единственное отличие от ранее написанных парсеров – этот я ваял в PHPStorm (уже начинаю привыкать – довольно удобная штука).
Со структурой БД сильно заморачиваться не стал – одна табличка с объявлениями – и штук 9 справочных, а-ля ID, NAME (город, район, улица, и т.д.)
С КЛАДР-ом тоже заморачиваться не стал, хотя на всякий случай качнул MySQL выгрузку.
Итак – Yii!!!
Качаю фреймворк 1.1.14 (last stable) с оф.сайта.
Ставлю в режиме WebApp – вуаля, уже какой-никакой работающий каркас сразу есть с работающей авторизацией! (и это мне очень понравилось)
Далее, подключаю к фреймворку MySQL и генератор кода gii и создаю модели для всех созданных ранее в PHPMyAdmin табличек, для основной так же делаю в gii CRUD контроллер.
Табличка CGridView в админской части мне так же понравилась, но пока в ней не отображаются реляционные связи – айдишники выводятся в виде цифр.
Далее “вяжем” реляционные связи – в контролер arenda добавляем
| 1 | ‘city’=>array(self::BELONGS_TO, ‘City’, ‘id_city’) и т.д. | 
для фотографий другая связь
| 1 | ‘fotos’=>array(self::HAS_MANY, ‘Fotos’, ‘id_arenda’) | 
Далее заходим во вьюшку с гридом и добавляем колонку в виде
| 1 2 3 4 5 |         array(             ‘name’ => ‘id_city’,             ‘filter’ => CHtml::listData(city::model()->findAll(array(‘order’=>‘name’)), ‘id’, ‘name’),             ‘value’=>‘$data->city->name’         ), | 
так и отображение будет правильным и за одно появится фильтр с сортировкой по возрастанию!
С улицами мне такое решение не понравилось т.к. их очень много – решил сделать поиск по вхождению.
Тут мне помог andy_s с форума на оф.сайте – тема.
Инструкция:
1. во вьюшку добавляем колонку с именем search_street и отображаемыми релационными данными:
| 1 2 3 4 | array(   ‘name’ => ‘search_street’,   ‘value’=>‘$data->street->name’ ), | 
всё ок – поле для фильтрации добавилось, данные выводятся верно, но пока не фильтрует
2. Добавляем поле в модель
| 1 2 3 | class Arenda extends CActiveRecord { public $search_street; | 
3. Добавляем в rules() правило с полем search_street в safe для search
| 1 | array(‘search_street, id, title, …..’, ‘safe’, ‘on’=>‘search’), | 
4. В самом search() добавляем связанную таблицу и связь между search_street и именем
| 1 2 | $criteria->with = array(‘street’); $criteria->compare(‘street.name’,$this->search_street, true); | 
В итоге получилась довольно симпатичная и функциональная табличка
