Задать вопрос
  • Как вывести ссылки на карту сайта, не добавляя их в меню?

    @koder_1
    Компонент строится на основе настроек главного модуля, секция карта сайта.
    Может там в настройках чего есть?
    Написано
  • Как добавить свою сортировку в CIBlockElement::GetList?

    @koder_1
    Если есть пагинация, видимо уже по свойству нужно вторую сортировку. Проще, чем вмешиваться в механизм пагинации.
    Написано
  • Как добавить id раздела в компоненте списка новостей?

    @koder_1
    Да, точно. Автор использует конструкцию с фильтром по ID раздела, а есть же у компонента news.list просто параметр
    PARENT_SECTION который и задает родительскую секцию, и он тогда будет внутри $arResult или $arParams,

    Правильный вариант так. Строку убираем.
    $GLOBALS['arrFilter']=array("SECTION_ID" => 114);
    Добавляем параметр
    $APPLICATION->IncludeComponent(
    "bitrix:news.list", 
    "sliders_tab", 
    	array(
    		"ACTIVE_DATE_FORMAT" => "d.m.Y",
    		"ADD_SECTIONS_CHAIN" => "Y",
                    "PARENT_SECTION" => 114
    ....
    ?>


    А в шаблоне ищем id секции в $arResult и если там нет, то берём из $arParams['PARENT_SECTION']
    Написано
  • Почему не работает компонент "умный фильтр"?

    @koder_1
    В компоненте bitrix:news нужно задать "USE_FILTER" => "Y",
    Написано
  • Что делать при ошибке импорта"Раздел с таким символьным кодом уже существует"?

    @koder_1
    Вы это в том инфоблоке куда выгружаете настроили?
    Написано
  • Что делать при ошибке импорта"Раздел с таким символьным кодом уже существует"?

    @koder_1
    Cyber-Pavel, В настройках инфоблока нужно снять галочку и для разделов также, в двух местах - для элементов инфоблока и для разделов инфоблока.
    Написано
  • Как передать список разделов в Битрикс?

    @koder_1
    by_steris, по донату пишите на auriev1@yandex.ru
    Написано
  • Как передать список разделов в Битрикс?

    @koder_1
    by_steris, Если уже в компоненте получен массив,
    его не нужно снова запрашивать по api.
    Для сортировки в таких случаях есть или параметры компонента,
    или если нет параметров компонента, то сортировать средствами php в result_modifier.php
    1) Запрос к базе - это самая тяжёлая в плане ресурсов операция, повторно запрашивать то, что уже запрошено - не нужно.
    Получили данные, сохранили в массив, работаем с ними дальше из массива.
    2) Повторные запросы к базе дают нечитаемый код, коллеге, который будет поддерживать не понятна логика, почему сделан запрос повторно.
    Написано
  • Как передать список разделов в Битрикс?

    @koder_1
    by_steris, Для сортировки разделов в catalog.section.list есть параметр
    'CUSTOM_SECTION_SORT' => array('DEPTH_LEVEL' => 'ASC')

    Документация вот.
    https://dev.1c-bitrix.ru/user_help/components/cont...
    Написано
  • Как передать список разделов в Битрикс?

    @koder_1
    by_steris, А тогда сами разделы изначально есть в $arResult['SECTIONS']
    Их не нужно в таком случае получать через CIBlockSection::GetList это уже сам компонент сделал.
    Написано
  • Как передать список разделов в Битрикс?

    @koder_1
    by_steris, Кстати, писать такое через API- не правильно с точки зрения Битрикс.
    Вместо этого нужно использовать компоненты, в данном случае catalog.section.list
    а уже в шаблоне компонента эти циклы.
    А здесь судя по всему, это и в шаблоне какого-то компонента, не сообразил сразу.
    Написано
  • Как передать список разделов в Битрикс?

    @koder_1
    by_steris, Именно так, меняем в цикле
    $sections_level_3[$sectionLvlTwo][$sectionLvlThree] = $arSect['ID'];

    на
    $sections_level_3[$sectionLvlTwo][$sectionLvlThree] = $arSect;
    Написано
  • Как передать список разделов в Битрикс?

    @koder_1
    by_steris,
    Ни в коем случае никогда не вызываем CIBlockSection::GetList повторно. Смысл запрашивать из базы то, что уже запрошено?

    $sectionLvlThree = $arSect['ID'];
            $sections_level_3[$sectionLvlTwo][$sectionLvlThree] = $arSect;
    Написано
  • Как передать список разделов в Битрикс?

    @koder_1
    by_steris,
    $arFilter = array('IBLOCK_ID' => 1, 'ACTIVE' => 'Y');
    $arSelect = array('IBLOCK_ID', 'ID', 'NAME', 'SECTION_PAGE_URL', 'DETAIL_PICTURE', 'DEPTH_LEVEL', 'IBLOCK_SECTION_ID', 'LEFT_MARGIN');
    $rsSect = CIBlockSection::GetList(
        array("DEPTH_LEVEL" => "ASC", "LEFT_MARGIN" => "ASC"), //сортировка
        $arFilter, //фильтр
        false, //выводить количество элементов - нет
        $arSelect //выборка вывода
    );
    
    
    //while ($arSect = $rsSect->GetNext()) {
    //    if ($arSect['DEPTH_LEVEL'] == 1) {
    //        $newSection[$arSect['ID']] = $arSect;
    //        $sectionLvlOne = $arSect['ID'];
    //    }
    //    $arResult['NEW_SECTIONS'] = $newSection;
    //}
    
    $sections = array();
    while ($arSect = $rsSect->GetNext()) {
        $sections[] = $arSect;
    }
    
    foreach($sections as $arSect):
        if ($arSect['DEPTH_LEVEL'] == 1) {
            $newSection[$arSect['ID']] = $arSect;
        }
    endforeach;
    foreach($sections as $arSect):
        if ($arSect['DEPTH_LEVEL'] == 2) {
            $sectionLvlOne = $arSect['IBLOCK_SECTION_ID'];
            if (!isset($newSection[$sectionLvlOne]['SECOND_LVL']))
            {
                 $newSection[$sectionLvlOne]['SECOND_LVL'] = array();
            }
            $newSection[$sectionLvlOne]['SECOND_LVL'][$arSect['ID']] = $arSect;
        }
    endforeach;
    
    // собрать 3 уровень слегка сложнее
    $sections_level_3 = [];
    foreach($sections as $arSect):
        if ($arSect['DEPTH_LEVEL'] == 3) {
            $sectionLvlTwo = $arSect['IBLOCK_SECTION_ID'];
            if (!isset($sections_level_3[$sectionLvlTwo]))
            {
                 $sections_level_3[$sectionLvlTwo] = array();
            }
            $sectionLvlThree = $arSect['ID'];
            $sections_level_3[$sectionLvlTwo][] = $sectionLvlThree;        
        }
    endforeach;
    
    foreach($newSection as $newSectionKey => $newSectionItem):
    if (isset($newSectionItem['SECOND_LVL']) && is_array($newSectionItem['SECOND_LVL']) && count($newSectionItem['SECOND_LVL']))
    {
         foreach($newSectionItem['SECOND_LVL'] as $second_level_id => $second_level_item):
             if (isset($sections_level_3[$second_level_id]))
             {
                   $newSection[$newSectionKey]['SECOND_LVL'][$second_level_id]['THIRD_LVL'] = $sections_level_3[$second_level_id];
             }
         endforeach;
    }
    endforeach;
    
    $arResult['NEW_SECTIONS'] = $newSection;


    Исправил
    foreach($newSectionItem['SECOND_LVL'] as $second_level_id => $second_level_item):
    Написано
  • Как передать список разделов в Битрикс?

    @koder_1
    Еще момент прежде чем такое писать, нужно убедиться, что $newSection[$sectionLvlOne]['SECOND_LVL'] задано.
    $newSection[$sectionLvlOne]['SECOND_LVL'][$arSect['ID']] = $arSect;


    Поэтому добавляем такое.
    if (!isset($newSection[$sectionLvlOne]['SECOND_LVL']))
            {
                 $newSection[$sectionLvlOne]['SECOND_LVL'] = array();
            }
     $newSection[$sectionLvlOne]['SECOND_LVL'][$arSect['ID']] = $arSect;
    Написано
  • Как передать список разделов в Битрикс?

    @koder_1
    by_steris, Это уже потому что у меня опечатка была, вместо $arSect я писал $arSectx, исправил.
    Написано
  • Как передать список разделов в Битрикс?

    @koder_1
    $arFilter = array('IBLOCK_ID' => 1, 'ACTIVE' => 'Y');
    $arSelect = array('IBLOCK_ID', 'ID', 'NAME', 'SECTION_PAGE_URL', 'DETAIL_PICTURE', 'DEPTH_LEVEL', 'IBLOCK_SECTION_ID', 'LEFT_MARGIN');
    $rsSect = CIBlockSection::GetList(
        array("DEPTH_LEVEL" => "ASC", "LEFT_MARGIN" => "ASC"), //сортировка
        $arFilter, //фильтр
        false, //выводить количество элементов - нет
        $arSelect //выборка вывода
    );
    
    
    //while ($arSect = $rsSect->GetNext()) {
    //    if ($arSect['DEPTH_LEVEL'] == 1) {
    //        $newSection[$arSect['ID']] = $arSect;
    //        $sectionLvlOne = $arSect['ID'];
    //    }
    //    $arResult['NEW_SECTIONS'] = $newSection;
    //}
    
    $sections = array();
    while ($arSect = $rsSect->GetNext()) {
        $sections[] = $arSect;
    }
    
    foreach($sections as $arSect):
        if ($arSect['DEPTH_LEVEL'] == 1) {
            $newSection[$arSect['ID']] = $arSect;
        }
    endforeach;
    foreach($sections as $arSect):
        if ($arSect['DEPTH_LEVEL'] == 2) {
            $sectionLvlOne = $arSect['IBLOCK_SECTION_ID'];
            if (!isset($newSection[$sectionLvlOne]['SECOND_LVL']))
            {
                 $newSection[$sectionLvlOne]['SECOND_LVL'] = array();
            }
            $newSection[$sectionLvlOne]['SECOND_LVL'][$arSect['ID']] = $arSect;
        }
    endforeach;
    
    // собрать 3 уровень слегка сложнее
    $sections_level_3 = [];
    foreach($sections as $arSect):
        if ($arSect['DEPTH_LEVEL'] == 3) {
            $sectionLvlTwo = $arSect['IBLOCK_SECTION_ID'];
            if (!isset($sections_level_3[$sectionLvlTwo]))
            {
                 $sections_level_3[$sectionLvlTwo] = array();
            }
            $sectionLvlThree = $arSect['ID'];
            $sections_level_3[$sectionLvlTwo][] = $sectionLvlThree;        
        }
    endforeach;
    
    foreach($newSection as $newSectionKey => $newSectionItem):
    if (isset($newSectionItem['SECOND_LVL']) && is_array($newSectionItem['SECOND_LVL']) && count($newSectionItem['SECOND_LVL']))
    {
         foreach($newSectionItem['SECOND_LVL'] as $second_level_id):
             if (isset($sections_level_3[$second_level_id]))
             {
                   $newSection[$newSectionKey]['SECOND_LVL'][$second_level_id]['THIRD_LVL'] = $sections_level_3[$second_level_id];
             }
         endforeach;
    }
    endforeach;
    
    $arResult['NEW_SECTIONS'] = $newSection;
    Написано
  • Как передать список разделов в Битрикс?

    @koder_1
    $arFilter = array('IBLOCK_ID' => 1, 'ACTIVE' => 'Y');
    $arSelect = array('IBLOCK_ID', 'ID', 'NAME', 'SECTION_PAGE_URL', 'DETAIL_PICTURE', 'DEPTH_LEVEL', 'IBLOCK_SECTION_ID');
    $rsSect = CIBlockSection::GetList(
        array("DEPTH_LEVEL" => "ASC"), /* <b>если это изменение приведёт к тому, что в цикл попадут сначала разделы 1 уровня, затем второго уровня и затем 3 уровня, то цикл while менять не нужно</b>*/
        $arFilter, //фильтр (выше объявили)
        false, //выводить количество элементов - нет
        $arSelect //выборка вывода, нам нужно только название, описание, картинка
    );
    $sections = array();
    while ($arSect = $rsSect->GetNext()) {
        //echo '<pre>'; print_r($arSect); '</pre>';
       $sections[] = $arSect;
    }
    
    foreach($sections as $arSect):
        if ($arSect['DEPTH_LEVEL'] == 1) {
            $newSection[$arSect['ID']] = $arSect;
            $sectionLvlOne = $arSect['ID'];
        }
    endforeach;
    foreach($sections as $arSect):
        if ($arSect['DEPTH_LEVEL'] == 2) {
            $newSection[$sectionLvlOne]['SECOND_LVL'][$arSect['ID']] = $arSect;
            $sectionLvlTwo = $arSect['ID'];
        }
    endforeach;
    foreach($sections as $arSect):
        if ($arSect['DEPTH_LEVEL'] == 3) {
            $newSection[$sectionLvlOne]['SECOND_LVL'][$sectionLvlTwo]['THIRD_LVL'][$arSect['ID']] = $arSect;
            $sectionLvlThree = $arSect['ID'];
        }
    endforeach;
        $arResult['NEW_SECTIONS'] = $newSection;
    Написано
  • Как передать список разделов в Битрикс?

    @koder_1
    by_steris, Нет конечно. Делать цикл внутри цикла не нужно.
    Написано
  • Как передать список разделов в Битрикс?

    @koder_1
    Если удастся добиться того, что разделы будут отсортированы по DEPTH_LEVEL и сначала будут в цикле разделы 1 уровня, затем 2 уровня и затем 3 уровня, то и Ваш цикл будет работать.
    Написано