koreshok

добавить новые поля в поиск (template_search и др.)

Recommended Posts

35 минут назад, 72realty сказал:

У меня работает.

В фильтре поиска:

<div class="col-md-4">
                                     <label>Улица или слово:</label>
                    <input name="srch_word" size="10" type="text" value="{$srch_word}" placeholder="Поиск по улице или слову из объявления">
                                    </div>

В шаблоне в папке main-template_search.php:

if(isset($params['srch_word'])){
            $where_array[]= '('.DB_PREFIX.'_data.text LIKE \'%' . $params['srch_word'] . '%\''.' OR '.DB_PREFIX.'_data.address LIKE \'%' . $params['srch_word'] . '%\''.' 
            OR '.DB_PREFIX.'_data.street_id in (select street_id from '.DB_PREFIX.'_street where name like \'%' . $params['srch_word'] . '%\')
            OR '.DB_PREFIX.'_data.complex_id in (select complex_id from '.DB_PREFIX.'_complex where name like \'%' . $params['srch_word'] . '%\') )
            ';
        }

Посмотреть как работает можно здесь

 

В шаблоне реалия такое работает ? вопрос к разработчикам.
И попутно спросим в посте написан файл main-template_search.php  в шаблоне Реалия такой имеется ? и если есть то где ? и правильно ли в него вносит такие правки?

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


Ссылка на сообщение
Поделиться на других сайтах
В 25.02.2018 в 00:30, doma сказал:

В шаблоне реалия такое работает ? вопрос к разработчикам.
И попутно спросим в посте написан файл main-template_search.php  в шаблоне Реалия такой имеется ? и если есть то где ? и правильно ли в него вносит такие правки?

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

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


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

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

а можно ли сделать поиск по пользователю?  причем если например пользователей всего 500 из них например 80 агентств остальные от пользователей. и к примеру в выпадающем списке был бы список всех этих агентств и одно поле "от пользователя" куда объединяться все остальные объявления от частников

 

если это сложно - то можно как вариант сделать поиск по конкретному пользователю -плохо только то что в выпадающем списке будет например 500 и более пользователей

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


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

а можно ли сделать поиск по пользователю?  причем если например пользователей всего 500 из них например 80 агентств остальные от пользователей. и к примеру в выпадающем списке был бы список всех этих агентств и одно поле "от пользователя" куда объединяться все остальные объявления от частнико

если это сложно - то можно как вариант сделать поиск по конкретному пользователю -плохо только то что в выпадающем списке будет например 500 и более пользователей

Такой поиск (по пользователю сделать можно)

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


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

Всем доброе время суток.
Есть вопрос по форме поиска.
Так как есть в разных регионах населенные пункты с одинаковыми названиями.
Как реализовать так чтоб при выборе региона можно было выбрать населенные пункты только этого региона?
Честно говоря, думал, что в стандартной форме поиска данная функция была реализована.

форма поиска.jpg

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


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

Наберите в поиске "связанные элементы", "linken","depend"

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


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

Всем доброе время суток.
Есть вопрос по форме поиска.
Так как есть в разных регионах населенные пункты с одинаковыми названиями.
Как реализовать так чтоб при выборе региона можно было выбрать населенные пункты только этого региона?
Честно говоря, думал, что в стандартной форме поиска данная функция была реализована.

У справочников изначально существует подчиненность - Страна-Регион-Город-Улица. Вы можете в эту цепочку всключить Районы (города) и переподчинить Улицы от городов к Районам (указывается в Настройках). Если вы загрузили справочник городов без привязки их к регионам, то такие города будут общими для всех регионов. Редактируйте свои справочники. 

Посоветую от дефолтной схемы перейти на "Связанные элементы", т.к. наверняка вам понадобится добавить Районы (областные) и населенные пункты подключить к этому справочнику а уже его к Регионам. Связанные элементы позволят вам подключать справочники в подчиненность по своему усмотрению, хоть Страны к Улицам, хоть Регионы к Шоссе и т.п.

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


Ссылка на сообщение
Поделиться на других сайтах
В 09.01.2018 в 21:24, abushyk сказал:

Я бы посоветовал не использовать параметр с именем srch_word для поиска по тексту. Параметр с таким же именем обрабатывается системой и могут быть нестыковки в результатах.

Добрый день. После установки ряда переменных в template_search простой заход в категорию topic вываливает тольк те объявления, что перед этим проходили фильтр. Скажем, в поиске по кастомной boolean-переменной forChildren=1 выходили 3 объявления. Все вроде ок, только теперь, заходя в топик /sanatorii/ вместо 8 объявлений вываливаются те же 3. В чем проблема?

UPD: эта фигня теперь даже в админке такая! Только объявления с установленным параметром forChildren=1! Хэлп!

Вот template_search:

<?php
class Template_Search extends SiteBill {
    public function getParams(){
        $params=array();
if(''!==$this->getRequestValue('situated')){$params['situated'] = (int)$this->getRequestValue('situated');}

if(NULL!==$this->getRequestValue('forChildren')){$params['forChildren'] = 1;}
if(NULL!==$this->getRequestValue('forKids')){$params['forKids'] = 1;}
if(NULL!==$this->getRequestValue('forYouth')){$params['forYouth'] = 1;}
if(NULL!==$this->getRequestValue('forAdult')){$params['forAdult'] = 1;}
if(NULL!==$this->getRequestValue('forOld')){$params['forOld'] = 1;}
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['situated']) && isset($data_model_array['situated'])){$where_array[]=DB_PREFIX.'_data.situated='.$params['situated'];}

if(isset($params['forChildren']) && isset($data_model_array['forChildren'])){$where_array[]=DB_PREFIX.'_data.forChildren=1';}
if(isset($params['forKids']) && isset($data_model_array['forKids'])){$where_array[]=DB_PREFIX.'_data.forKids=1';}
if(isset($params['forYouth']) && isset($data_model_array['forYouth'])){$where_array[]=DB_PREFIX.'_data.forYouth=1';}
if(isset($params['forAdult']) && isset($data_model_array['forAdult'])){$where_array[]=DB_PREFIX.'_data.forAdult=1';}
if(isset($params['forOld']) && isset($data_model_array['forOld'])){$where_array[]=DB_PREFIX.'_data.forOld=1';}

        return array(
            'where'=>$where_array,
            'params'=>$params	
        );
    }
}

 

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


Ссылка на сообщение
Поделиться на других сайтах
if(NULL!==$this->getRequestValue('forChildren'))

а если использовать более явную проверку (так как это чекбокс, то можно проверять четко по его значению) ---->

if(NULL!==$this->getRequestValue('forChildren') && 1===intval($this->getRequestValue('forChildren')))

 

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


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

if(NULL!==$this->getRequestValue('forChildren'))

а если использовать более явную проверку (так как это чекбокс, то можно проверять четко по его значению) ---->


if(NULL!==$this->getRequestValue('forChildren') && 1===intval($this->getRequestValue('forChildren')))

 

Что это изменит? Архитектура принципиально же не поменяется.

Я вообще удалял из template_search эту проверку - ПОЛНОСТЬЮ - по этому параметру check forChildren - и все равно у меня везде, включая админку, вываливаются только объявления с этим параметром. Где-то не чистится кэш - хотя я вручную подчищал папку cache/compile/ - в этом вот проблема. Может где-то доступы не установлены на 777?

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


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

Кеширование запросов в коде есть. Но я не помню включается ли оно автоматически. Посмотрите Настройки - Общее состояние конфигины "Включить кэширование SQL-запросов". Если она установлена в 1, поменяйте на 0 и тогда гляньте, продолжает ли подфильтровывать с этими параметрами.

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


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

Кеширование запросов в коде есть. Но я не помню включается ли оно автоматически. Посмотрите Настройки - Общее состояние конфигины "Включить кэширование SQL-запросов". Если она установлена в 1, поменяйте на 0 и тогда гляньте, продолжает ли подфильтровывать с этими параметрами.

Кэширование выключено, время кэша, кстати, все равно всего 60 сек

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


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

а Настройки - Общее - Разрешить поиск по тэгам во фронтенде (allow_tags_search_frontend) - включена?

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


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

а Настройки - Общее - Разрешить поиск по тэгам во фронтенде (allow_tags_search_frontend) - включена?

Была выключена

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


Ссылка на сообщение
Поделиться на других сайтах
В 28.08.2018 в 12:08, abushyk сказал:

Давайте тогда в ПМ с адресом сайта и фтп.

Короче, помощь больше не нужна - систему подвешивало что-то из следующего в tempplate_:

if(''!==$this->getRequestValue('situated')){$params['situated'] = (int)$this->getRequestValue('situated');}
...
if(isset($params['situated']) && isset($data_model_array['situated'])){$where_array[]=DB_PREFIX.'_data.situated='.$params['situated'];}

 

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


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

Короче, помощь больше не нужна - систему подвешивало что-то из следующего в tempplate_:


if(''!==$this->getRequestValue('situated')){$params['situated'] = (int)$this->getRequestValue('situated');}
...
if(isset($params['situated']) && isset($data_model_array['situated'])){$where_array[]=DB_PREFIX.'_data.situated='.$params['situated'];}

 

а что за параметры поиска это ? и где применяется : Можно ссылку ? И где можно посмотреть ?

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


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

а что за параметры поиска это ? и где применяется : Можно ссылку ? И где можно посмотреть ?

Читайте тему, все ж написано

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


Ссылка на сообщение
Поделиться на других сайтах
7 часов назад, metrpro сказал:

Читайте тему, все ж написано

спрашивалось про параметры 

'situated'forChildren, forKids'forYouth'forAdult''forOld'

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

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


Ссылка на сообщение
Поделиться на других сайтах
В 18.06.2017 в 23:10, doma сказал:

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

 

В 02.08.2017 в 15:57, doma сказал:

и еще вопрос -может сделать "разумные" - самодельные ручные формы поиска для удобства?
сделав их в виде файлов poisk1.tpl poisk2.tpl poisk3.tpl poisk4.tpl poisk5.tpl

и потом когда идет цикл для перебора -проверять их по id? и если такой id имеется то просто сделать inclide="poisk5.tpl" например ? а если такого id нет то вывести автоформируемую.
так как ручная форма может  дать больше стилистики и форм оформления.

Вопрос будут ли они все корректно работать и  искать если сделать их inclide ?

 

вывод формы идет выводом переменной  {$ftdata.body}
а где эта переменная находится -где ее посмотреть ?

вернусь к вопросам так как и не было ответов, подскажите как создать свою собственную форму, дело в том , что там идут табы и если  использовать в табах разделы-города-улицы то ничего не получается и выводится Select an Option  так как видимо эти параметры уже подтягиваются и используются в другой форме.
Фактически задача стоит так сделать табы по нескольким формах поиска

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


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

Так и не смог найти ответа по собственнику (группам)

Данный код не сработал

<div class="controls">
  <input class="checkbox" type="checkbox" name="group" value="3" {if $smarty.request.group=id3} checked="checked"{/if}/> <label class="ch">Частник</label>
</div>

Подскажите как правильно сделать чек бокс или лучше селект Частник, агент

Может у кого-то уже реализовано, поделитесь

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


Ссылка на сообщение
Поделиться на других сайтах
В 08.02.2017 в 06:59, rumantic сказал:

<?php

class Template_Search extends SiteBill {

    public function getParams() {
	//Тут определяем задан ли параметр для нашего справочника (select_by_query) в форме поиска
	if (0 !== intval($this->getRequestValue('spravochnik_id'))) {
	    $params['spravochnik_id'] = intval($this->getRequestValue('spravochnik_id'));
	}

	//Тут определяем задан ли параметр для safe_string
	if ('' != $this->getRequestValue('moya_stroka')) {
	    $params['moya_stroka'] = intval($this->getRequestValue('moya_stroka'));
	}

	return $params;
    }

    public function run() {
	$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['spravochnik_id']) && isset($data_model_array['spravochnik_id'])) {
	    $where_array[] = DB_PREFIX . '_data.spravochnik_id=' . $params['spravochnik_id'];
	}

	if (isset($params['moya_stroka']) && isset($data_model_array['moya_stroka'])) {
	    $where_array[] = DB_PREFIX . '_data.moya_stroka=\'' . $params['moya_stroka'].'\'';
	}

	return array(
	    'where' => $where_array,
	    'params' => $params
	);
    }

}

 

А подскажите пожалуйста, что нужно прописать в файле standart_search_form.tpl чтобы вывести поиск по таблице safe_string

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


Ссылка на сообщение
Поделиться на других сайтах
В 08.04.2019 в 13:26, vda сказал:

А подскажите пожалуйста, что нужно прописать в файле standart_search_form.tpl чтобы вывести поиск по таблице safe_string

Например можно вот так

<input type="text" name="imya_peremennoj" value="{if $smarty.get.imya_peremennoj|trim ne ''}{$smarty.get.imya_peremennoj|trim|escape:'html'}{/if}" placeholder="Пояснение, что же ищет это поле">

где imya_peremennoj - ваше имя переменнйо под которым она будет обращаться в запросе.

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


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

а как добавить не чекбокс в поиск , а свой созданный справочник(типа как у вас города и районы), где значения выбираются из выпадающего списка? строка if($params['is_pool'] == 1 && isset($data_model_array['is_pool'])){$where_array[]=DB_PREFIX.'_data.is_pool='.$params['is_pool']; я так понимаю тут уже не подходит.....

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


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

Для собственного справочника нужно делать свой обработчик. 

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


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

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

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

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

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

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

Войти

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

Войти сейчас