В настоящее время я создаю сайт по недвижимости с использованием CodeIgniter.Из-за планирования цифрового маркетинга у меня есть фиксированная структура для URL, которая следует этому набору правил:
root /properties/
region name (all-regions|region-1|...|region-n)/
operation (all-operations|sale|rent|transfer|vacational-rent)/
property type (all-property-types|house|apartment|...)/
price range from-(:num)-to-(:num)/
city (:any)/
neighborhood (:any)
Итак, так я обрабатываю свои маршруты для CodeIgniter, и это работает.
Правила таковы:
Region
является родительским для City
, а City
является родительским для Neighborhood
, идея состоит в том,что если Region
не выбрано City
не отображается и если City
не выбрано Neighborhood
не отображается. - Иерархия для этого выглядит примерно так:
Region -> City -> Neighborhood
так что, если, скажем,Neighborhood
был выбран, как только я удаляю City
окрестности также удаляются, и если я удаляю Region
, удаляются и City
, и Neighborhood
. Operation
является родительским для Price range
Таким образом, он работает так же, как и выше, если не выбран Operation
, не отображается Price range
, и если я удаляю Operation
в качестве фильтра, если был активен Price range
, он также удаляется.
Мои начальные параметры фильтра:
- Регион
- Операция
- Тип свойства
Тип свойства имеет дополнительный материал, но так как он варьируется в зависимости от типа свойства, я собираюсь передать его через GET или другой сложный параметр.
Дополнительные данные о том, как создаются ссылки:
- Состояние по умолчанию:
/properties
- Если я выберу регион:
/properties/region-1
- Если я выберу регион и операцию:
/properties/region-1/sale
НО также может случиться так, что пользователь сразу перейдет к операции или типу свойства, и тогда у меня будетчто-то вроде этого:
- Нет региона, операция:
/properties/all-regions/sale
- Нет региона, нет операции, тип свойства:
/properties/all-regions/all-operations/house
ЭТО также может произойти так:
- Регион, без операции, без типа собственности, без ценового диапазона, город:
/properties/region-1/all-operations/from-0-to-1000000000/all-property-types/city-1
Что я испытываю трудности, так это то, что процесс генерации ссылок и генерации ссылок удаления параметров становится достаточно динамичным, не возвращаясь к множеству условий на основе активных и неактивных фильтров.Я также ищу оптимальный способ загрузки содержимого фильтра и условия для его правильного отображения и с правильно сформированными ссылками.
В настоящее время у меня есть таблица базы данных Filters
, которая содержит следующие поля:
- ID фильтра
- Имя фильтра
- Slug фильтра
- Id Parent Filter (0 для основного фильтра, ID фильтра родителя для дочерних фильтров)
- Наименование процедуры (на данный момент функции моей модели фильтров в CodeIgniter
- Порядок появления (только для визуального заказа фильтров)
У меня сейчас есть функциякоторый получает параметры фильтра функции и классифицирует их, что-то вроде этого:
public function index($region_slug = null, $operation_slug = null, $property_type_slug = null, $price_range_min = null, $price_range_max = null, $city_slug = null, $neighborhood_slug = null) {
$this->data->filters = $this->filters_m->get_filter_data($region_slug, $operation_slug, $property_type_slug, $price_range_min, $price_range_max, $city_slug, $neighborhood_slug);
........
}
In Filters_m.php:
public function get_filter_data(........ // parameters mentioned above)
{
if($region_slug == 'all-regions') {
$region_slug = null;
}
if($operation_slug == 'all-operations') {
$operation_slug = null;
}
if($property_type_slug == 'all-property-types') {
$property_type_slug = null;
}
$filter_data = array(
array('reach' => 'region', 'value' => $region_slug, 'show' => ($region_slug ? false : true)),
array('reach' => 'operation', 'value' => $operation_slug, 'show' => ($operation_slug ? false : true)),
array('reach' => 'property_type', 'value' => $property_type_slug, 'show' => ($property_type_slug ? false : true)),
array('reach' => 'price_range_min', 'value' => $price_range_min, 'show' => (($operation_slug && !$price_range_min && !$price_range_max) ? true : false), 'parent' => 'operation'),
array('reach' => 'price_range_max', 'value' => $price_range_max, 'show' => (($operation_slug && !$price_range_min && !$price_range_max) ? true : false), 'parent' => 'operation'),
array('reach' => 'city', 'value' => $city_slug, 'show' => (($region_slug && !$city_slug) ? true : false), 'parent' => 'state'),
array('reach' => 'neighborhood', 'value' => $neighborhood_slug, 'show' => (($region_slug && $city_slug && !$neighborhood_slug) ? true : false), 'parent' => 'city', 'top_parent' => 'region')
);
......
}
После этого (.....), я сканирую массив с помощью foreach и разделяю их в массиве, который имеет два основных индекса: active
и inactive
в зависимости от значения фильтров.
Я создалфункция, которая получает какой параметр тo удалить из активных фильтров на основе параметра досягаемости и переместить индекс в неактивные фильтры и сбросить активный индекс.
Какие-либо рекомендации по улучшению этого или некоторого метода, чтобы сделать его более динамичным?Я думал о подготовке специальной структуры данных для этого, но я не уверен, что это решит мою проблему.