infected1992

Исправление функционала новых форм поиска

Recommended Posts

При создание в админке новых форм поиска столкнулся с очень большой ошибкой в их функционале. При поиске на сайте, если не заполнено хотябы одно поле, то поиск выдаст 0 значений. Как сделать так, чтобы поиск осуществлялся при одном или двух и тд заполненных полях как это сделано в общей форме?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нужно, чтобы в элементах новых было указано значение по-умолчанию 0.

Можете привести пример конкретного значения, на котором возникает такая ошибка. Разберем на его примере, что нужно сделать с ним.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Например не работает поле "Общая площадь, жилая площадь, кухни и тд", они по идее должно быть со значением от и до "его я пытаюсь добиться вставкой свойства "is_ranged=1".

Но с ним и без него ничего не выходит, поиск по таким полям не осуществляется вообще.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В базовой версии есть поиск по общей площади.

Остальные параметры нужно добавлять вручную

http://wiki.sitebill.ru/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В базовой версии есть поиск по общей площади.

Остальные параметры нужно добавлять вручную

http://wiki.sitebill.ru/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0

Я хочу именно через редактор новых форм поиска в админки сделать новые поля. Как мне там заставить нормально работать поиск по полям

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я хочу именно через редактор новых форм поиска в админки сделать новые поля. Как мне там заставить нормально работать поиск по полям

Никак, только вручную добавлять нужно через описанный способ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Никак, только вручную добавлять нужно через описанный способ.

Хорошо, тогда как сделать разные формы поиска к разным разделам. Я так понимаю нужно сделать для каждого раздела свой файл standart_searchform.tpl, но как их вывести к разделу?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Сначала создаем форму поиска и прикрепляем ее к разделу нужному

2. Затем добавляем параметры поиска по этой инструкции http://wiki.sitebill.ru/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Простите, если пропустил чего, но не нашёл здесь обсуждение...

Ситуация такая.

Создана новая форма поиска. В ней одно поле колонки таблицы safe_string "Название". Мне надо искать объекты у которых есть совпадение в колонке таблицы nazvanie со словом, введённым в поле поиска. 

На настоящий момент поиск не работает совсем. Т.е. при введении любого слова в поле, выдаётся нефильтрованный список объектов.

 

содержание template_search.php:

 

<?php

class Template_Search extends SiteBill {
    public function getParams(){
        $params=array();
if(''!==(int)$this->getRequestValue('nazvanie')){    
                        $params['nazvanie'] = (int)$this->getRequestValue('nazvanie');
                }else{
                        unset($params['nazvanie']);
                }
 
        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'];
        if(isset($params['nazvanie']) && isset($data_model_array['nazvanie'])){
                        $where_array[]=DB_PREFIX.'_data.nazvanie='.$params['nazvanie'];
                }
        return array(
            'where'=>$where_array,
            'params'=>$params
        );
    }
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1.

(int)$this->getRequestValue('nazvanie')

(int) перед выражением приводит результат выражения к целому числу.

Т.е. любая строка будет приведена к нулю.

Так что (int) нужно убрать. И в сравнении, и в присвоении в следующей строке.

 

2.

 $where_array[]=DB_PREFIX.'_data.nazvanie='.$params['nazvanie'];

 

Поиск идет по строке - строка должна быть обрамлена кавычками, так как это не число.

$where_array[]=DB_PREFIX.'_data.nazvanie='\'.$params['nazvanie'].'\'';

3. Указанное выше условие ищет по точному совпадению. Т.е. забив "му" будет искаться ровно "му", но не "мумия". Более шире будет

$where_array[]=DB_PREFIX.'_data.nazvanie LIKE '%\'.$params['nazvanie'].'%\'';

Тгда будет искаться

мумия

теорему

Зигмунд

 

LIKE - это педальный тормоз в поиске. Стоит это учитывать на больших БД.

 

4. Безопасность.

$nazvanie=$this->getRequestValue('nazvanie');if($nazvanie!=''){$nazvanie=trim(striptags((urldecode($nazvanie)));$nazvanie=preg_replace('/[^a-zа-яё0-9.,-]/i', '', $nazvanie);if(''!==$nazvanie){$params['nazvanie'] = (int)$this->getRequestValue('nazvanie');}else{unset($params['nazvanie']);}}else{unset($params['nazvanie']);}

Как-то так. Лучше перебдеть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо. Что-то начало получаться...)

Только с кавычками Вы немного перемудрили.

Правильнее будет так:

$where_array[]=DB_PREFIX.'_data.nazvanie LIKE '.'%\''.$params['nazvanie'].'%\'';

 

Вот только поиск по-прежнему не работает, теперь в результате ничего не выдаёт....

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Только с кавычками Вы немного перемудрили.

 

 

Верно. Вот так:

$where_array[]=DB_PREFIX.'_data.nazvanie LIKE \'%'.$params['nazvanie'].'%\'';

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно ли организовать и реализовать, как в новой вкладке поиска искать телефон из таблицы например posredniki состоящей из полей id и tel ( в поле tel  указаны номера телефонов посредников), для проверки принадлежит ли набранный в поиске телефон к посредникам или нет. Т.е. выдача поиска будет указывать Номер посредника или Номер не посредника.
Функцию поиска организовать как в админке поиск по тел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно ли организовать и реализовать, как в новой вкладке поиска искать телефон из таблицы например posredniki

 

Это для администратора или для пользователя?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это для администратора или для пользователя?

1.Для пользователя на главной, в поиске как новую вкладку

2. Для админки кнопку проверки на наличие тел. посредников в таблице data с полем phone.

При нажатии на кнопку Проверка выдается таблица с объявлениями в которых будут встречаться телефоны посредников, которые можно оптом удалить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Костя а можно вместо "самонаборных форм поиска", в коде убрать их вывод и впихнуть напрямую tpl файлы с формами поиска сделанными в html ручками, типа адванседсеарчформ? но уже со своими полями и со своими размерами , так чтобы нажимая кнопку "найти" все работало и искало так же как и в "самонаборных" функциях. по сути же это просто формы в которых выбираются параметры и передаются. и по ним строится сетка
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
8 минут назад, doma сказал:

Костя а можно вместо "самонаборных форм поиска", в коде убрать их вывод и впихнуть напрямую tpl файлы с формами поиска сделанными в html ручками, типа адванседсеарчформ? но уже со своими полями и со своими размерами , так чтобы нажимая кнопку "найти" все работало и искало так же как и в "самонаборных" функциях. по сути же это просто формы в которых выбираются параметры и передаются. и по ним строится сетка
 

Конечно можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас