насчет похожие объявления
Добавлено:
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
Доброе утро Хруст! с $_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
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?