Форум программистов, компьютерный форум, киберфорум
1С Битрикс
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
6 / 6 / 1
Регистрация: 22.05.2012
Сообщений: 128
1

Динамичные селекты

14.04.2015, 14:30. Показов 2974. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Есть не большой код по селектам категориям. А как добавить когда последнюю категорию открываем появлялся селект с элементами этой категории?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<div class="selects" id="selects">
 
<?foreach ($arResult['ITEMS']['SECTIONS'] as $key=>$value):?>
 
        <?$i = 1?>
        <?foreach ($value as $k=>$v):?>
 
            <?if ($i == 1):?>
                <div id="<?echo $arResult['SELECT_ID'] . $key?>">
                <select <?if ($arResult['HAS_ACTIVE_DEPTH_LEVEL'] == $key):?>name="<?=$arResult['SELECT_NAME']?>"<?endif;?> onchange="select_change(this, <?=$key?>, 'SELECT_NAME=<?=$arResult['SELECT_NAME']?>&SELECT_ID=<?=$arResult['SELECT_ID']?>');">
                    <option value="">Выберите значение</option>
            <?endif?>
 
            <option value="<?=$v['ID']?>" <?if ($v['ACTIVE'] == 'Y') echo 'selected'?> ><?=$v['NAME']?></option>
 
            <?if ($i == count($value)):?>
                </select>
                </div>
            <?endif?>
 
            <?$i++?>
 
        <?endforeach?>
 
<?endforeach?>
 
</div>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2015, 14:30
Ответы с готовыми решениями:

Динамичные картинки
А как в HTML документ вставляются динамические картинки (изменяющиеся гифки, например, или...

селекты из бд
Добрый день, не знаю как сформулировать название темы, так как вопросов много, но все они мелкие. а...

Динамичные часы JavaScript
Здравствуйте, уважаемые пользователи форума. Прошу помощи с вопросом. У меня есть скрипт,...

динамичные структуры данных.
Дан список строк. Написать подпрограмму, которая из каждой группы подряд идущих элементов оставляет...

13
106 / 18 / 5
Регистрация: 03.04.2012
Сообщений: 219
14.04.2015, 16:43 2
Sega28,
1) ajax, или на js иметь объект со всеми категориями и элементами если это не ресурсоемко
в случае первого предаешь ID выбранного раздела, в случае второго на JS обрабатываешь выбранный раздел
2) как только выбрал категорию, проверяешь, есть ли категории у которых родитель это ID выбранной категории, если есть такие, то строишь дальше селекты с разделами, если нет, то строишь дерево элементов
0
6 / 6 / 1
Регистрация: 22.05.2012
Сообщений: 128
14.04.2015, 16:46  [ТС] 3
ibelych, скрипт полостью рабочий, он строит структуру по разделам и подразделам но не выводит элементы в самой категории, куда в цикл вставить на проверку и вывод элементов
0
106 / 18 / 5
Регистрация: 03.04.2012
Сообщений: 219
14.04.2015, 16:56 4
Sega28, ок, в массиве есть списки всех элементов? вы их как-то получили?
0
6 / 6 / 1
Регистрация: 22.05.2012
Сообщений: 128
14.04.2015, 17:11  [ТС] 5
ibelych,
PHP
1
2
3
4
5
6
if (!CModule::IncludeModule('iblock')) die("Не подключен модуль инфоблок");
$id = intval($_REQUEST['id']);
$select_name = $_REQUEST['SELECT_NAME'];
$select_id = $_REQUEST['SELECT_ID'];
$section = getIBlockSection($id);
?>
вот основные переменные которые берутся
0
106 / 18 / 5
Регистрация: 03.04.2012
Сообщений: 219
14.04.2015, 17:14 6
Sega28, ну нужно получить все элементы инфоблока и объединить их по привязки к разделу
0
6 / 6 / 1
Регистрация: 22.05.2012
Сообщений: 128
14.04.2015, 17:22  [ТС] 7
ibelych, грубо говоря да) ну как в админке ты тыкаешь по категориям и видишь эти элементы
0
106 / 18 / 5
Регистрация: 03.04.2012
Сообщений: 219
14.04.2015, 17:26 8
Sega28, берешь jquery и по событию change ловишь выбранный ID радела, если у этого раздела есть список элементов, грубо говоря есть <select id="elemnts_ID-SECTION"> то показываешь его так же через js
все <select id="elemnts_ID-SECTION"> приличествуют на странице но все скрыты,

ты это делаешь с перезагрузкой страницы?
0
6 / 6 / 1
Регистрация: 22.05.2012
Сообщений: 128
14.04.2015, 17:37  [ТС] 9
ibelych, нет на аяксе, JS тоже присутсвует
0
106 / 18 / 5
Регистрация: 03.04.2012
Сообщений: 219
14.04.2015, 17:39 10
Sega28, код который ты показал строит не один select, вернее может строить не один судя по циклу, что бы загрузить все элементы, так же делаешь ajax запрос и получаешь все элементы раздела через CIblockElement::GetList()
0
6 / 6 / 1
Регистрация: 22.05.2012
Сообщений: 128
14.04.2015, 17:44  [ТС] 11
ibelych, Выложить все файлы?
0
106 / 18 / 5
Регистрация: 03.04.2012
Сообщений: 219
14.04.2015, 18:16 12
Sega28, давай
0
6 / 6 / 1
Регистрация: 22.05.2012
Сообщений: 128
14.04.2015, 18:39  [ТС] 13
ibelych,
ajax.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");?>
 
<?
if (!CModule::IncludeModule('iblock')) die("Не подключен модуль инфоблок");
$id = intval($_REQUEST['id']);
$select_name = $_REQUEST['SELECT_NAME'];
$select_id = $_REQUEST['SELECT_ID'];
$section = getIBlockSection($id);
?>
 
<div id="<?echo $select_id . $section['DEPTH_LEVEL']?>">
    <?
        $dbS = CIBlockSection::GetList(Array('NAME'=>'ASC'), Array('IBLOCK_ID'=>$section['IBLOCK_ID'], "GLOBAL_ACTIVE"=>"Y", "SECTION_ID"=>$section['ID']));
        $countS = $dbS->SelectedRowsCount();
        if ($countS > 0):
            ?>
 
            <select onchange="select_change(this, <?=(++$section['DEPTH_LEVEL'])?>, 'SELECT_NAME=<?=$select_name?>&SELECT_ID=<?=$select_id?>');">
            <option value="">Выберите вариант</option>
            <?
            while($resS = $dbS->GetNext()):
                ?><option value="<?=$resS['ID']?>"><?=$resS['NAME']?></option><?
            endwhile;
            ?></select><?
 
        endif;
    ?>
 
</div>
 
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php")
skript.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
 
<script type="text/javascript">
 
function select_change(elem, level, params) {
 
    var nextLevel = (level + 1);
    var selects = document.getElementById("selects");
    for (var i = nextLevel; i < 10; i++) {
        if (bl = document.getElementById("<?=$arResult['SELECT_ID']?>"+i))
            selects.removeChild(bl);
        else
            break;
    }
 
    if (elem.value>0) {
        var block = document.createElement("DIV");
        block.setAttribute("id", "<?=$arResult['SELECT_ID']?>"+nextLevel);
        selects.appendChild(block);
        jsAjaxUtil.InsertDataToNode('<?=$templateFolder?>/ajax.php?id='+elem.value+'&'+params, block.id, true);
    }
 
    var sels = selects.getElementsByTagName("select");
    for(i = 0; i < sels.length; i++) {
        sels[i].removeAttribute("name");
    }
 
    for(i = sels.length-1; i >= 0; i--) {
        if (sels[i].value > 0) {
            sels[i].setAttribute("name", "<?=$arResult['SELECT_NAME']?>");
            break;
        }
    }
 
}
 
</script>
template.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
 
<?/*echo "<pre>";print_r($arParams);echo "</pre>";*/?>
<?/*echo "<pre>";print_r($arResult);echo "</pre>";*/?>
<?$GLOBALS['APPLICATION']->SetAdditionalCSS('/bitrix/templates/.default/ajax/ajax.css');?>
<?$GLOBALS['APPLICATION']->AddHeadString('<script src="/bitrix/js/main/ajax.js"></script>', true);?>
 
<?include($_SERVER["DOCUMENT_ROOT"].$templateFolder."/script.php")?>
<form>
<div class="selects" id="selects">
 
<?foreach ($arResult['ITEMS']['SECTIONS'] as $key=>$value):?>
 
        <?$i = 1?>
        <?foreach ($value as $k=>$v):?>
 
            <?if ($i == 1):?>
                <div id="<?echo $arResult['SELECT_ID'] . $key?>">
                <select <?if ($arResult['HAS_ACTIVE_DEPTH_LEVEL'] == $key):?>name="<?=$arResult['SELECT_NAME']?>"<?endif;?> onchange="select_change(this, <?=$key?>, 'SELECT_NAME=<?=$arResult['SELECT_NAME']?>&SELECT_ID=<?=$arResult['SELECT_ID']?>');">
                    <option value="">Выберите значение</option>
            <?endif?>
 
            <option value="<?=$v['ID']?>" <?if ($v['ACTIVE'] == 'Y') echo 'selected'?> ><?=$v['NAME']?></option>
 
            <?if ($i == count($value)):?>
                </select>
                </div>
            <?endif?>
 
            <?$i++?>
 
        <?endforeach?>
 
<?endforeach?>
 
</div>
<input type="submit">
</form>
Добавлено через 20 минут
и вот вызов кстати
PHP
1
2
3
4
5
6
7
8
9
    Array(
        "COMPONENT_TEMPLATE" => ".default",
        "IBLOCK_TYPE" => "tovar",
        "IBLOCK_ID" => "22",
        "SELECT_NAME" => "SECTION_ID",
        "SELECT_ID" => "level",
        "SELECT_VALUE" => "",
        "LEVELS" => ""
    )
0
0 / 0 / 0
Регистрация: 13.04.2015
Сообщений: 6
18.04.2015, 15:55 14
Спасибо, все по делу
0
18.04.2015, 15:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2015, 15:55
Помогаю со студенческими работами здесь

Динамичные классовые типы
Только начал свое ознакомление с классами.Хотелось бы увидеть реализацию данной программы. Создать...

Зависимые селекты
Доброго времени суток! Помогите пож начинающему найти ошибку. Делаю зависимые выпадающие списки....

Нетривиальные Селекты
Добрый день. Я раньше работал с SQL, создавал простые селекты, но сейчас у меня спросили несколько...

Связанные селекты
Добрый день. Есть 2 селекта. &lt;select id=&quot;select1&quot; name=&quot;select_1&quot;&gt; &lt;option...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru