-
Публикации
325 -
Зарегистрирован
-
Посещение
Все публикации пользователя Vladimir_K
-
В процессе тестирования формы всплыла ещё одна проблема. Ранее я писал, что в справочнике (и соответственно в форме поиска) у нас есть: Регион (новый справочник, сами добавляли) Район (на базе стандартного Регион) Город (на базе стандартного Город) Так вот как раз по нашему справочнику новому (он у нас в разделе "Пользовательские " находится) - фильтр не ищет. Т.е. в адресную строку браузера параметр передаётся, но объявления не фильтруются. Просто вываливаются все что есть. Точно так же как с "Расстоянием до моря". В файле template_search.php код отвечающий за поиск по справочнику присутствует. Добавлено по аналогии с остальным: if(''!==$this->getRequestValue('regionareas_id')){ $params['regionareas_id'] = (int)$this->getRequestValue('regionareas_id'); } и if($params['regionareas_id'] == 1 && isset($data_model_array['regionareas_id'])){ $where_array[]=DB_PREFIX.'_data.regionareas_id='.$params['regionareas_id']; } Что не так?
-
Ну checkbox и select_box вроде заработали (уже боюсь сглазить). По Пользовательской осталось два вопроса: Поле с ценой сделать диапазоном (ползунками). Так как оно выглядит и главное РАБОТАЕТ в дефолтной форме. Поле "Расстояние до моря". Это поле у нас типа safe_string c rules=Type:int. Так вот по нему параметры в адресную строку браузера передаются но поиск не происходит. В файле template_search.php код отвечающий за это поле присутствует.
-
Почему в varchar? У этих полей тип int стоит везде. Или я не туда смотрю? Исключение составляют `animals_id` varchar(255) NOT NULL DEFAULT '0', и `seadist_id` varchar(255) NOT NULL DEFAULT '' Но это не checkbox, а select_box и safe_string с Type:int соответсвенно. К тому же я эти поля создавал через админ зону, а не через БД. Как они могли не так создаться?
-
Если я вас правильно понял, вот: CREATE TABLE IF NOT EXISTS `re_data` ( `id` int(10) unsigned NOT NULL, `user_id` int(10) unsigned NOT NULL DEFAULT '0', `type_id` int(10) unsigned NOT NULL DEFAULT '0', `topic_id` int(10) unsigned NOT NULL DEFAULT '0', `country_id` int(10) unsigned NOT NULL DEFAULT '0', `city_id` int(10) unsigned NOT NULL DEFAULT '0', `metro_id` int(10) unsigned NOT NULL DEFAULT '0', `district_id` int(10) unsigned NOT NULL DEFAULT '0', `price` int(10) unsigned DEFAULT '0', `text` text, `image` text, `contact` text, `date_added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `agent_tel` text, `room_count` int(11) DEFAULT NULL, `elite` int(10) unsigned DEFAULT '0', `session_id` text NOT NULL, `active` int(11) NOT NULL DEFAULT '0', `sub_id1` int(10) unsigned NOT NULL DEFAULT '0', `sub_id2` int(10) unsigned NOT NULL DEFAULT '0', `reviews_count` int(10) unsigned NOT NULL DEFAULT '0', `hot` int(10) unsigned DEFAULT '0', `floor` int(11) NOT NULL DEFAULT '0', `floor_count` int(11) NOT NULL DEFAULT '0', `walls` varchar(255) NOT NULL DEFAULT '', `balcony` varchar(255) NOT NULL DEFAULT '', `square_all` varchar(255) NOT NULL DEFAULT '', `square_live` varchar(255) NOT NULL DEFAULT '', `square_kitchen` varchar(255) NOT NULL DEFAULT '', `bathroom` varchar(255) NOT NULL DEFAULT '', `is_telephone` varchar(255) NOT NULL DEFAULT '', `furniture` varchar(255) NOT NULL DEFAULT '', `plate` varchar(255) NOT NULL DEFAULT 'нет', `agent_email` varchar(255) NOT NULL DEFAULT '', `number` varchar(255) NOT NULL DEFAULT '', `spec` tinyint(4) NOT NULL DEFAULT '0', `floor_cover` text, `square_room` text, `is_kitchen` tinyint(4) NOT NULL DEFAULT '0', `region_id` int(10) unsigned NOT NULL DEFAULT '0', `street_id` int(10) unsigned NOT NULL DEFAULT '0', `planning` text NOT NULL, `dom` text NOT NULL, `flat_number` text NOT NULL, `owner` text NOT NULL, `source` text NOT NULL, `adv_date` text NOT NULL, `more1` text NOT NULL, `more2` text NOT NULL, `more3` text NOT NULL, `youtube` text NOT NULL, `fio` varchar(255) NOT NULL DEFAULT '', `phone` varchar(255) NOT NULL DEFAULT '', `realty_type_id` int(10) unsigned NOT NULL DEFAULT '0', `view_count` int(10) unsigned NOT NULL DEFAULT '0', `best` int(10) unsigned NOT NULL DEFAULT '0', `email` varchar(255) NOT NULL DEFAULT '', `distance` varchar(255) NOT NULL DEFAULT '', `tmp_password` varchar(255) NOT NULL DEFAULT '', `ad_mobile_phone` varchar(255) NOT NULL DEFAULT '', `ad_stacionary_phone` varchar(255) NOT NULL DEFAULT '', `can_call_start` varchar(255) NOT NULL DEFAULT '', `can_call_end` varchar(255) NOT NULL DEFAULT '', `currency_id` int(10) unsigned NOT NULL DEFAULT '1', `premium_status_end` int(11) NOT NULL DEFAULT '0', `bold_status_end` int(11) NOT NULL DEFAULT '0', `vip_status_end` int(11) NOT NULL DEFAULT '0', `meta_title` text, `meta_description` text, `meta_keywords` text, `image_md5` varchar(255) DEFAULT NULL, `image_cache` text, `image_parsed` int(11) NOT NULL DEFAULT '0', `geo_lat` decimal(9,6) DEFAULT NULL, `geo_lng` decimal(9,6) DEFAULT NULL, `resortareas_id` int(10) unsigned NOT NULL DEFAULT '0', `wifi` varchar(255) NOT NULL DEFAULT '', `rooms_type` varchar(255) NOT NULL DEFAULT '', `cena_za` varchar(255) NOT NULL DEFAULT '', `period_raboty` varchar(255) NOT NULL DEFAULT '', `usloviya_pitaniya` varchar(255) NOT NULL DEFAULT '', `parking` varchar(255) NOT NULL DEFAULT '', `hotwater` varchar(255) NOT NULL DEFAULT '', `cold_water` varchar(255) NOT NULL DEFAULT '', `beach` int(10) unsigned NOT NULL DEFAULT '0', `beach_id` varchar(255) NOT NULL DEFAULT '0', `animals_id` varchar(255) NOT NULL DEFAULT '0', `sea_distance_id` varchar(255) NOT NULL DEFAULT '', `do_rynka_id` varchar(255) NOT NULL DEFAULT '', `do_magazina_id` varchar(255) NOT NULL DEFAULT '', `in_time` varchar(255) NOT NULL DEFAULT '', `out_time_id` varchar(255) NOT NULL DEFAULT '0', `in_time_id` varchar(255) NOT NULL DEFAULT '0', `documenty_id` varchar(255) NOT NULL DEFAULT '', `usloviya_oplaty_id` varchar(255) NOT NULL DEFAULT '', `transfer_id` varchar(255) NOT NULL DEFAULT '0', `discounts_price_id` text, `skype_id` varchar(255) NOT NULL DEFAULT '', `dopuslugi_id` varchar(255) NOT NULL DEFAULT '', `ekskursii_id` varchar(255) NOT NULL DEFAULT '', `on_territory_id` varchar(255) NOT NULL DEFAULT '0', `pool_id` varchar(255) NOT NULL DEFAULT '0', `phone2` varchar(255) NOT NULL DEFAULT '', `site_link` varchar(255) NOT NULL DEFAULT '', `object_name_id` varchar(255) NOT NULL DEFAULT '', `pitanie` int(10) unsigned NOT NULL DEFAULT '0', `stoyanka` int(10) unsigned NOT NULL DEFAULT '0', `childrens` int(10) unsigned NOT NULL DEFAULT '0', `nalichie_wifi` int(10) unsigned NOT NULL DEFAULT '0', `bassein` int(10) unsigned NOT NULL DEFAULT '0', `seadist_id` varchar(255) NOT NULL DEFAULT '' ) ENGINE=MyISAM AUTO_INCREMENT=38 DEFAULT CHARSET=utf8;
-
Добавил перед: return array( 'where'=>$where_array, 'params'=>$params ); Вверху сайта появилось: Array ( ) Array ( ) Array ( ) Выбираю "Наличие Wi-Fi" (checkbox). Жму "Искать". Результат: Адресная строка браузера: /index.php?regionareas_id=0®ion_id=&city_id=0&topic_id=0&animals_id=0&seadist_id=&nalichie_wifi=0&price=0 Вверху сайта: Array ( ) Array ( ) Выдача фильтра - все объявления, что есть на сайте. По заданному параметру не фильтрует. Добавляю "Бассейн" (checkbox). Жму "Искать". Результат: Адресная строка браузера: /index.php?regionareas_id=0®ion_id=&city_id=0&topic_id=0&animals_id=0&seadist_id=&nalichie_wifi=1&bassein=0&price=0 Вверху сайта: Array ( [0] => re_data.nalichie_wifi=1 ) Array ( [0] => re_data.nalichie_wifi=1 ) Выдача фильтра - объекты только с наличием wi-fi. Без учёта наличия бассейна. Добавляю "Поселение с животными" (select_box) и "Наличие стоянки" (checkbox). Жму "Искать". Результат: Адресная строка браузера: /index.php?regionareas_id=0®ion_id=&city_id=0&topic_id=0&animals_id=1&seadist_id=&nalichie_wifi=1&stoyanka=0&bassein=1&price=0 Вверху сайта: Array ( [0] => re_data.bassein=1 [1] => re_data.nalichie_wifi=1 [2] => re_data.animals_id=1 ) Array ( [0] => re_data.bassein=1 [1] => re_data.nalichie_wifi=1 [2] => re_data.animals_id=1 ) Выдача фильтра - объекты с одновременным наличием wi-fi, бассейна и разрешённым поселением с животными. Наличие парковки не учтено. Т.е. такое ощущение, что фильтр "опаздывает" на 1 шаг. Причём похоже, что именно по checkbox. Потому, что select_box на третьем шаге был передан сразу.
-
Согласно описаному тут - https://www.sitebill.ru/s/topic/241-добавить-новые-поля-в-поиск-template_search-и-др/?do=findComment&comment=2741 рецепту я сделал следующее: 1. Скопировал /apps/system/lib/frontend/search/kvartira_search.php в папку /template/frontend/realia/main/search/ и переименовал его в local_kvartira_search.php 2. В local_kvartira_search.php заменил class Kvartira_Search_Form extends SiteBill на class Local_Kvartira_Search_Form extends SiteBill. 3. В /template/frontend/realia/main/main.php заменил require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/frontend/search/kvartira_search.php'); $kvartira_search_form = new Kvartira_Search_Form(); $kvartira_search_form->main(); на require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/frontend/search/kvartira_search.php'); require_once(SITEBILL_DOCUMENT_ROOT.'/template/frontend/'.$this->getConfigValue('theme').'/main/search/local_kvartira_search.php'); $kvartira_search_form = new Local_Kvartira_Search_Form();$kvartira_search_form->main(); Всё, пока ничего больше не трогал. Теперь у нас по идее искать будет local_kvartira_search.php. В него и нужно вносить все изменения. Так?
-
Вот: <?php class Template_Search extends SiteBill { public function getParams(){ $params=array(); if(''!==$this->getRequestValue('bassein')){ $params['bassein'] = (int)$this->getRequestValue('bassein'); } if(''!==$this->getRequestValue('nalichie_wifi')){ $params['nalichie_wifi'] = (int)$this->getRequestValue('nalichie_wifi'); } if(''!==$this->getRequestValue('childrens')){ $params['childrens'] = (int)$this->getRequestValue('childrens'); } if(''!==$this->getRequestValue('stoyanka')){ $params['stoyanka'] = (int)$this->getRequestValue('stoyanka'); } if(''!==$this->getRequestValue('animals_id')){ $params['animals_id'] = (int)$this->getRequestValue('animals_id'); } return $params; } public function run(){ $where_array=array(); $params=$this->getParams(); require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/model/model.php'); $data_model = new Data_Model(); $data_model_array = $data_model->get_kvartira_model(false); $data_model_array = $data_model_array['data']; if($params['bassein'] == 1 && isset($data_model_array['bassein'])){ $where_array[]=DB_PREFIX.'_data.bassein='.$params['bassein']; } if($params['nalichie_wifi'] == 1 && isset($data_model_array['nalichie_wifi'])){ $where_array[]=DB_PREFIX.'_data.nalichie_wifi='.$params['nalichie_wifi']; } if($params['childrens'] == 1 && isset($data_model_array['childrens'])){ $where_array[]=DB_PREFIX.'_data.childrens='.$params['childrens']; } if($params['stoyanka'] == 1 && isset($data_model_array['stoyanka'])){ $where_array[]=DB_PREFIX.'_data.stoyanka='.$params['stoyanka']; } if($params['animals_id'] == 1 && isset($data_model_array['animals_id'])){ $where_array[]=DB_PREFIX.'_data.animals_id='.$params['animals_id']; } return array( 'where'=>$where_array, 'params'=>$params ); } } bassein, nalichie_wifi, childrens, stoyanka - это checkbox. animals_id - это select_box. Поля не все, которые будут. Но добиться работоспособности хотя бы с этими. Остальные можно по аналогии сделать. Ну и плюс цена тоже не срабатывает. И будет ещё одно поле. Расстояние до моря в метрах. Поле типа safe_string с rules=Type:int. Его тоже желательно превратить в ползунки с диапазоном. Ну а так, вроде всё. Пока всё.
-
Давайте, для полноты картины и для того, что бы уже окончательно разобраться с настройками фильтра, будем разбираться с выводом и в дефолтную форму и в Пользовательскую форму. Поэтому по-порядку. Поля фильтра выглядят вот так: Регион (новый справочник, сами добавляли) Район (на базе стандартного Регион) Город (на базе стандартного Город) Тип объекта (категории, со структуры) 2 поля типа select_box, 5 полей типа checkbox. Цена (на базе дефолтного price). Конкретно это поле в Пользовательской форме хотелось бы превратить как в дефолтной форме в виде ползунков Цена от/Цена до По первым 4 параметрам поиска форма ищет нормально (по крайней мере навскидку). Всё фильтруется. А вот когда начинается комбинаторика с остальными полями - нет... Плюс к этому, не знаю почему, но в Пользовательской форме по цене тоже не ищет. Сам файл template_search.php брал из вот этого видео - То, что я писал выше касается Пользовательской формы, которую я создал вручную в Редактор форм - Формы поиска. Я так понял, что поля этой формы формируются автоматически и ничего не нужно дополнительно вставлять. С ней проблема такая, что она не ищет. После того, как я добавил в site.com/template/frontend/realia/main/ файл template_search.php она искать вроде начала (моя Пользовательская), но только если в адресной строке руками вписывать значения (я тоже писал об этом выше). Что касается того, как эти параметры созданы в редакторе форм, то даже не знаю, как вам показать. Обыкновенный чекбокс. Например "Наличие Wi-Fi" или "Парковка". Селект бокс, например - "Размещение с животными" {0~~}{1~~разрешено}{2~~запрещено}{3~~по согласованию}. Как-то так. В самих полях ничего военного нет.
-
Попробовал использовать template_search-подход, о котором вы писали. Т.е. добавил в site.com/template/frontend/realia/main/ файл template_search.php примерно вот такого содержания: <?php class Template_Search extends SiteBill { public function getParams(){ $params=array(); if(''!==$this->getRequestValue('parametr1')){ $params['parametr1'] = (int)$this->getRequestValue('parametr1'); } if(''!==$this->getRequestValue('parametr2')){ $params['parametr2'] = (int)$this->getRequestValue('parametr2'); } if(''!==$this->getRequestValue('parametr3')){ $params['parametr3'] = (int)$this->getRequestValue('parametr3'); } ........ return $params; } public function run(){ $where_array=array(); $params=$this->getParams(); require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/model/model.php'); $data_model = new Data_Model(); $data_model_array = $data_model->get_kvartira_model(false); $data_model_array = $data_model_array['data']; if($params['parametr1'] == 1 && isset($data_model_array['parametr1'])){ $where_array[]=DB_PREFIX.'_data.parametr1='.$params['parametr1']; } if($params['parametr2'] == 1 && isset($data_model_array['parametr2'])){ $where_array[]=DB_PREFIX.'_data.parametr2='.$params['parametr2']; } if($params['parametr3'] == 1 && isset($data_model_array['parametr3'])){ $where_array[]=DB_PREFIX.'_data.parametr3='.$params['parametr3']; } ........ return array( 'where'=>$where_array, 'params'=>$params ); } } Потестировал фильтр. Фильтр не ищет по выбранным параметрам поиска в самом фильтре. Выбираем нужные значения в фильтре и жмём "Искать". И ничего. Если посмотреть в адресную строку браузера, то там везде нули: site.com/index.php?region_id=&city_id=0&topic_id=0¶metr1=0¶metr2=0¶metr3=0&price=0 Хотя значения parametr1, parametr2 и parametr3 в фильтре выбраны и он должен по ним искать. А вот если в адресную строку в ручную передать значения параметров, т.е. вписать ...¶metr1=1¶metr2=1¶metr3=1&... то фильтрация срабатывает и нужные объявления находятся по заданным параметрам. т.е. получается, что проблема с передачей значений из фильтра в запрос? Как это исправить?
-
Здравствуйте. Возникла необходимость добавить в data поле с заголовком объявления. Добавили новое поле (Заголовок объявления/object_name_id, safe_string). Добавили вывод этого поля в превью и на страницу с объявлением. Вроде всё ок. Но это поле автоматом выводится в блоке "Кратко" на странице с объявлением. Как его оттуда убрать? Первое, что приходит в голову это назначить это поле только для администратора, но тогда оно пропадёт из формы подачи объявления с фронта.
-
Да, можно и так. Но например с категориями такой вариант как я понял не прокатит. Ибо на выходе мы получим что-то типа site.com/kvartiry-posutochno.html/realty25.html вместо необходимого site.com/kvartiry-posutochno/realty25.html. Я поэтому и уточню, не выплывет потом где-то сюрприза подобного и с городом? Я же всего знать не могу.
-
Нет, такое не включали. Отключил "Использовать активацию аккаунта по email при регистрации" - получилось зарегистрироваться с фронта. Наверное что-то с настройками почты со стороны сайта. Понять бы теперь где и что. Вот это я читал - http://wiki.sitebill.ru/index.php?title=Mail, там ничего военного вроде нет. Пересоздал почтовый ящик на сервере. Заменил его в поле "От чьего email будут отправляться письма с сайта. Подробнее о настройке тут (system_email)". Попробовал ещё раз зарегистрироваться с фронта. На это раз мне и сообщение о том, что "Поздравляем! Регистрация прошла успешно. Вам отправлено письмо с кодом активации Вашего аккаунта." и даже письмо активационное на почту пришло. Только в нём ссылка не активна: Здравствуйте. Вы зарегистрировали аккаунт на нашем сайте. Для активации аккаунта перейдите по ссылке: zxcvbn zxcvbn - это я такой логин отфонарный вбил при регистрации. Но он в виде обычного текста в письме, не кликабелен.