Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Filters
- {
- //метаинформация для построения отображения фильтров на странице
- public $db;
- public $filters_number_of_rooms;
- public $filters_floor;
- public $filters_section;
- public $filters_section_id;
- public $section_stage;
- public $filters_area;
- public $filters_area_min;
- public $filters_area_max;
- public $filters_stage;
- public $filters_stage_id;
- public $filters_price;
- public $filters_price_min;
- public $filters_price_max;
- public $apartments = null;
- public function __construct($db)
- {
- $this->db = $db;
- }
- //извлечение всех квартир
- public function all_apartments($area_sort = 'ASC') {
- if (!is_null($this->apartments) && ($area_sort = 'ASC')) {
- return $this->apartments;
- }
- $all_apartments = array();
- $this->db->execute("SELECT `rnbw_apartments`.*,
- `rnbw_sections`.`id_stage` AS id_stage,
- `rnbw_sections`.`name` AS section_name,
- `rnbw_sections`.`id_stage` AS section_stage,
- `rnbw_stage`.`name` AS stage_name,
- `rnbw_floors`.`floors_num` AS floor_number,
- `rnbw_floors`.`name` AS floor_name,
- `rnbw_floors`.`annotation` AS floor_name_pretty
- FROM `rnbw_apartments`
- LEFT JOIN `rnbw_sections`
- ON `rnbw_apartments`.`id_section` = `rnbw_sections`.`id`
- LEFT JOIN `rnbw_floors`
- ON `rnbw_apartments`.`id_floor` = `rnbw_floors`.`id`
- LEFT JOIN `rnbw_stage`
- ON `rnbw_sections`.`id_stage` = `rnbw_stage`.`id`
- WHERE `pstatus`='free'
- AND `is_non_residential` IS NULL
- ORDER BY `rnbw_apartments`.`total_area` * 1 {$area_sort}");
- if (isset($this->db->data[0])) {
- foreach ($this->db->data as $one){
- $all_apartments[] = new PrettyApartment($one);
- }
- //строим фильтры
- //Очередь
- $this->filters_stage_id = array_unique(array_column($this->db->data, 'id_stage'));
- ksort($this->filters_stage_id);
- $this->filters_stage = array_unique(array_column($this->db->data, 'stage_name'));
- ksort($this->filters_stage);
- $this->filters_stage = array_combine($this->filters_stage_id, $this->filters_stage);
- //секции
- //связь между секцией и очередью
- $stage_id = array_column($this->db->data, 'id_stage');
- ksort($stage_id);
- $section_id = array_column($this->db->data, 'id_section');
- ksort($section_id);
- $this->section_stage = array_combine ($section_id, $stage_id);
- $this->filters_section_id = array_unique(array_column($this->db->data, 'id_section'));
- ksort($this->filters_section_id);
- $this->filters_section = array_unique(array_column($this->db->data, 'section_name'));
- ksort($this->filters_section);
- $this->filters_section = array_combine($this->filters_section_id, $this->filters_section);
- //Этажи
- $this->filters_floor = array_unique(array_column($this->db->data, 'floor_number'));
- ksort($this->filters_floor);
- $this->filters_floor = max($this->filters_floor);
- //к-во комнат
- $this->filters_number_of_rooms = array(
- 6 => 'Студия',
- 1 => '1 комнатная',
- 2 => '2 комнатная',
- 3 => '3 комнатная',
- 4 => 'Кладовки',
- 5 => 'Коммерческая недвижимость',
- );
- //площадь
- $this->filters_area = array_column($this->db->data, 'total_area');
- array_walk($this->filters_area, function (&$item) { $item = floatval(str_replace(',', '.', $item)); });
- ksort($this->filters_area);
- $this->filters_area_min = floor(min($this->filters_area));
- $this->filters_area_max = ceil(max($this->filters_area));
- //цена
- $this->filters_price = array_unique(array_column($this->db->data, 'price'));
- $this->filters_price = array_filter($this->filters_price, function ($price){
- return !is_null($price);
- });
- ksort($this->filters_price);
- if (!empty($this->filters_price)){
- $this->filters_price_min = floor(min($this->filters_price));
- $this->filters_price_max = ceil(max($this->filters_price));
- } else{
- $this->filters_price_min = $this->filters_price_max = 0;
- };
- }
- $this->apartments = $all_apartments;
- return $all_apartments;
- }
- //извлечение квартир по ключам
- public function filter_apartment($filter_keys) {
- if (is_null($this->apartments)) {
- $this->all_apartments();
- }
- //определение значений различных ключей
- $filtered_list_of_apartments = array_filter($this->apartments, function($apartment) use (&$filter_keys) {
- foreach ($filter_keys as $key => $key_value) {
- if (!isset($apartment->{$key})){
- return false;
- }
- if (in_array($key, array('stage', 'number_rooms'))) {
- if ((implode($key_value, '') != '') && !in_array($apartment->{$key}, $key_value)) {
- return false;
- }
- } else if ($key == 'section') {
- if (!in_array($apartment->section_id, $key_value)) {
- return false;
- }
- } else {
- array_walk($key_value, function (&$item) { $item = floatval(str_replace(',', '.', $item)); });
- $min = min($key_value);
- $max = max($key_value);
- $actual_value = floatval(str_replace(',', '.', $apartment->{$key}));
- if (($min > $actual_value) || ($actual_value > $max)) {
- return false;
- }
- }
- }
- return true;
- });
- return $filtered_list_of_apartments;
- }
- }
- <?php
- class PrettyApartment
- {
- public $id;
- public $apartment_number;
- public $number_of_rooms;
- public $number_rooms;
- public $floor_id;
- public $floor_number;
- public $floor;//floors_num поле в базе
- public $floor_name_pretty;
- public $stage_id;
- public $stage;
- public $section_id;
- public $section;
- public $total_area;
- public $price;
- public $apartment_url;
- protected $plan;
- public function __construct($raw_apartment)
- {
- $this->id = $raw_apartment['id'];
- $this->number_rooms = $raw_apartment['number_rooms'];
- switch ($raw_apartment['number_rooms']){
- case 6:
- $this->number_of_rooms = 'Студия';
- break;
- case 1:
- $this->number_of_rooms = '1 комната';
- break;
- case 2:
- $this->number_of_rooms = '2 комнаты';
- break;
- case 3:
- $this->number_of_rooms = '3 комнаты';
- break;
- case 4:
- $this->number_of_rooms = 'Кладовки';
- break;
- case 5:
- $this->number_of_rooms = 'Коммерческая недвижимость';
- break;
- };
- $this->apartment_number = $raw_apartment['num_apartment'];
- $this->total_area = $raw_apartment['total_area'];
- $this->plan = $raw_apartment['visualization'];
- $this->price = $raw_apartment['price'];
- $this->apartment_url = '/rooms/'.$raw_apartment['id'].'-room/';
- $this->floor_id = $raw_apartment['id_floor'];
- $this->floor_name_pretty = $raw_apartment['floor_name_pretty'];
- $this->floor = $raw_apartment['floor_name'];
- $this->floor_number = $raw_apartment['floor_number'];
- $this->section_id = $raw_apartment['id_section'];
- $this->section = $raw_apartment['section_name'];
- $this->stage_id = $raw_apartment['id_stage'];
- $this->stage = $raw_apartment['stage_name'];
- }
- public function show_apartment_plan($size) {
- if ($this->plan != null){
- $img = getImg($this->plan);
- if (isset ($img['0'])){
- return $img['0'][$size];
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment