-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.php
91 lines (73 loc) · 7.7 KB
/
search.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
/*****************************************************************************************************
* Страница поиска объектов недвижимости
*
* Алгоритм следующий:
* 1. Получив поисковый запрос пользователя помещаем его параметры в объект $searchRequest (класса SearchRequest)
* 2. Получаем на основе параметров поиска (и в будущем условия сортировки - по цене, по дате добавления...) массив $propertyLightArr, который содержит минимум сведений (id и координаты на карте) для ВСЕХ объектов, подходящих под параметры поиска. Причем массив отсортирован в соответствии с условием сортировки (первоначально только по цене).
* 3. По первым 20-ти объектам из отсортированного массива $propertyLightArr, получаем подробные сведения, в том числе, данные о фотографиях - $propertyFullArr.
* 4. Полученный отсортированный массив $propertyLightArr передаем через JSON формат клиенту для размещения меток на карте по ВСЕМ подходящим объявлениям
* 5. На основе полных сведений по первым 20-ти объектам если нужно (а первоначально обязательно) формируем представления для режима "Список + Карта" и "Список", помещаем полученный HTML для обоих видов списка в переменные $matterOfShortList и $matterOfFullParametersList
* 6. Кроме того на основе полных сведений по первым 20-ти объектам могут быть сформированы HTML блоки для баллунов (а первоначально формируются обязательно) - переменная $matterOfBalloonList. Это позволит быстро показывать баллуны на карте для этих объектов при клике пользователя на объявлении в списке режима "Список + Карта"
* 7. Размещаем вычисленный HTML для первых 20-ти объявлений в документе (шаблоне templ_search.php)
* 8. JS на клиенте формирует на основе $propertyLightArr метки на карте, соответствующие ВСЕМ подходящим под условия поиска объявлениям
* 9. При промотке списка автоматически запрашивается полная информация по следующим 20-ти объектам из массива $propertyLightArr. То есть дополняется как HTML для баллунов, так и HTML полного и краткого списка
*/
// Стартуем сессию с пользователем - сделать доступными переменные сессии
session_start();
// Подключаем нужные модели и представления
$websiteRoot = $_SERVER['DOCUMENT_ROOT'];
require_once $websiteRoot . '/models/DBconnect.php';
require_once $websiteRoot . '/models/GlobFunc.php';
require_once $websiteRoot . '/models/Logger.php';
require_once $websiteRoot . '/models/User.php';
require_once $websiteRoot . '/models/UserIncoming.php';
require_once $websiteRoot . '/models/SearchRequest.php';
require_once $websiteRoot . '/views/View.php';
// Удалось ли подключиться к БД?
if (DBconnect::get() == FALSE) die('Ошибка подключения к базе данных (. Попробуйте зайти к нам немного позже.');
// Инициализируем модель для запросившего страницу пользователя
$userIncoming = new UserIncoming();
// Инициализируем поисковый запрос значениями по умолчанию
$searchRequest = new SearchRequest(NULL);
// Готовим массив со списком районов в городе пользователя
$allDistrictsInCity = DBconnect::selectDistrictsForCity("Екатеринбург");
/***************************************************************************************************************
* ОТПРАВЛЕНА ФОРМА ПОИСКА
**************************************************************************************************************/
if (isset($_GET['fastSearchButton'])) {
$searchRequest->writeParamsFastFromGET();
}
// При выборе типа сортировки, параметр extendedSearchButton не отправляется, поэтому ориентируемся по наличию typeOfSorting
if (isset($_GET['extendedSearchButton']) || isset($_GET['typeOfSorting'])) {
$searchRequest->writeParamsExtendedFromGET();
}
/***************************************************************************************************************
* Если пользователь залогинен и указал в личном кабинете параметры поиска, но еще не нажимал кнопки Поиск на этой странице
**************************************************************************************************************/
if (!isset($_GET['fastSearchButton']) && !isset($_GET['extendedSearchButton']) && !isset($_GET['typeOfSorting']) && $userIncoming->login()) {
$searchRequest->setUserId($userIncoming->getId());
$searchRequest->writeFromDB();
}
/***************************************************************************************************************
* Получаем данные по соответствующим запросу объектам недвижимости из БД
**************************************************************************************************************/
$searchRequest->searchProperties(20);
/********************************************************************************
* ФОРМИРОВАНИЕ ПРЕДСТАВЛЕНИЯ (View)
*******************************************************************************/
// Инициализируем используемые в шаблоне(ах) переменные
$isLoggedIn = $userIncoming->login(); // Используется в templ_header.php
$amountUnreadMessages = $userIncoming->getAmountUnreadMessages(); // Количество непрочитанных уведомлений пользователя
$propertyLightArr = $searchRequest->getPropertyLightArr();
$propertyFullArr = $searchRequest->getPropertyFullArr();
$userSearchRequest = $searchRequest->getSearchRequestData();
$favoritePropertiesId = $userIncoming->getFavoritePropertiesId();
$mode = "search"; // Режим, согласно которому будут работать некоторые шаблоны
//$allDistrictsInCity
// Подсоединяем нужный основной шаблон
require $websiteRoot . "/templates/templ_search.php";
/********************************************************************************
* Закрываем соединение с БД
*******************************************************************************/
DBconnect::closeConnectToDB();