koreshok

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

Recommended Posts

Мы сделали подробную видео-инструкцию по добавлению нового параметра в форму поиска

 

 

 
 
Строчка для добавления в файл шаблона standart_search_form.tpl

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


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

Новое поле - это совсем новое или одно из тех, что есть в модели, но не выводится в форме поиска?

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


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

сделал второй поиск... но есть одно но... ранее добавил новые поля для заполнения...тип записи safe_string

нужно что бы эта запись выводилась в поиске селектом.. как это реализовать?

если это поле делаю селектом при заполнении, то нет возможности добавить значение в это поле при заполнении объявления, тк нужно это поле ещё добавить и в справочник..

или просто я чего то не догоняю...

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


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

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

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


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

если это поле делаю селектом при заполнении, то нет возможности добавить значение в это поле при заполнении объявления, тк нужно это поле ещё добавить и в справочник..

 

Если это select_box, то да, тут не добавишь. А если это select_by_query, то существует вариант с auto_add - полями. Т.е. сам селектбокс выводит присутствующие в таблице данные, но есть дополнительное, несохраняемое, поле типа auto_add, значение введенное в которое будет дописано в таблицу, указанную в его настройках.

Напрмер select_by_query поле street_id - выводит улицы из таблицы street.

А auto_add поле new_street при сохранении добавляет новую запись в таблицу street.

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


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

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


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

так.. это всё сделал.. теперь подскажите пожалуйста... как всё таки сделать справочник для шоссе доступным для заполнения из админки?

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


Ссылка на сообщение
Поделиться на других сайтах
CREATE TABLE IF NOT EXISTS `re_shosse` (  `shosse_id` int(11) unsigned NOT NULL AUTO_INCREMENT,  `title` varchar(255) NOT NULL DEFAULT '',  `region_id` int(11) NOT NULL DEFAULT '0',  PRIMARY KEY (`shosse_id`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=23 ;INSERT INTO `re_shosse` (`shosse_id`, `title`, `region_id`) VALUES(1, 'Белорусское направление', 8),(2, 'Горьковское направление', 8),(3, 'Казанское направление', 8),(4, 'Киевское направление', 8),(5, 'Курское направление', 8),(6, 'Ленинградское направление', 8),(7, 'Павелецкое направление', 8),(8, 'Рижское направление', 8),(9, 'Савеловское направление', 8),(10, 'Ярославское направление', 8);

сделал так.. не знаю на сколько правильно...

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


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

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

после всех моих мучений с добавлением нового справочника и тд... в общем, добавляю в форму в двух местах...

{if $shosse_list ne ''}<tr><td>{$L_SHOSSE}</td><td><div class="select_box_td">{$shosse_list}</div></td></tr>{/if}

но ничего не выводит.. что я делаю не так?

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


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

Выводится в дополнительную - это в ту, которая создается из Редактора Форм в разделе Формы Поиска?

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


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

Подождите часа пол, я напишу теорию)

:D  теория это конечно хорошо...  может просто ткнете носом, что ещё куда добавить?

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


Ссылка на сообщение
Поделиться на других сайтах
В сайтбилле есть два принципиально разных типа форм поиска - стандартная (та которая доступна в шаблоне при установке) и пользовательская (которые создаются Редактор Форм - Формы Поиска).
Основная разница между ними в том, что последняя создается автоматически из выбранных вами элементов, в то время как первая - продукт ручной работы. За создание стандартной формы отвечает базовый класс Kvartira_Search_Form (/apps/system/lib/frontend/search/kvartira_search.php) либо его локальный наследник - Local_Kvartira_Search_Form (/template/frontend/nuzhendom/main/search/local_kvartira_search.php) как пример , либо его заменитель Kvartira_Search_Form (/template/frontend/capitol/main/search/kvartira_search.php).
Эти классы либо заменяют базовый, либо расширяют его.
 
Принцип работы таков, что в одном из этих классов, обычно локальном или переопределенном, что бы не затиралось при обновлениях, реализуется генерация нужных элементов. Например в базовом классе реализуется генерация $city_list. Поэтому жтот список выводится в форму. Но ваш $shosse_list не определен в этом классе, поэтому и не выводится.
После генерации элементов стандартной формы, эти значения перехватываются в шаблоне search_form.tpl/standart_search_form.tpl( в зависимости от шаблона ). Тут вы сами нашли куда вставлять свою переменную.
 
Грубо говоря порядок действий таков.
В свой шаблон вы копируете файл /apps/system/lib/frontend/search/kvartira_search.php в папку /template/frontend/имя_шаблона/main/search/ и переименовываете его в local_kvartira_search.php.
 
В этом файле меняете строку
 
class Kvartira_Search_Form extends SiteBill {
на
 
class Local_Kvartira_Search_Form extends SiteBill {
либо на 
 
class Local_Kvartira_Search_Form extends Kvartira_Search_Form {
Родитель не важен, поскольку вы будете переопределять единственный доступный метод класса. Но я бы советовал наследовать от Kvartira_Search_Form  поскольку возможно, что в Kvartira_Search_Form  будут добавляться новые фичи.
 
Метод 
 
function __construct() {
        $this->SiteBill();
    }
 
оставляете.
 
Сердце поиска - функция main().
В нем определена генерация элементов.
 

Примерно вот так будет выглядеть ваш генератор

$this->template->assert('shosse_list', $form_generator->get_single_select_box_by_query($kvartira_model['data']['shosse_id']));

Этой строкой необходимо дополнить код функции main().

 

Единственное, что вот тут $kvartira_model['data']['shosse_id'] вместо shosse_id должно стоять системное имя вашего поля, в котором хранится ид шоссе, из модели таблицы data.

 

После этого переходим к контроллеру шаблона \template\frontend\имя_шаблона\main\main.php

 

и ищем в нем строки

 

require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/frontend/search/kvartira_search.php');
$kvartira_search_form = new Kvartira_Search_Form();$kvartira_search_form->main();

Это инициализация формы поиска. Так как у вас уже локальный файл, а не базовы, то заменяем это все на 

require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/frontend/search/kvartira_search.php');
require_once(SITEBILL_DOCUMENT_ROOT.'/template/frontend/'.$this->getConfigValue('theme').'/main/search/local_kvartira_search.php');
$kvartira_search_form = new Local_Kvartira_Search_Form();$kvartira_search_form->main();

т.е. инициализируем локальный поиск.

 

Вот после этого можем в шаблон формы поиска вставлять {$shosse_list}

 

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

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


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

Если наладите вывод, напишите, я напишу лекцию о том, как обрабатывать эти "ручнодобавленные" переменные.

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


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

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

post-1042-0-67616900-1381986122_thumb.jp

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


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

Это больше похоже на ошибку в работе яваскрипта. Посмотрите в консоли яваскрипта - должны быть предупреждения в случае ошибок.

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


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

Это больше похоже на ошибку в работе яваскрипта. Посмотрите в консоли яваскрипта - должны быть предупреждения в случае ошибок.

похоже вы правы....нашел косяк.. вот что значит свежий взгляд...

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


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

тогда подскажите, как правильно подключить вот это

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>  <script type="text/javascript" src="{$estate_folder}/js/jquery.hoverIntent.minified.js"></script>  <script type="text/javascript" src="{$estate_folder}/js/jquery.dcmegamenu.1.2.js"></script><script type="text/javascript">$(document).ready(function($){	$('#mega-menu-tut').dcMegaMenu({		rowItems: '3',		speed: 'fast'	});});</script>

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


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

 

тогда подскажите, как правильно подключить вот это

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>  <script type="text/javascript" src="{$estate_folder}/js/jquery.hoverIntent.minified.js"></script>  <script type="text/javascript" src="{$estate_folder}/js/jquery.dcmegamenu.1.2.js"></script><script type="text/javascript">$(document).ready(function($){	$('#mega-menu-tut').dcMegaMenu({		rowItems: '3',		speed: 'fast'	});});</script>

разобрался сам.. спасибо за помощь и за указание пути моих ошибок, лишнее прописал, вот это

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

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


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

Думаю єто подключение жиквери создавало проблемы из-за того, что шаблон всегда по умолчанию подключает жиквери из системной папки. А при подключении кода жиквери дважды всегда возникают ошибки.

 

В вашем шаблоне, либо в header.tpl либо в main.tpl есть место, где генерируется блок <head> страницы.

Там уже должно быть подключение вот такого вида

 

<script type="text/javascript" src="{$estate_folder}/apps/system/js/jquery/jquery.js"></script>

 

именно из /apps/system/js/jquery/

 

Если оно есть, тогда из вашего подключаемого кода гуглевскую библиотеку стразу вітираете.

Следующие два подключения hoverIntent и dcmegamenu дописываете после самого последненго подключения яваскрипта в вашем шаблоне. Это где-то перед тегом </head>

И уже после него сам код создания меню, НО обрамляете его смарти-тегами literal вот таким образом

<script type="text/javascript">{literal}$(document).ready(function($){    $('#mega-menu-tut').dcMegaMenu({        rowItems: '3',        speed: 'fast'    });});{/literal}</script>

что бы шаблонизатор знал, что этот код надо выполнить "как есть", а не интерпретировать.

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


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

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

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

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

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

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

Войти

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

Войти сейчас