Всем привет! Народ, подскажите, каким образом можно реализовать фильтрацию элементов инфоблока по его свойствам?
Есть инфоблок. У него есть свойства "Компания", "Тема", "Страна", "Дата проведения", "Файл".
Я на страницу накидал форму:
Код
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Title");
?>
<fo rm>
<sel ect name="company" style="width: 100px;">
<option value="Выберите страну">Выберите Компанию</option>
<option value="National Securities Depository Limited">National Securities Depository Limited</option>
<option value="National Settlement Depository">National Settlement Depository</option>
<option value="Merkezi KayД±t KuruluЕџu A.Ећ.">Merkezi KayД±t KuruluЕџu A.Ећ.</option>
<option value="TDCC Taiwan Depository & Clearing Corporation">TDCC Taiwan Depository & Clearing Corporation</option>
<option value="Central Depository of Armenia">Central Depository of Armenia</option>
<option value="CSDC (China Securities Depository and Clearing Corporation)">CSDC (China Securities Depository and Clearing Corporation)</option>
<option value="Euroclear">Euroclear</option>
<option value="KSD (Korean Securities Depository)">KSD (Korean Securities Depository)</option>
<option value="SHCH (Shanghai Clearing House)">SHCH (Shanghai Clearing House)</option>
</select>
<select name="country">
<option value="Выберите страну">Выберите страну</option>
<option value="India">India</option>
<option value="India">Russia</option>
<option value="Turkey">Turkey</option>
<option value="Taiwan">Taiwan</option>
<option value="Armenia">Armenia</option>
<option value="China">China</option>
<option value="Belgium">Belgium</option>
<option value="Korea">Korea</option>
<option value="Korea">Korea</option>
</select>
<input type="date" name="date-fr om" />
<input type="date" name="date-to" />
<select name="subject" style="width: 140px;">
<option value="Выберите тему">Выберите тему</option>
<option value="E-Voting System of NSDL (Video)">E-Voting System of NSDL (Video)</option>
<option value="E-Voting System of NSDL (Presentation)">E-Voting System of NSDL (Presentation)</option>
<option value="Creating the E-Voting System for Shareholder Meetings in Russia (Article)">Creating the E-Voting System for Shareholder Meetings in Russia (Article)</option>
<option value="E-voting System (Presentation)">E-voting System (Presentation)</option>
<option value="Electronic General Meeting (e-GEM)">Electronic General Meeting (e-GEM)</option>
<option value="Public Disclosure Platform (PDP)">Public Disclosure Platform (PDP)</option>
<option value="Implementation of Non-Custody Services">Implementation of Non-Custody Services</option>
<option value="E-Voting Opportunities">E-Voting Opportunities</option>
<option value="FinTech and Cyber Resilience (Presentation, WFC Board, May 2017)">FinTech and Cyber Resilience (Presentation, WFC Board, May 2017)</option>
<option value="Better Corporate Governance With E-voting Gradually Gets Adopted in Taiwan. -a Big Data Analysis of Taiwan’s E-voting in AGMs">Better Corporate Governance With E-voting Gradually Gets Adopted in Taiwan. -a Big Data Analysis of Taiwan’s E-voting in AGMs</option>
<option value="Cash accounts & New opportunities">Cash accounts & New opportunities</option>
<option value="Government bonds for individuals">Government bonds for individuals</option>
<option value="Legal Risk Management for Stock Connect">Legal Risk Management for Stock Connect</option>
<option value="Cross-border links challenges">Cross-border links challenges</option>
<option value="CSDs’ role in Implementing Cross-border investments">CSDs’ role in Implementing Cross-border investments</option>
<option value="China Bond Market">China Bond Market</option>
</select>
</form>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>
Хочу чтоб при выборе какого-либо пункта из выпадающего списка срабатывал бы фильтр, и на странице отображались бы только те элементы инфоблока, значение свойств которых совпадали бы со значением выбранного пункта из выпадающего списка. Подскажите, в какую сторону копать? Думаю использовать компонент birix:news.list Как думаете, я в правильном направлении двигаюсь?
у news.list в параметрах вызова компонент проставить переменную фильтра, в которую из $_GET брать параметры ну а дальше обычные события js на change select делать submit формы
Спасибо. Кажется что-то уже начинает получаться. На страницу, где размещён вызов компонента bitrix:news.list я добавил переменную фильтрации как вы и говорили:
Код
<?
//$GLOBALS['filter_ex'] = array('PROPERTY_COUNTRY' => 'India');//фильтруем по стране
?>
И далее при вызове самого компонента указал эту переменную: ("FILTER_NAME" => "filter_ex",)
Работает. Теперь мне надо как то сделать так, чтобы переменная фильтрации $GLOBALS['filter_ex'] = array('PROPERTY_COUNTRY' => 'India'); получала значение при срабатывании события onchange у select'a, например у того списка, который отвечает за выбор страны.
Я думал вот как: Сработает событие onchange, и в js я вызову submit формы, и в GET-массив попадёт параметр, но пока не получается.
Сергей, а как мне при срабатывании события onchange у select'а вызвать submit формы? Сейчас вот так сделал:
$(document)
.on('change', $('[name="PROPERTY_COUNTRY"]'), function() {
$(this).closest('form').trigger('submit')
})
.on('submit', $('form'), function(e) {
e.preventDefault();
//тут делаем ajax с методом GET например
})
я бы в селекты и инпуты задал бы какой-нибудь признак общий, чтобы не плодить функции change на каждый, например воткнул бы атрибут data-filter и по к нему бы обращался $('[data-filter]')
Но страница всё равно перезагружается, даже несмотря на то, что указано e.preventDefault(); И в URL после перезагрузки страницы всё равно попадают все поля, что есть в форме, а не те, что указаны в data
в консоле ошибки есть после изменения полей формы? попадают все поля, потому что перезагружается страница а ну да, потому что я не такой код в пример написал, что ты используешь, поэтому скорее всего ошибка в консоли удали\закомментируй свой и пробуй этот
а да мой косяк в делегировании вместо этого .on('change', $('[name="PROPERTY_COUNTRY"]'), function() { ; on('submit', $('form'), function(e) { нужно это .on('change', '[name="PROPERTY_COUNTRY"]', function() { ; on('submit', 'form', function(e) {
можно конечно и так .on('change', $('[name="PROPERTY_COUNTRY"]'), function(e) { но тогда нужно не $(this).closest('form').trigger('submit'), а $(e.originalEvent.target).closest('form').trigger('submit')
Спасибо, исправил, сам тоже не доглядел )) событие теперь срабатывает. Ajax-запрос успешно выполняется, страница не перезагружается, но в $_GET ничего не приходит, сейчас буду гуглить как это исправить.... Думаю что на этой же странице надо просто в php обработать GET-параметры.
Я раньше как делал: данные с формы отдавал в отдельный php-файлик. Мне этот файлик данные обрабатывал, и отдавал обратно в ajax запрос, например в success-метод (если всё успешно завершилось), а вот как тут сделать - буду думать. Спасибо.
массив из 5 элементов выводится, ну то есть как раз поля формы и в PROPERTY_COUNTRY как раз было выбранное значение страны А вот в ответе от ajax-запроса выдаётся куча какой то левой информации, какие то HTML-теги, и прочее, но в $_REQUEST так ничего и не пападает.