Ответы пользователя по тегу 1С-Битрикс
  • Много свойств в одном инфоблоке. Как лучше спроектировать структуру сайта?

    @Firsov36
    full-stack web developer
    Все не стандартные решения Битрикс не поддерживает и тут приходят на помощь специалисты. Возможно Ваша проблема не в том, что компонент или сервер не могут обработать Ваши тысячи свойств, а в том, что не правильно используете эти свойства, чего-то недопонимаете.

    То, что можно раскидать свойства по инфоблокам, тоже вариант, опять же надо знать Вашу "кухню" нужно ли это и Битриксом это поддерживается, например bitrix:catalog.main компонент, в котором используются bitrix:catalog.

    Highload блоки быстрые, свойство инфоблока можно привязать к Highload блокам как привязка к Справочнику. Или же написать свой функционал.

    в ручную делать костыли
    - не костыли, а свое решение задачи))
    Ответ написан
    Комментировать
  • 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 комментария
  • Как получить id всех элементов с привязкой к элементам в свойствах?

    @Firsov36
    full-stack web developer
    Если старым способом то так:

    $propertyBrandValue = 'НАЗВАНИЕ';
    $iBlockId_1 = 9;
    
    $res = CIBlockElement::GetList(array(),
        array(
            'IBLOCK_ID' => $iBlockId_1,
            '=PROPERTY_C_BRANDS.NAME' => $propertyBrandValue
        ),
        false,
        array('nTopCount' => 10),
        array('ID', 'IBLOCK_ID', 'NAME')
    );
    
    while($el = $res->GetNext()) {
        \Bitrix\Main\Diag\Debug::dump($el);
    }


    =PROPERTY_C_BRANDS.NAME - тут NAME меняете на поле или свойство. Описание метода и фильтрации тут: документация Битрикс

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

    На ORM можно разными способами от среднего до сложного, но это уже надо видеть где вы используете этот код, чтобы выбрать каким путем идти. Способ сложнее, но зато простые и быстрые запросы.

    Ну и я не уверен, что у Вас там вообще никаких значений первого ИБ нету.

    В общем представленный код рабочий и проверен, дальше думайте сами.
    Ответ написан
  • В меню битрикса добавляю новый раздел, который должен вести на другой сайт?

    @Firsov36
    full-stack web developer
    Если у Вас есть соответствующие права, то в панели Битрикса, в развернутом его состоянии есть возможность выбрать какое меню редактировать.

    5e466ee36ce81867113428.png

    Выбрав нужно меню, для каждого пункта указывается путь (колонка "ссылка")

    5e466f10f0af0536055298.png

    Если Вам нужно создать именно раздел на сайте, при попадании в которой пользователя перенаправляют на другой сайт, то в файловой системе нужно создать папку, в ней файл index.php с таким содержимым:

    <?php
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
    LocalRedirect('https://mysite.ru');
    Ответ написан
    9 комментариев
  • Как вывести xml_id выбранного значения свойства типа список?

    @Firsov36
    full-stack web developer
    Если стоит версия Битрикс позднее осени 2019, то можно через ORM

    $iblock = \Bitrix\Iblock\Iblock::wakeUp(9);
    $elements = $iblock->getEntityDataClass()::getList(
        [
            'filter' => ['ID' => 28770],
            'select' => ['ID', 'C_CATALOG_LABELS']
        ]
    )->fetch();
    \Bitrix\Main\Diag\Debug::dump($elements);


    9 - ID инфоблока
    28770 - ID элемента инфоблока
    C_CATALOG_LABELS - код свойства.

    ну и код можно переделать под несколько элементов или сразу все, несколько свойств. Вместо fetch() использовать fetchCollection() и т.д..

    если нужно старыми методами, то могу написать завтра, если до меня не ответят..
    Ответ написан