0 Пользователей и 1 Гость просматривают эту тему.
Внешний фильтр получает параметры для фильтрации от полей ввода формы. Т.е. посетитель вбивает туда значение и по этому значению фильтруется.Внутренний фильтр не получает никаких данных извне. В качестве примера - "вывести распродажные позиции в этой категории". Т.е. Он просто отберет N товаров, соответствующих условию "rasprodaza=1"Формы ввода данных для внешнего фильтра вы верстаете сами в тех местах (карточка товара или список товара) где они нужны: http://wiki.santafox.ru/doku.php?id=constructor:catalog#внешние_фильтры
trueREMOVE_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
<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($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 '';}
Ничего не надо доделывать Шаблон формы фильтра вписываем в список товаров. Прямо в код. Напрямую.В каталоге есть метод "Вывести фильтр" - это для внутреннего фильтра. Если к примеру вам надо отобразить те же распродажные товары. Потому что он в метку выводит сразу результат работы фильтра (в шаблоне вывода, определяемый самим фильтром).