angalex

как создать связи в форме поиска

Recommended Posts

подскажите пожалуйста, я взял создал элемент формы планировка ввиде выбора значения(хрущевка, улучшеная и т.д.) что нужно сделать, чтобы при выборе в значения поиск все-таки осуществлялся по данному параметру, а не просто был для красоты :) , так кстати и другими элементами форм

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


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

через редактор таблиц, добавить параметры, (просто посмотрите лубой параметр на выбор) и сделаейте на его основе

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


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

через редактор таблиц, добавить параметры, (просто посмотрите лубой параметр на выбор) и сделаейте на его основе

а можете привести маленький пример параметров, это внизу?где стоит: параметры и два поля со знаком равно между ними. Спасибо за ответ.

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


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

может Вы еще знаете, где в настройках или в каком файле можно отрегулировать количество выводимых квартир в таблице, по умолчанию выводится 20 строк, и где меняется порядок ячеек в строке-заголовке таблиц, например чтобы первыми стояли ячейки с улицей, номером дома, площадью,и т.п.

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


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

Для того, чтобы самостоятельно создавать таблицы объявлений, которые будут зависеть от тех полей которые вы создали в конструкторе полей форм. Вам нужно скачать вот этот архив: http://sitebill.ru/storage/beta/template.zip
Распакуйте его в ваш шаблон, структурно они вложились в 
/template/frontend/agency/main/
И заменили собой тот main.php, который лежит по-умолчанию.
Теперь смотрим строчку в этом новом main.php

 

$this->template->assert('main', '<p><br></p>'.$this->grid_adv());

Функция grid_adv() переопределена и ее можно увидеть прямо в main.php
Тут подключается локальный конструктор таблицы
 

require_once SITEBILL_DOCUMENT_ROOT. '/template/frontend/'.$this->getConfigValue('theme'). '/main/grid_constructor_local.php';

Теперь смотрим grid_constructor_local.php

 

Функция get_sitebill_adv_ext_base()
Тут есть пример определения дополнительного поля, которое мы добавили в виде select_box, называется house_type.
 

if ( $item_array['house_type'] > 0 ) {$ra[$item_id]['house_type_string'] = $kvartira_model['data']['house_type']['select_data'][$item_array['house_type']];}

В результате мы инициализировали house_type_string уже не ключом, а значением этого ключа, через модель данных.

Теперь в realty_grid.tpl
Мы можем обращаться к типу дома так:
 

{$grid_items[i].house_type_string}

Таким образом можно определять новые переменные, которые отличаются от обычных safe_string

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


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

В новой версии теперь появился усовершенствованный модуль для создания собственного поиска для любых параметров 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

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


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

Здравствуйте!
Подскажите пожалуйста, мне нужно добавить возможность описка по полям - "balka" и "square_all" в последнем хочу чтоб искало по промежутку минимум - максимум как в поле цена, по идее я должен сделать template_search.php который будет иметь такой вид 

 

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

 

но оно не ищет... что я сделал не так, подскажите пожалуйста на примере. Заранее очень благодарен.

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


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

Для поля balka в параметрах в редакторе форм вам надо добавить is_ranged = 1

Затем добавляйте ее в локальную форму поиска.

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


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

но оно не ищет... что я сделал не так, подскажите пожалуйста на примере. Заранее очень благодарен.

 

 

В вашем Template_Search надо указать для square_all, что вы ищете по промежутку.

План таков:

1) Отправка с формы. с формы у вас должно уходить два параметра - мин. и макс. по square_all (два текстовых инпута с именами square_all_min, square_all_max - эти имена не обязательно должны быть такими, но лучше использовать системное имя колонки и через подчеркивание постфикс min\max). Метод добавления этих инпутов в форму не важен. Можете вручную указать их в шаблоне, можете использовать параметр is_ranged=1 для square_all_min, еси используются локальные формы поиска.

2) Перехват параметров. эти параметры должны быть перехвачены. Часть параметров, такие как floor, floor_count обрабатываются самим движком изначально даже если они переданы в виде floor_min\floor_max, но большинство параметров надо перехватить. Для этого в Template_Search в getParams надо указать

if(''!==$this->getRequestValue('square_all_min')){    $params['square_all_min'] = $this->getRequestValue('square_all_min')}if(''!==$this->getRequestValue('square_all_max')){    $params['square_all_max'] = $this->getRequestValue('square_all_max')}

т.е. именно square_all_min и square_all_max.

Если вы считаете, что ваши параметры должны быть целыми числами, тогда смените условие на 

if(0!==(int)$this->getRequestValue('square_all_min')){    $params['square_all_min'] = (int)$this->getRequestValue('square_all_min')}

что бы не учитывать нулевых и пустых згачений.

 

3) Определение условий. В Template_Search в run() необходимо обработать отфильтрованные параметры

В вашем случае

if(isset($params['square_all_min']) && isset($data_model_array['square_all'])){    $where_array[]=DB_PREFIX.'_data.square_all>='.$params['square_all_min'];}if(isset($params['square_all_max']) && isset($data_model_array['square_all'])){    $where_array[]=DB_PREFIX.'_data.square_all<='.$params['square_all_max'];}

Вы проверили, перехватился ли параметр, пс ли поле, на которое ссылается параметр в модели (вдруг вы давно его удалили, а условия поиска не почистили) и указали, как оно должно наложить условие на выборку из БД.

 

 

В конце этих манипуляций вы возвращаете в движек массив условий фильтрации, который будет применен к выборке и массив перехваченных параметров, что бы они были учтены во всяких пейджерах\ссылках сортировок.

 

NB. Если вы не используете пользовательские сетки и локальный local_grid_constructor.php то движек автоматически должен обработать в виде диапазонов следующие поля

 

price_min, price_pm_min - ишется по полю price цена большая от price_min, price_pm_min

price , price_pm - ишется по полю price цена меньшая от price , price_pm

floor_min\floor_max - ищется по полю floor  значения большие/меньшие от floor_min\floor_max

floor_count_min\floor_count_max - ищется по полю floor_count значения большие/меньшие от floor_count_min\floor_count_max

square_min\square_max - ищется по полю square_all значения большие/меньшие от square_min\square_max

not_first_floor - ищется по полю floor значения для которых floor не равен 1

not_last_floor - ищется по полю floor значения для которых floor не равен значению floor_count 

live_square_min\live_square_max - ищется по полю square_live значения большие/меньшие от live_square_min\live_square_max

kitchen_square_min\kitchen_square_max - ищется по полю square_kitchen значения большие/меньшие от kitchen_square_min\kitchen_square_max

 

Это поведение наличествует в данный момент, но не обязательно будет поддержано в дальнейшем.

 

Иными словами, условия для таких полей включать в Template_Search не нужно.

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


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

Для поля balka в параметрах в редакторе форм добавил is_ranged = 1, залил вышеприведенный template_search.php ничего не открывается, белое окно... снес template_search.php сайт отображается но поиск не работает...

Если можно, выложите уже готовый template_search.php с этими двумя категориями дабы я по аналогии и остальные поля добавил.

П.С. По умолчанию работает только поиск по цене, остальных категорий нет, но поиск по площади что-то криво работает... вот и прошу дабы был пример с 2 полями - чтоб можно было ориентируясь на него и остальные править.

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


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

белое окно - там в template_search из вашего сообщения малеха скобок пропущенных было. Я вашем же сообщении заменил код, используете его - должна пропасть ошибка.

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


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

белое окно - там в template_search из вашего сообщения малеха скобок пропущенных было. Я вашем же сообщении заменил код, используете его - должна пропасть ошибка.

спасибо огромное, все равно - ничего не отображается... Помогите плиз!

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


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

если опять белое окно, найдите файл /index.php в корне. Там есть третья строка

//error_reporting(E_ALL);

 

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

После этого слеши нужно восстановить в исходное положение.

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


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

Там были проблемы, связаннные с локальным кодом. Поэтому обновлений не потребовалось. Если имеете какие-то непонятки или некорректную работу, пишите сюда, будем смотреть.

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


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

Создал локальный поиск. Отметил в нем одно поле чекбокс например Торг уместен и одно поле выпадающий список Материал стен. Отметил чекбокс и выбрал из списка . Поиска по этим параметрам не происходит. Почему?

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


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

Создал локальный поиск. Отметил в нем одно поле чекбокс например Торг уместен и одно поле выпадающий список Материал стен. Отметил чекбокс и выбрал из списка . Поиска по этим параметрам не происходит. Почему?

нужно прописать условия поиска в файле template_search.php

допустим у нас есть поле balka и я хочу чтоб оно присутствовало в форме поиска и была возможность искать по нему, вот мануал:

 

{ключ~~значение}

Ключ - лучше делать числовым значением. Это удобнее и для целостности БД (если вы вдруг поменяете значение "есть" на "что-то другое", а в полях базы так и останутся значения "есть".)

Если вам критично иметь осмысленные ключи

ТОгда 

перехват

if(''!==$this->getRequestValue('balka')){

$params['balka'] = $this->getRequestValue('balka'); // тут не надо (int) - вы перехватываете текст

}

обработка

if(isset($params['balka']) && isset($data_model_array['balka'])){

$where_array[]=DB_PREFIX."_data.balka='".$params['balka']."'"; //тут добавляем кавычки вокруг значения, ибо текст, а не число

}

В случае, если ключи у вас циферки

if(0!==(int)$this->getRequestValue('balka')){

$params['balka'] = (int)$this->getRequestValue('balka'); // тут приводим к целому - перехватываете число

}

но тут надо учитывать смысл ключей. Обычно ключ 0 означает отсутствие значения {0~~не указано}{1~~есть}{2~~нет}. Поєтому в зависимости от єти значений нужно принимать решение, какие значения balka из запроса могут считаться таковіми, что поиск по єтому параметру проводить не нужно. И отсекать не по равенству 0, а по какому-то другому принципу.

 

 

обработка

if(isset($params['balka']) && isset($data_model_array['balka'])){

$where_array[]=DB_PREFIX."_data.balka=".$params['balka']; //кавычки не нужны, так как число

}

 

т.е. файл template_search.php

должен иметь такое содержание

 

<?php

class Template_Search extends SiteBill {

    public function getParams(){

        $params=array();

       if(0!==(int)$this->getRequestValue('balka')){

$params['balka'] = (int)$this->getRequestValue('balka');

}

        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['balka']) && isset($data_model_array['balka'])){

$where_array[]=DB_PREFIX."_data.balka=".$params['balka']; //кавычки не нужны, так как число

}

        return array(

            'where'=>$where_array,

            'params'=>$params

        );

    }

 

и так каждый параметр

поле балка у меня было представлено в селектбоксе с таким параметром

 

{0~~выбрать}{1~~нет}{3~~да}

 

надеюсь кому-то помог)

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


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

Для лузера в програмировании будьте добры показать и написать как в "мурзилке" про локальный поиск (а лучше  без локального, только чтобы все прописанные поля отображались в расширенном поиске) 

1. Для полей чекбокс, где  логика (0-нет, 1-да)

2. Для поля select_by_query, где выборка идет из справочника

3. Для поля text area , где выборка будет идти в тексте объявления

4. Для поля select_box, где выборка будет идти {0~~выбрать}{1~~нет}{3~~да} и т.п.

5. Для поля date,  где выборка будет идти от и до

6. Для поля safe_string, где выборка будет идти от и до

 

Чтобы можно было скопировать в нужный файл CMC и поменять только название полей с таблицы

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


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

Предложение для разработчиков.
Создать наподобия редактора форм как при добавлении объявления. 

В локальнай редактор поиска, в зависимости от выбранного  раздела представляются поля необходимые и учтенные в этом разделе при добавлении.

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


Ссылка на сообщение
Поделиться на других сайтах
В 17 декабря 2013 г. в 08:25, Realtor сказал:

Для лузера в програмировании будьте добры показать и написать как в "мурзилке" про локальный поиск (а лучше  без локального, только чтобы все прописанные поля отображались в расширенном поиске)

1. Для полей чекбокс, где  логика (0-нет, 1-да)

2. Для поля select_by_query, где выборка идет из справочника

3. Для поля text area , где выборка будет идти в тексте объявления

4. Для поля select_box, где выборка будет идти {0~~выбрать}{1~~нет}{3~~да} и т.п.

5. Для поля date,  где выборка будет идти от и до

6. Для поля safe_string, где выборка будет идти от и до


 

Чтобы можно было скопировать в нужный файл CMC и поменять только название полей с таблицы

вот хороший вопрос был для пользователей- чтобы один раз написать, овтетить, и вопросы пользователей закрыть и решить -пусть пользуются на здоровье :) 
 

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


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

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

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

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

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

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

Войти

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

Войти сейчас