orbit_exp / magic_flats_finder
This package's canonical repository appears to be gone and the package has been frozen as a result.
Requires
- php: >=5.6
- elasticsearch/elasticsearch: ~7.0
This package is auto-updated.
Last update: 2023-07-06 14:28:30 UTC
README
MagicFlatsFinder - feeds lid
Установка
Для установки желательно использовать composer. Внутреннего автозагрузчика пока нет.
composer require orbit_exp/magic_flats_finder
Инициализация
Простая инициализация выглядит так
$App = new \MagicFlatsFinder\App( [ 'xml' => 'path_or_link/to/xml/file', 'project' => \MagicFlatsFinder\App::PROJECT_DOMUSKVERA, ] );
параметры для передачи
** - обязательные параметры
project - код проекта ** PROJECT_DOMUSKVERA or domskver PROJECT_DOMBOR or dombor PROJECT_DOM128 or dom128 PROJECT_HEADLINER or headliner PROJECT_AKADEM or akadem PROJECT_GULLIVER or gulliverperm PROJECT_ROYALPARK or royalpark PROJECT_ILOVE or ilove PROJECT_BAUMANHAUSE or baumanhouse PROJECT_HLGULLIVER or hlgulliver xml - ссылка на хмл фид ** map_link - ссылка на json карту изображений fields_tmp - шаблон нейминга для полей в результирующем массиве debug - true / false - флаг режима отладки, по умолчанию fasle full_xml_file - ссылка на полную xml выгрузку из crm. Файл или ссылка map_buildings - карта строений объекта, обязательна при указании full_xml_file // очередь => строения очереди 1 =[ //номер строения => building_id 1 => 123 ] map_merge_buildings - карта объединения нескольких сущностей корпусов в одну //id главной сужности => массив зависимых сущностей 123 => [ 654, ] elastic_search - параметры для подключения к elastic search elastic_search = [ username => login password => 123 cloudId => Id облака, если испльльзуется облако, ]
Простой поиск
Простой вызов поиска выглядит следующим образом
Пример
$App->find( 123, // integer / id строерния [ 'select' => ['flats','building'], ] );
Параметры для передачи ** - обязательные параметры
xml_file (string) - ссылка на локальный xml select (array) - какие данные хотим получить в выбоке, принимает значения в виде массива. принимиет значения flats и building active (boolean) - вывести квартиры по статусы plans - параметры для планировок [ format - png / jpg / svg search - elastic ( тип карты изображений. Если параметр не задан, то по дефолту используется карта из параметра map_link ) ] filter - параметры для фильтрации discount - параметры для скидки
Фильтрация
Фильтрация по спискам
Пример
'filter' => [ 'by' => [ 'mixed_key' => ['247_2_1_3'], ], ]
Фильтрация может проходить по трем типам mixed_key / guid / id где mixed_key - составной ключ, собирается следующим образом
$mixed_key = $building_id.'_'.$section_id.'_'.$floor.'_'.$num_on_floor;
giud / id - по giud / id элемента
Фильтрация по параметрам
Фильтрация по параметрам поступна только для числовых значений.
Операторы сравнения
- больше | >
- меньше | <
- равно | =
- не равно | !=
- больше или равно | >=
- меньше или равно | <=
Пример
'filter' => [ [ 'floor_number' => [ '=' => 2, ], ], ], ]
floor_number - название поля из фида
Логические операторы
- AND
- OR
По умолчанию используется оператор AND
Для одного и того же поля можно задавать диапазоны значений, а так же задавать логический оператор
Пример
'filter' => [ [ 'floor_number' => [ 'logic' => 'OR', ['=' => 2], ['<' => 8], ], ], ], ]
При использовании фильтрования по нелькольким параметрам такк же можно задавать логичкские операторы
Пример
'filter' => [ [ 'logic' => 'AND', 'floor_number' => [ 'logic' => 'OR', ['=' => 2], ['<' => 8], ], ], 'section_number' => [ '!=' => 2 ], ], ]
Использование нескольких блоков для фильтрации
Пример
'filter' => [ 'logic' => 'OR', 'by' => [ 'mixed_key' => ['247_2_1_3'], ], [ 'logic' => 'AND', 'floor_number' => [ 'logic' => 'OR', ['=' => 2], ['<' => 8], ], ], 'section_number' => [ '!=' => 2 ], ], ]
Скидки
####Применение скидки на весь ассортимент
Пример
'discount' => [ 'all' => 10, ]
####Применение на предвыбранный список квартир
Пример
'discount' => [ 'select' => [ 'key' => 'guid', 'discount' => 5, 'list' => ['ba521761-ca1a-e711-80d1-005056010696'], ] ]
На список квартир (list) будет применена скидка (discount) key - тип ключей в списке list, может принимать типы guid / id / mixed_key
где mixed_key - составной ключ, собирается следующим образом
$mixed_key = $building_id.'_'.$section_id.'_'.$floor.'_'.$num_on_floor;
Бывают ситуации, когда в предвыбранном списке элементов есть разброс скидок. В этой ситуации можно задать скидку для всего списка и для конкретных элементов
Пример
'discount' => [ 'select' => [ 'key' => 'guid', 'discount' => 5, 'list' => [ 'ba521761-ca1a-e711-80d1-005056010696:9', //зададим элементу скидку 9% 'be521761-ca1a-e711-80d1-005056010696' //зададим элементу скидку равную значению discount - 5% ], ] ]
Группировка скидок
В ситуации, когда одну скидку нужно примерить на весь ассортимент, а на пулл элементов другую - можно группировать типы скидок
Пример
'discount' => [ 'all' => 10, //установим скидку 10% на все элементы //установим список исключений из 10% 'select' => [ 'key' => 'guid', 'discount' => 5, 'list' => [ 'ba521761-ca1a-e711-80d1-005056010696:9', //зададим элементу скидку 9% 'be521761-ca1a-e711-80d1-005056010696' //зададим элементу скидку равную значению discount - 5% ], ] ]
Сортировка
Сортировать элементы можно по целым и дробным значениям.
Параметры
- by - имя поле из массива элементов, ко которому будет вестись сортировка ( обязательный параметр )
- type - тип сортировки ASC / DESC. По умолчанию ASC
- separator - разделитель дробной части
- key - ключ, по которому будет вестись поиск элементов. По умолчанию guid
'sort' => [ 'by' => 'square', 'type' => 'DESC', 'separator' => '.' ],
Ограничение количества элементов
Можно ограничить количество выводимых элементов
'limit' => 13,
Очереди
Когда у ЖК несколько строений, то можно формировать очереди для дальнейшей выборки
$App->addToStack( 123, ['xml_file' => path_to_xml.xml'] ); $App->addToStack( 456, ['xml_file' => path_to_xml.xml'] ); $App->findByStack( $filter_and_sort_params );
Важно
- в заданном массиве select обязательно должен быть задан параметр key
- если в массиве select не задан параметр discount, то величина скидки будет тянуться из парамера all. В случае, если не задан и он, то скидка применять не будет.