Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Компонент каталог

00 голосов
4
Здроавствуйте!

Возможно ли при помощи компонента «фильтр» реализовать такую задачу:

У объектов в базе есть свойства: город, район, улица
Нужно что бы в фильтре пользователь сначала из выпадающего списка выбирал город, затем район, затем улицу, а далее остальные свойства уже просто вводил.

Можно ли такое сделать на AJAX? Если да - то как?
Если нет, то возможно ли такое сделать средствами Битрикса?

Посоветуйте, пожалуйста!
спросил 27 Янв, 14 от Alkasar (100 баллов)

4 Ответы

00 голосов
В компоненте catalog.filter аякс не реализован. Но самому сделать можно.
Я когда делал, от компонента мало что осталось, пользовался библиотекой extjs. Там есть класс для работы с формами. Для каждого из ваших полей вы загружаете список значений из Битрикса, связываете между собой города районы и улицы и можно легко фильтровать районы по городу и улицы по районам.

Все чем могу помочь - дать ссылочку на примеры реализации, попросите лично , если надумаете делать...
ответил 29 Май, 14 от Tetis (500 баллов)
00 голосов
Дима еще один вопрос - вы программируете на Java? (дело в том что я могу дать примеры на GWT-ext, они на джаве, потом компилируются в джаваскрипт). Посмотрите пока тут http://gwt-ext.com/demo

Далее слева выбираете раздел Combobox/Linked combobox

Код этого примера
Код
public class LinkedComboBoxSample implements EntryPoint {  
  
    public void onModuleLoad() {  
        Panel panel = new Panel();  
        panel.setBorder(false);  
        panel.setPaddings(15);  
  
        FormPanel form = new FormPanel();  
        form.setTitle("Linked ComboBox");  
        form.setFrame(true);  
        form.setWidth(350);  
  
        // countries store  
        Object[][] countries = new Object[][]{  
                new Object[]{"USA", "United States of America"},  
                new Object[]{"D", "Germany"},  
                new Object[]{"F", "France"},  
                new Object[]{"GB", "Great Britain"},  
        };  
  
        final Store countriesStore = new SimpleStore(new String[]{"cid", "country"}, countries);  
        countriesStore.load();  
  
        //cities store  
        Object[][] cities = new Object[][]{  
                new Object[]{new Integer(1), "USA", "New York"},  
                new Object[]{new Integer(2), "USA", "Cleveland"},  
                new Object[]{new Integer(3), "USA", "Austin"},  
                new Object[]{new Integer(4), "USA", "Los Angeles"},  
                new Object[]{new Integer(5), "D", "Munich"},  
                new Object[]{new Integer(6), "D", "Bonn"},  
                new Object[]{new Integer(7), "F", "Paris"},  
                new Object[]{new Integer(8), "F", "Nice"},  
                new Object[]{new Integer(9), "GB", "London"},  
                new Object[]{new Integer(10), "GB", "Glasgow"},  
                new Object[]{new Integer(11), "GB", "Liverpool"}  
        };  
  
        final Store citiesStore = new SimpleStore(new String[]{"id", "cid", "city"}, cities);  
        citiesStore.load();  
  
        final ComboBox countryCB = new ComboBox();  
        countryCB.setFieldLabel("Select Country");  
        countryCB.setStore(countriesStore);  
        countryCB.setDisplayField("country");  
        countryCB.setMode(ComboBox.LOCAL);  
        countryCB.setTriggerAction(ComboBox.ALL);  
        countryCB.setForceSelection(true);  
        countryCB.setValueField("cid");  
        countryCB.setReadOnly(true);  
  
        final ComboBox cityCB = new ComboBox();  
        cityCB.setFieldLabel("Select City");  
        cityCB.setStore(citiesStore);  
        cityCB.setDisplayField("city");  
        cityCB.setValueField("id");  
        cityCB.setMode(ComboBox.LOCAL);  
        cityCB.setTriggerAction(ComboBox.ALL);  
        cityCB.setLinked(true);  
        cityCB.setForceSelection(true);  
        cityCB.setReadOnly(true);  
  
        countryCB.addListener(new ComboBoxListenerAdapter() {  
  
            public void onSelect(ComboBox comboBox, Record record, int index) {  
                cityCB.setValue("");  
                citiesStore.filter("cid", comboBox.getValue());  
            }  
        });  
  
        form.add(countryCB);  
        form.add(cityCB);  
        panel.add(form); &n
ответил 25 Сен, 14 от Tetis (500 баллов)
00 голосов
А как Вы относитесь, если реализовать примерно так:
Суть в том, что PHP построит на основе данных из базы нижеследующее, которое я представляю примерно так (скрипт просто не показывает то что не относитя к выбранному объекту (display:none)).
Допустим, список стран будет одинаков, а города надо брать из базы.
Или я туплю? Может это не рациональный способ и сложный?

Код
<script language="javascript">
function Display(which) {

   for (k=1; k<300; k++) {
             if (which==k) {
            document.getElementById(k).style.display="block";
              } else {
            document.getElementById(k).style.display="none";
            }      
   }
}
</script>


   <select name="region" class="inform" onChange="Display(this.value)" style="width:150px">                                             
<option value="1" >Россия</option>
<option value="2" >Белоруссия</option>
<option value="3" >Украина</option>
</select>
                                       

<div ID="1" style="display:block;">
<select name=" city_[1]" class="inform" style="width:150px">
<option value="">Выберите из списка</option>
<option value="Москва">Москва</option>
<option value="Санкт-Петербург">Санкт-Петербург</option>
</select>
</div>

<div ID="2" style="display:none;">
<select name=" city _[2]" class="inform" style="width:150px">
<option value="">Выберите из списка</option>
<option value="Бобруйск">Бобруйск</option>
<option value="Минск">Минск</option>
</select>
</div>

<div ID="3" style="display:none;">
<select name="city_[3]" class="inform" style="width:150px">
<option value="">Выберите из списка</option>
<option value="Днепропетровск">Днепропетровск</option>
<option value="Киев">Киев</option>
</select>
</div>
ответил 29 Янв, 15 от Alkasar (100 баллов)
00 голосов
Цитата
Дмитрий Смирнов пишет:
Или я туплю? Может это не рациональный способ и сложный?

да, не рациональный, куча невидимого кода при миллиарде возможных вариантов - это не тру.
кстати если знаком с java, очень рекоммендую JSF.

Алексей Абисфамилинный,
за java++
ответил 12 Май, 15 от Taur (140 баллов)