Система управления контентом SantaFox
Работа с SantaFox => Модуль "Каталог товаров" => Тема начата: rsr-internet от 09 ноября 2017, 10:55:35
-
Лазил по форуму, но не нашел конкретной информации - как поэтапно организовать поиск по товарам используя фильтр - или сделать выборку товаров используя фильтр - кто как называет?
А так же интересуют ответы на вопросы:
- В чем отличия между внешним фильтром и внутренним?
- Я выводил внешний фильтр - но почему-то на странице не выводится вообще ничего - думал что отобразиться хотя бы дефолтная форма поиска которая есть в шаблоне outer_filter.html, но она не показалась?
-
Внешний фильтр получает параметры для фильтрации от полей ввода формы. Т.е. посетитель вбивает туда значение и по этому значению фильтруется.
Внутренний фильтр не получает никаких данных извне. В качестве примера - "вывести распродажные позиции в этой категории". Т.е. Он просто отберет N товаров, соответствующих условию "rasprodaza=1"
Формы ввода данных для внешнего фильтра вы верстаете сами в тех местах (карточка товара или список товара) где они нужны: http://wiki.santafox.ru/doku.php?id=constructor:catalog#внешние_фильтры
-
Как правильно настроить внешний фильтр?
И почему когда я вывожу внешний фильтр - то ничего не выводится - как я писал выше.
Внешний фильтр получает параметры для фильтрации от полей ввода формы. Т.е. посетитель вбивает туда значение и по этому значению фильтруется.
Внутренний фильтр не получает никаких данных извне. В качестве примера - "вывести распродажные позиции в этой категории". Т.е. Он просто отберет N товаров, соответствующих условию "rasprodaza=1"
Формы ввода данных для внешнего фильтра вы верстаете сами в тех местах (карточка товара или список товара) где они нужны: http://wiki.santafox.ru/doku.php?id=constructor:catalog#внешние_фильтры
-
Вот пример страницы, где у меня есть внешний фильтр: http://www.techelement.ru/catalog.html?cid=6
Вот текст фильтра:
true
REMOVE_NOT_SET[ AND manufacturer='param[manufacturer]']
REMOVE_NOT_SET[ AND price<param[price]]
REMOVE_NOT_SET[ AND base_voltage IN ('220', '220\\380', '24\\110\\230', '220\\12', '220\\120', '220\\380\\12') /*param[base_voltage_220]*/]
REMOVE_NOT_SET[ AND base_voltage IN ('380', '220\\380', '220\\380\\12') /*param[base_voltage_380]*/]
REMOVE_NOT_SET[ AND base_voltage IN ('12','220\\380\\12','220\\12') /*param[base_voltage_12]*/]
REMOVE_NOT_SET[ AND welding_migmag_i_max>=0.95*param[welding_migmag_i_max] AND welding_migmag_i_max<=1.05*param[welding_migmag_i_max]]
REMOVE_NOT_SET[ AND manuf_country='param[manuf_country]']
REMOVE_NOT_SET[ AND manuf_country IS NULL /*param[manuf_country_china]*/]
REMOVE_NOT_SET[ AND welding_migmag_rollnumber='4' /*param[welding_migmag_rollnumber]*/]
REMOVE_NOT_SET[ AND welding_aluminum='Да' /*param[welding_aluminum]'*/]
REMOVE_NOT_SET[ AND welding_pulse='Есть' /*param[welding_pulse]*/]
REMOVE_NOT_SET[ AND welding_mma_i_max>0 /*param[welding_mma_i_max]*/]
REMOVE_NOT_SET[ AND welding_migmag_fx_d IS NOT NULL /*param[welding_migmag_fx_d]*/]
REMOVE_NOT_SET[ AND welding_migmag_wire_inout IN ('Снаружи','Снаружи/Внутри') /*param[welding_mm_wire_inout_out]*/]
REMOVE_NOT_SET[ AND welding_migmag_wire_inout IN ('Внутри','Снаружи/Внутри') /*param[welding_mm_wire_inout_in]*/]
REMOVE_NOT_SET[ AND welding_naks IS NOT NULL/*param[welding_naks]*/]
REMOVE_NOT_SET[ AND welding_saw_tractor='Есть' /*param[welding_saw_tractor]*/]
ORDER BY price IS NOT NULL DESC, articulus IS NOT NULL DESC, popsort DESC
param[manufacturer] - это как раз то, что приходит с внешней формы.
А вот как выглядит шаблон формы этой:
<form class="filter-product" action="/catalog.html" method="get">
<input type='hidden' id="cid" name='cid' value="[@function-v_request(cid ||| 0)]">
<input type="hidden" name="filterid" value="f_mig-mag">
<div class="filter-product-wrap">
<table>
<tr>
<td style="width: 200px">
<div class="field">
<label>Производитель:</label>
<select name="manufacturer">
<option value="">Все</option>
[@function-v_get_brandList()]
</select>
</div>
</td>
<td style="width: 200px">
<div class="field">
<label>Напряжение, В:</label>
<input type="hidden" name="base_voltage_[@function-v_request(base_voltage)]" value="1">
<select name="base_voltage" onchange="if($(this).val()!='') $(this).prev().attr('name','base_voltage_'+$(this).val()).val(1); else $(this).prev().val('');">
<option value="">Все</option>
<option value="220"[@function-v_selected_print(base_voltage ;;||;; 220)]>220</option>
<option value="380"[@function-v_selected_print(base_voltage ;;||;; 380)]>380</option>
</select>
</div>
</td>
<td style="width: 155px">
<div class="field">
<label>Свар. ток, А:</label>
<input type="text" name="welding_migmag_i_max" value="[@function-v_request(welding_migmag_i_max)]">
</div>
</td>
<td>
<div class="field">
<label>Цена, р:</label>
<span>до</span>
<input type="text" name="price" value="[@function-v_request(price)]">
</div>
</td>
<td rowspan="3" class="filter_float_button"><input type="submit" class="sbm-filter" value="Искать"></td>
</tr>
<tr>
<td>
<div class="field">
<label>Страна:</label>
<input type="hidden" name="manuf_country_china" value="">
<select name="manuf_country" onchange="if($(this).find('option:selected').text()=='Китай') $(this).prev().val(1); else $(this).prev().val('');">
<option value="">Все</option>
[@function-v_catalog_get_country()]
</select>
</div>
</td>
<td>
<div class="field">
<label>Подающее устр-во:</label>
<input type="hidden" name="welding_mm_wire_inout_[@function-v_request(welding_mm_wire_inout)]" value="1">
<select name="welding_migmag_wire_inout" onchange="if($(this).val()!='') $(this).prev().attr('name','welding_mm_wire_inout_'+$(this).val()).val(1); else $(this).prev().val('');">
<option value="">Все</option>
<option value="out"[@function-v_selected_print(welding_migmag_wire_inout ;;||;; out)]>выносное</option>
<option value="in"[@function-v_selected_print(welding_migmag_wire_inout ;;||;; in)]>встроенное</option>
</select>
</div>
</td>
<td colspan="2" rowspan="2">
<div class="field" style="min-width: 258px;">
<input value="1" name="welding_migmag_rollnumber" type="checkbox"[@function-v_checked_print(welding_migmag_rollnumber)]>
<label>4х-роликовый механизм:</label>
<input value="Да" name="welding_pulse" type="checkbox"[@function-v_checked_print(welding_pulse)]>
<label>Режим Pulse:</label>
<input value="Да" name="welding_aluminum" type="checkbox"[@function-v_checked_print(welding_aluminum)]>
<label>Варит алюминий:</label>
<input value="1" name="welding_mma_i_max" type="checkbox"[@function-v_checked_print(welding_mma_i_max)]>
<label>Сварка электродами:</label>
</div>
</td>
</tr>
<tr>
<td colspan="2">
<div class="field" style="min-width: 270px; margin-right: 25px;">
<input value="1" name="welding_migmag_fx_d" type="checkbox"[@function-v_checked_print(welding_migmag_fx_d)]>
<label>Сварка порошк. проволокой:</label>
</div>
</td>
</tr>
</table>
</div>
</form>
-
Пользовательская функция "v_selected_print" - это просто костыль, который проггер написал, чтобы сохранялись значения выбранные.
/**
* Функция v_selected_print($a) предназначена для сохранения состояний выпадающих списков.
* Пример вызова [@function-v_selected_print(name_select ;;||;; value)]
* Данную функцию необходимо писать в каждом из <option> - <option value="55" [@function-v_selected_print(name_select ;;||;; 55)]>
* Выводит ' selected="selected"' если $_REQUEST[$name]==$value
* @param $name
* @param $value
* @return string
*/
function v_selected_print($a){
$a = explode(" ;;||;; ",$a);
$name = $a[0];
if(isset($a[1])) $value = $a[1]; else return '';
if(isset($_REQUEST[$name]) && $_REQUEST[$name]==$value) return ' selected="selected"'; else return '';
}
-
буду разбираться.
Пользовательская функция "v_selected_print" - это просто костыль, который проггер написал, чтобы сохранялись значения выбранные.
/**
* Функция v_selected_print($a) предназначена для сохранения состояний выпадающих списков.
* Пример вызова [@function-v_selected_print(name_select ;;||;; value)]
* Данную функцию необходимо писать в каждом из <option> - <option value="55" [@function-v_selected_print(name_select ;;||;; 55)]>
* Выводит ' selected="selected"' если $_REQUEST[$name]==$value
* @param $name
* @param $value
* @return string
*/
function v_selected_print($a){
$a = explode(" ;;||;; ",$a);
$name = $a[0];
if(isset($a[1])) $value = $a[1]; else return '';
if(isset($_REQUEST[$name]) && $_REQUEST[$name]==$value) return ' selected="selected"'; else return '';
}
-
А текст фильтра мы где пишем?
-
https://prnt.sc/h882tj
-
А шаблон формы куда вписываем? в отдельный файл или в файл шаблона вывода товаров?
Метка - "Вывести внешний фильтр" так и не работает - просто пустой блок - никаких тегов от шаблона не выводит.
И судя по коду вставки самой формы - таких эксплойдов не мало - как программист их размещал?
-
В итоге нет готового модуля - вывод фильтра товаров?
Что-то нужно доделывать в коде модуля каталог.
-
Ничего не надо доделывать :)
Шаблон формы фильтра вписываем в список товаров. Прямо в код. Напрямую.
В каталоге есть метод "Вывести фильтр" - это для внутреннего фильтра. Если к примеру вам надо отобразить те же распродажные товары. Потому что он в метку выводит сразу результат работы фильтра (в шаблоне вывода, определяемый самим фильтром).
-
Ничего не надо доделывать :)
Шаблон формы фильтра вписываем в список товаров. Прямо в код. Напрямую.
В каталоге есть метод "Вывести фильтр" - это для внутреннего фильтра. Если к примеру вам надо отобразить те же распродажные товары. Потому что он в метку выводит сразу результат работы фильтра (в шаблоне вывода, определяемый самим фильтром).
Я не знаю - может уже обсуждалось когда-то - но к чему относятся эти метки из примера кода выше: [@function-v_request(cid ||| 0)], [@function-v_get_brandList()], [@function-v_selected_print(base_voltage ;;||;; 220)]?
-
Это т.н. пользовательские функции. Нужны для того, чтобы вызвать из шаблона пхп-код (не из метки, а прямо из шаблона) и вернуть результат прямо в шаблон.
-
Подскажите как сделать . Стоит у меня фильтр
true
REMOVE_NOT_SET[ AND `items`.`Filial_rajonov`='param[Filial_rajonov]'] - ( фильтрует по филиалам ) . Но проблема в том что не могу сделать Порядок сортировки 1 потом 2 потом 3 и т.д.
-
следом строчку
order by Filial_rajonov asc или desc
но если это не цифровое значение, может бардак быть )
-
следом строчку
order by Filial_rajonov asc или desc
но если это не цифровое значение, может бардак быть )
проще в конце запроса писать "orderdesk(id)" или asc, а вместо id любое другое свойство по которому надо сортировать
-
Друзья друзья .. Нужна помощь. Подскажите как сделать фильтр по цене от и до . Очень нужно.
Можно написать пример.
:)
-
в фильтре должно быть
true
REMOVE_NOT_SET[AND `items`.`price`>=param[price_from]]
REMOVE_NOT_SET[AND `items`.`price`<=param[price_to]]
в форме должны быть инпуты
<input type="number" name="price_from" value="" placeholder="Цена от">
<input type="number" name="price_to" value="" placeholder="Цена до">
-
Ничего не надо доделывать :)
Шаблон формы фильтра вписываем в список товаров. Прямо в код. Напрямую.
В каталоге есть метод "Вывести фильтр" - это для внутреннего фильтра. Если к примеру вам надо отобразить те же распродажные товары. Потому что он в метку выводит сразу результат работы фильтра (в шаблоне вывода, определяемый самим фильтром).
Поделитесь опытом, как сделать, чтобы фильтр работал без перезагрузки страницы? У меня фильтр работает при нажатии кнопок (выборка по этажам).