Дополнительные параметры поиска: различия между версиями
Abushyk (обсуждение | вклад) |
Kondin (обсуждение | вклад) |
||
(не показано 7 промежуточных версий 2 участников) | |||
Строка 4: | Строка 4: | ||
Основной код состоит из<br /> | Основной код состоит из<br /> | ||
− | + | <pre> | |
− | <?php | + | <?php |
− | class Template_Search extends SiteBill { | + | class Template_Search extends SiteBill { |
− | public function getParams(){ | + | public function getParams(){ |
− | $params=array(); | + | $params=array(); |
− | .... | + | .... |
− | return $params; | + | return $params; |
− | } | + | } |
− | public function run(){ | + | public function run(){ |
− | $where_array=array(); | + | $where_array=array(); |
− | $params=$this->getParams(); | + | $params=$this->getParams(); |
− | require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/model/model.php'); | + | require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/model/model.php'); |
− | $data_model = new Data_Model(); | + | $data_model = new Data_Model(); |
− | $data_model_array = $data_model->get_kvartira_model(false); | + | $data_model_array = $data_model->get_kvartira_model(false); |
− | $data_model_array = $data_model_array['data']; | + | $data_model_array = $data_model_array['data']; |
− | .... | + | .... |
− | return array( | + | return array( |
− | 'where'=>$where_array, | + | 'where'=>$where_array, |
− | 'params'=>$params | + | 'params'=>$params |
− | ); | + | ); |
− | } | + | } |
− | }< | + | } |
− | + | </pre> | |
+ | |||
Файл, при существовании, автоматически подключается модулем поиска и запускается методом run() | Файл, при существовании, автоматически подключается модулем поиска и запускается методом run() | ||
− | Метод Template_Search::getParams() предназначен для сбора переменных запроса, приведения их к необходимому виду и принятия решения о включении параметра в список обрабатываемых. | + | Метод '''Template_Search::getParams()''' предназначен для сбора переменных запроса, приведения их к необходимому виду и принятия решения о включении параметра в список обрабатываемых. |
Например: | Например: | ||
+ | <pre> | ||
if(''!==$this->getRequestValue('parking')){ | if(''!==$this->getRequestValue('parking')){ | ||
$params['parking'] = (int)$this->getRequestValue('parking'); | $params['parking'] = (int)$this->getRequestValue('parking'); | ||
} | } | ||
+ | </pre> | ||
если не пуста переменная parking, она приводится к целочисельному виду и передается в обработку. | если не пуста переменная parking, она приводится к целочисельному виду и передается в обработку. | ||
− | Метод Template_Search::run() получает собранные параметры и обрабатывает их явным образом. Иными словами этот метод должен знать, какие параметры ему придется обработать. | + | Метод '''Template_Search::run()''' получает собранные параметры и обрабатывает их явным образом. Иными словами этот метод должен знать, какие параметры ему придется обработать. |
Например: | Например: | ||
− | if | + | <pre> |
+ | if($params['parking'] == 1 && isset($data_model_array['parking'])){ | ||
$where_array[]=DB_PREFIX.'_data.parking='.$params['parking']; | $where_array[]=DB_PREFIX.'_data.parking='.$params['parking']; | ||
} | } | ||
− | найдя параметр parking метод проверяет присутствует ли в модели такое поле и, если да, формирует часть для раздела WHERE запроса на выборку. | + | </pre> |
+ | найдя параметр parking метод проверяет присутствует ли в модели такое поле и, если да, формирует часть для раздела WHERE запроса на выборку.<br /> | ||
+ | |||
+ | |||
+ | С таким же успехом мы мы могли бы передать из формы значение is_parking, но добавить в запрос выборку именно по полю parking.<br /> | ||
− | |||
− | Ответ от метода Template_Search::run() передается в виде массива элементов where - массив частей условий для WHERE запроса и params - массив параметров для формирования пейджера и сортировочных ссылок. | + | Ответ от метода '''Template_Search::run()''' передается в виде массива элементов where - массив частей условий для WHERE запроса и params - массив параметров для формирования пейджера и сортировочных ссылок.<br /> |
+ | |||
Эти результаты будут добавлены к запросу, формируемому модулем поиска. | Эти результаты будут добавлены к запросу, формируемому модулем поиска. | ||
+ | |||
+ | == Добавление параметров поиска в /template/frontend/НАЗВАНИЕ_ШАБЛОНА/hooks/hooks.php == | ||
+ | <br /> | ||
+ | Можно добавлять автоматическое распознвание параметров поиска, если добавить их так:<br /> | ||
+ | <pre> | ||
+ | SConfig::setConfigValueStatic('searchable_params', ['yandex', 'export_avito', 'export_domclick']); | ||
+ | </pre> | ||
+ | Тогда при использовании GET-запроса в к списку объектов можно указывать эти параметры и по ним будет выполнена фильтрация<br /> | ||
+ | '''?export_avito=1'''<br /> | ||
+ | Примечание: параметр export_avito - должен быть checkbox (т.е. значения 1/0)<br /> | ||
+ | |||
+ | == Сборщик фильтров в админке для объявлений template/frontend/local/admin/data/GridFilters.php == | ||
+ | <br /> | ||
+ | Класс позволяет автоматически собирать пункты меню для фильтра в объявлениях. <br /> | ||
+ | Необходимо, чтобы в классе был метод включающий ключевое слово '''filter'''<br /> | ||
+ | Пример класса | ||
+ | <pre> | ||
+ | namespace Template\local\admin\data; | ||
+ | |||
+ | use system\factories\ClassMethodsResult; | ||
+ | |||
+ | class GridFilters extends ClassMethodsResult | ||
+ | { | ||
+ | |||
+ | function filterNotSpecial () | ||
+ | { | ||
+ | return [ | ||
+ | 'href' => '/admin/?action=data&hot=-1', | ||
+ | 'title' => 'Не спец.предложения', | ||
+ | 'active' => (\SiteBill::$iRequest->get('hot') == -1 ? 1 : 0), | ||
+ | 'count' => \system\lib\model\eloquent\Data::where('hot', 0) | ||
+ | ->where('archived', 0) | ||
+ | ->get()->count(), | ||
+ | ]; | ||
+ | } | ||
+ | } | ||
+ | </pre> |
Текущая версия на 08:28, 19 мая 2023
Для добавления дополнительных параметров поиска (кроме тех, что обрабатываются моделью или стандартным модулем поиска) можно использовать файл локального поиска.
Этот файл должен быть расположен в папке /template/frontend/имя_шаблона/main/ и иметь имя template_search.php.
Основной код состоит из
<?php class Template_Search extends SiteBill { public function getParams(){ $params=array(); .... 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']; .... return array( 'where'=>$where_array, 'params'=>$params ); } }
Файл, при существовании, автоматически подключается модулем поиска и запускается методом run()
Метод Template_Search::getParams() предназначен для сбора переменных запроса, приведения их к необходимому виду и принятия решения о включении параметра в список обрабатываемых. Например:
if(''!==$this->getRequestValue('parking')){ $params['parking'] = (int)$this->getRequestValue('parking'); }
если не пуста переменная parking, она приводится к целочисельному виду и передается в обработку.
Метод Template_Search::run() получает собранные параметры и обрабатывает их явным образом. Иными словами этот метод должен знать, какие параметры ему придется обработать. Например:
if($params['parking'] == 1 && isset($data_model_array['parking'])){ $where_array[]=DB_PREFIX.'_data.parking='.$params['parking']; }
найдя параметр parking метод проверяет присутствует ли в модели такое поле и, если да, формирует часть для раздела WHERE запроса на выборку.
С таким же успехом мы мы могли бы передать из формы значение is_parking, но добавить в запрос выборку именно по полю parking.
Ответ от метода Template_Search::run() передается в виде массива элементов where - массив частей условий для WHERE запроса и params - массив параметров для формирования пейджера и сортировочных ссылок.
Эти результаты будут добавлены к запросу, формируемому модулем поиска.
Добавление параметров поиска в /template/frontend/НАЗВАНИЕ_ШАБЛОНА/hooks/hooks.php
Можно добавлять автоматическое распознвание параметров поиска, если добавить их так:
SConfig::setConfigValueStatic('searchable_params', ['yandex', 'export_avito', 'export_domclick']);
Тогда при использовании GET-запроса в к списку объектов можно указывать эти параметры и по ним будет выполнена фильтрация
?export_avito=1
Примечание: параметр export_avito - должен быть checkbox (т.е. значения 1/0)
Сборщик фильтров в админке для объявлений template/frontend/local/admin/data/GridFilters.php
Класс позволяет автоматически собирать пункты меню для фильтра в объявлениях.
Необходимо, чтобы в классе был метод включающий ключевое слово filter
Пример класса
namespace Template\local\admin\data; use system\factories\ClassMethodsResult; class GridFilters extends ClassMethodsResult { function filterNotSpecial () { return [ 'href' => '/admin/?action=data&hot=-1', 'title' => 'Не спец.предложения', 'active' => (\SiteBill::$iRequest->get('hot') == -1 ? 1 : 0), 'count' => \system\lib\model\eloquent\Data::where('hot', 0) ->where('archived', 0) ->get()->count(), ]; } }