Дополнительные параметры поиска: различия между версиями

Материал из CMS Sitebill Wiki
Перейти к навигации Перейти к поиску
 
(не показаны 3 промежуточные версии этого же участника)
Строка 42: Строка 42:
 
Например:
 
Например:
 
<pre>
 
<pre>
if(isset($params['parking']) && isset($data_model_array['parking'])){
+
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'];
 
}
 
}
Строка 55: Строка 55:
  
 
Эти результаты будут добавлены к запросу, формируемому модулем поиска.
 
Эти результаты будут добавлены к запросу, формируемому модулем поиска.
 +
 +
== Добавление параметров поиска в /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(),
        ];
    }
}