Страница 1 из 2

насчет похожие объявления

СообщениеДобавлено: 18 мар 2015, 17:06
vanred79
Добрый день! В денвере прикрутил похожие объявления в поиск. То есть если "Ничего не найдено", внизу выходят "Похожие объявления". Но имеется один недостаток, не учитываются параметры поиска при показе похожих объявлений. Возможно ли сделать, чтобы учитывались некоторые фильтры (город, тип недвижимости)? Если да, то как это можно реализовать?

Re: насчет похожие объявления

СообщениеДобавлено: 19 мар 2015, 08:53
Xpycm
Доброе утро.

Берите параметры из массива $_GET ( http://php.net/manual/ru/reserved.variables.get.php )
И передавайте через criteria ( http://www.yiiframework.com/doc/api/1.1/CDbCriteria ) необходимые параметры.

Re: насчет похожие объявления

СообщениеДобавлено: 19 мар 2015, 09:13
vanred79
Xpycm писал(а):Доброе утро.

Берите параметры из массива $_GET ( http://php.net/manual/ru/reserved.variables.get.php )
И передавайте через criteria ( http://www.yiiframework.com/doc/api/1.1/CDbCriteria ) необходимые параметры.

Доброе утро Хруст! с $_GET вроде разобрался:
echo 'Привет ' . htmlspecialchars($_GET["objType"]); - дает число objType

Не понятно, что с городом делать, он в браузере вот так отображается "city%5B%5D" и не дает результат при использовании вышестоящего кода.

"Передавать через criteria" в этот кусок кода вставлять?
Код: Выделить всё
if(!$apartments){
    echo Yii::t('module_apartments','Apartments list is empty.');
    
    if
(!Yii::app()->user->getState('isAdmin')) {
            if (issetModule('similarads') && param('useSliderSimilarAds') == 1) {
                Yii::import('application.modules.similarads.components.SimilarAdsWidget');
                $ads = new SimilarAdsWidget;
                $ads->viewSimilarAds($data);
            }
        }
}
 

Re: насчет похожие объявления

СообщениеДобавлено: 19 мар 2015, 10:15
Xpycm
Вместо:
Код: Выделить всё
if(!Yii::app()->user->getState('isAdmin')) {
    if (issetModule('similarads') && param('useSliderSimilarAds') == 1) {
        Yii::import('application.modules.similarads.components.SimilarAdsWidget');
        $ads = new SimilarAdsWidget;
        $ads->viewSimilarAds($data);
    }
}
 


пропишите:
Код: Выделить всё
if (issetModule('similarads') && param('useSliderSimilarAds') == 1) {
    Yii::import('application.modules.similarads.components.SimilarAdsWidget');
    $ads = new SimilarAdsWidget;
    if (isset($data) && $data)
        $ads->viewSimilarAds($data);
    elseif (isset($_GET) && count($_GET))
        $ads->viewSimilarAds($_GET);
    else 
        $ads
->viewSimilarAds(null);
}
 



В файле rotected\modules\similarads\components\SimilarAdsWidget.php, в методе viewSimilarAds() перепишите логику.

для примера разберу один блок:
Код: Выделить всё
if ($data->obj_type_id) {
    $criteria->addCondition('obj_type_id = :obj_type_id');
    $criteria->params[':obj_type_id'] = $data->obj_type_id;
}
 


должно выглядеть как-то так:
Код: Выделить всё
if (is_object($data)) {
    if ($data->obj_type_id) {
         $criteria->addCondition('obj_type_id = :obj_type_id');
         $criteria->params[':obj_type_id'] = $data->obj_type_id;
    }
}
elseif (is_array($data)) {
    if (array_key_exists('objType', $data)) {
        $criteria->addCondition('obj_type_id = :obj_type_id');
        $criteria->params[':obj_type_id'] = (int) $data['objType'];
    }
}
 

Re: насчет похожие объявления

СообщениеДобавлено: 19 мар 2015, 10:55
vanred79
Спасибо Хруст! Все работает кроме города, может из-за того что в браузере город отображается вот так city%5B%5D? Что можно сделать?

Re: насчет похожие объявления

СообщениеДобавлено: 19 мар 2015, 10:58
Xpycm
Это потому что городов может быть множество ( массив ).
Посмотрите как это сделано в поиске ( modules/quicksearch/maincontroller.php )

Re: насчет похожие объявления

СообщениеДобавлено: 19 мар 2015, 11:04
vanred79
Большое спасибо! Разобрался

Re: насчет похожие объявления

СообщениеДобавлено: 19 мар 2015, 12:05
vanred79
Хруст! Я вывод "Похожих объявлений" хотел сделать на страницах page, для того чтобы раздел был не совсем пустой, в случае отсутствия объявлений. У меня значения фильтров можно задать с админки
Значения хранятся в таблице Menu столбце widget_data в виде {"term":"0","city_id":"1","description_near_ru":"0","type":"1","price_type":"0","obj_type_id":"1","num_of_rooms":"0","priceMin":"0","priceMax":"0"}.

Подскажите пожалуйста как можно адаптировать ваш код под это?

Re: насчет похожие объявления

СообщениеДобавлено: 19 мар 2015, 16:57
Xpycm
декодируйте с помощью CJSON::decode - https://www.google.ru/?gws_rd=ssl#newwi ... son+decode

Ну и: viewtopic.php?f=17&t=608#p2975

Re: насчет похожие объявления

СообщениеДобавлено: 22 мар 2015, 19:03
vanred79
Добрый день Хруст!
Данные разобрался как получить через json_decode , но у меня получается получить данные только в файле protected/modules/menumanager/views/views.php через вот этот код:
Код: Выделить всё
$cart json_decode$model->widget_data );
    echo 
$cart->obj_type_id

Непонятно как эти данные вывести через файл protected/modules/apartments/views/widgetApartments_list.php (пробовал не получается).

Вопрос можно ли передать данные переменных, полученных с protected/modules/menumanager/views/views.php в виджет protected/modules/similarads/components/SimilarAdsWidget.php?