Чем метод afterFind в модели не походит для этих целей?
с методом afterFind не был знаком, с php и yii так же все плохо у меня
Было желание сделать функцию в БД и время от времени дорабатывать код, не трогая сайт
Было бы неплохо, если бы вы подробно описали решение, наверняка кому то пригодится
Я реализовал вариант когда в БД хранится адрес именно тот, что указал пользователь, а при просмотре на сайте из БД уже вываливается обработанный адрес с помощью SQL функции.
чтобы функция применялась к листу объявлений в виде списка на главной странице да и на других страницах где есть этот лист,
то в файле \themes\classic\views\modules\apartments\views\widgetApartments_list.php
перед кодом
- Код: Выделить всё
$dataProvider = new CActiveDataProvider('Apartment', array(
'criteria'=>$criteria,
'pagination'=>false,
));
указываем такой код, чтобы явно указать выбираемые поля и подменить поле address_ru на функцию с обработкой(нужно составить полный список полей таблицы apartment, т.к. могут быть отличия если используете несколько языков на сайте)
- Код: Выделить всё
$criteria->select = 'id, type, obj_type_id, loc_country, loc_region, loc_city, city_id, visits, date_updated, date_created,
date_end_activity, activity_always, is_price_poa, price, price_to, num_of_rooms, floor, floor_total, square, land_square, window_to,
title_ru, description_ru, description_near_ru, living_conditions, services,
bead(address_ru) as address_ru,
berths, active, lat, lng, rating, date_up_search, is_special_offer, is_free_to, price_type, sorter, owner_active, owner_id, exchange_to_ru,
note, phone, autoVKPostId, autoFBPostId, autoTwitterPostId';
чтобы адрес менялся в самом объявлении, то правим файл \protected\modules\apartments\controllers\MainController.php
в коде
- Код: Выделить всё
if($id) {
$apartment = Apartment::model()->with(array('windowTo', 'objType', 'city'))->findByPk($id);
}
добавляем строчки, чтобы получилось так
- Код: Выделить всё
if($id) {
$apartment = Apartment::model()->with(array('windowTo', 'objType', 'city'))->findByPk($id);
$tmp = Apartment::model()->findByPk($id, array('select' => 'bead(address_'.Yii::app()->language.') as address_'.Yii::app()->language));
$apartment->address_ru = $tmp->getStrByLang('address');
}