Задать вопрос
  • D7. Выборка разделов с подсчетом количества элементов?

    @Firsov36 Автор вопроса
    full-stack web developer
    Вопрос закрыт. Нашел у себя ошибку.
    Кому интересно, делается так:

    $iBlockId = 10;
    $sectionId = 53;
    
    $filter = [
        'IBLOCK_ID' => $iBlockId,
        'ACTIVE' => 'Y',
        'IBLOCK_SECTION_ID' => $sectionId
    ];
    
    $select = [
        'ID', 'IBLOCK_ID', 'countElements'
    ];
    
    $runtime = [
        'elements' => [
            'data_type' =>"Bitrix\Iblock\ElementTable",
            'reference' => [
                '=this.IBLOCK_ID' => 'ref.IBLOCK_ID',
                '=this.ID' => 'ref.IBLOCK_SECTION_ID',
                '=this.ACTIVE' => 'ref.ACTIVE',
            ],
            //'join_type' => "LEFT"
        ],
        'countElements' => [
            'data_type' => 'integer',
            'expression' => ['count(%s)', 'elements.ID']
        ]
    ];
    
    $res = Bitrix\Iblock\SectionTable::getList(
        [
            'filter' => $filter,
            'select' => $select,
            'runtime' => $runtime
        ]
    );
    
    while($section = $res->fetch())
    {
        \Bitrix\Main\Diag\Debug::dump($section, $section['ID']);
    }
    Ответ написан
    2 комментария
  • Как найти циклы в массиве?

    @ksnk
    Вот более оптимизированный говнокод ;)
    $array = [
        385 => 392,
        386 => 392,
        387 => 392,
        390 => 402,
        402 => 421,
        405 => 401,
        409 => 416,
        410 => 401,
        414 => 402,
        416 => 389,
        420 => 421,
        421 => 422,
        422 => 420,
    ];
    
    foreach ($array as $key => $value) {
        $level=0;
        $leaf=[$key=>$level]; $v=$value;
        while(true){
            if(!isset($array[$v])) break;
            $v=$array[$v];
            if(isset($leaf[$v])) {
                // loop found
                // is it real loop ?
                if($key==$v) {
                    printf("\n %s => %s", $key, $value);
                }
                break;
            }
            $leaf[$v]=++$level;
        }
    }
    Ответ написан
    2 комментария
  • Как добавить свою сортировку в CIBlockElement::GetList?

    @koder_1
    Битрикс программист
    Я бы сортировал элементы средствами php.

    Можно конечно придумать какое-нибудь дополнительное свойство, которое в элементах всех категорий кроме 20 равно 0, а в элементах 20 категории равно 1, и добавить сортировку по нему, но проще сортировать элементы средствами php.
    Ответ написан
    2 комментария