Автоматическое "причесывание" адресов недвижимости

Вопросы и ответы по изменению функционала, смене дизайна, переносу сайта и т.п.

Модераторы: Xpycm, Koduc

Правила форума
ВНИМАНИЕ! Форум не является средством гарантированной поддержки клиентов и пользователей. Поэтому на быстрый ответ тут рассчитывать не нужно, как и на ответ вообще. Сотрудники отвечают по мере своих возможностей.

На форуме действует ограничение в 3 сообщения / сутки.
Если Вы хотите сказать "спасибо", то воспользуйтесь функцией "Повысить репутацию" - зелёная иконка "плюс" под ником ответившего.

Автоматическое "причесывание" адресов недвижимости

Сообщение psdich » 01 дек 2014, 20:41

Здравствуйте
Задался вопросом автоматизировать процесс причесывания адресов недвижимости в объявлениях.
написал небольшую функцию в mysql для преобразования адреса недвижимости(назовем ее к примеру beauty_address(text))
Хотел внедрить ее при сохранении объявления или просмотре объявлений, но не получилось :(
в коде натыкаюсь на такую строчку
Код: Выделить всё
$data->getStrByLang('address') 
(\themes\classic\views\modules\apartments\views\_tab_general.php), но не могу понять откуда переменная $data берет информацию из БД. *WALL*
Подскажите, пожалуйста, где в коде можно внедрить mysql функцию, чтобы сохранить преобразованный адрес в бд или преобразовывать адрес с помощью все той же функции при отображении объявлений?

P.S. в php не силен
psdich
Незнакомец
 
Сообщения: 5
Зарегистрирован: 01 дек 2014, 19:12
Очки репутации: 0

Re: Автоматическое "причесывание" адресов недвижимости

Сообщение Foton » 03 дек 2014, 15:42

Опишите подробнее как именно работает Ваша функция, чтобы было проще вам помочь.
Foton
Разработчик
Разработчик
 
Сообщения: 431
Зарегистрирован: 26 янв 2012, 14:58
Очки репутации: 8

Re: Автоматическое "причесывание" адресов недвижимости

Сообщение psdich » 03 дек 2014, 21:39

Код: Выделить всё
CREATE DEFINER=`root`@`localhost` FUNCTION `beAd`(`adr` TEXT) RETURNS text CHARSET utf8
    NO SQL
begin
-- beaty ardes
Declare ba text
;
set ba =upper(adr);

set ba = replace(ba,"Д."," ");
set ba = replace(ba,"."," ");
set ba = replace(ba,","," ");
set ba = replace(ba,"УЛ "," ");
set ba = replace(ba,"УЛИЦА"," ");
set ba = replace(ba,"ПР-КТ","ПР");

set ba = replace(ba,"  "," ");
set ba = trim(ba);


return ba;
end


удаляет сокращения, делает заглавные буквы
В принципе уже решил данный вопрос, в паре мест добавил добавил код
psdich
Незнакомец
 
Сообщения: 5
Зарегистрирован: 01 дек 2014, 19:12
Очки репутации: 0

Re: Автоматическое "причесывание" адресов недвижимости

Сообщение Foton » 04 дек 2014, 16:07

Было бы неплохо, если бы вы подробно описали решение, наверняка кому то пригодится
Foton
Разработчик
Разработчик
 
Сообщения: 431
Зарегистрирован: 26 янв 2012, 14:58
Очки репутации: 8

Re: Автоматическое "причесывание" адресов недвижимости

Сообщение Xpycm » 04 дек 2014, 19:17

Чем метод afterFind в модели не походит для этих целей?
https://www.google.ru/search?q=afterFind+yii

На мой взгляд куда нагляднее и упрощает поддержку программистам, нежели добавление функции в mySQL, о которой в будущем можно и не вспомнить или банально не знать.
Dropbox
Open Real Estate CMS: FAQ | FAQ 2 | FAQ 3
Изображение
Xpycm
Разработчик
Разработчик
 
Сообщения: 1592
Зарегистрирован: 30 дек 2011, 11:06
Откуда: Йошкар-Ола
Очки репутации: 50

Re: Автоматическое "причесывание" адресов недвижимости

Сообщение psdich » 05 дек 2014, 21:33

Чем метод 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');            
                
} 
psdich
Незнакомец
 
Сообщения: 5
Зарегистрирован: 01 дек 2014, 19:12
Очки репутации: 0


Вернуться в Вопросы и помощь по изменениям

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 45

cron