Задать вопрос
  • Как реализовать связную фильтрацию в Битрикс?

    tomdropov90
    @tomdropov90 Автор вопроса
    Андрей Николаев, Я решил, проблема была в том, что надо добавить что я ищу значения в Списке:

    <?php
    require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
    
    CModule::IncludeModule('iblock');
    
    $iblockId = 27; // Замените на ID вашего инфоблока
    
    // Получение данных из AJAX-запроса
    $cityToFind = $_POST['CITY'];
    $companyToFind = $_POST['COMPANY'];
    $specializationToFind = $_POST['SPECIALIZATION'];
    $categoryToFind = $_POST['CATEGORY'];
    
    $arFilter = [
        "IBLOCK_ID" => $iblockId,
        "ACTIVE" => "Y",
    ];
    
    // Функция для получения ID значения из списка (enum) по его символьному коду и коду свойства
    function getEnumIdByCode($enumCode, $propertyCode, $iblockId)
    {
        $enumId = false;
        $propertyEnum = CIBlockPropertyEnum::GetList([], [
            "IBLOCK_ID" => $iblockId,
            "CODE" => $propertyCode,
            "VALUE" => $enumCode,
        ]);
        if ($enumValue = $propertyEnum->Fetch()) {
            $enumId = $enumValue["ID"];
        }
        return $enumId;
    }
    
    // Добавление фильтров на основе полученных данных
    if (!empty($cityToFind)) {
        $enumId = getEnumIdByCode($cityToFind, "CITY", $iblockId);
        if ($enumId) {
            $arFilter["PROPERTY_CITY"] = $enumId;
        }
    }
    
    if (!empty($companyToFind)) {
        $enumId = getEnumIdByCode($companyToFind, "COMPANY", $iblockId);
        if ($enumId) {
            $arFilter["PROPERTY_COMPANY"] = $enumId;
        }
    }
    
    if (!empty($specializationToFind)) {
        $enumId = getEnumIdByCode($specializationToFind, "SPECIALIZATION", $iblockId);
        if ($enumId) {
            $arFilter["PROPERTY_SPECIALIZATION"] = $enumId;
        }
    }
    
    if (!empty($categoryToFind)) {
        $enumId = getEnumIdByCode($categoryToFind, "CATEGORY", $iblockId);
        if ($enumId) {
            $arFilter["PROPERTY_CATEGORY"] = $enumId;
        }
    }
    
    $arSelect = ["ID", "NAME"];
    $res = CIBlockElement::GetList([], $arFilter, false, false, $arSelect);
    
    $arResult = [];
    
    while ($ob = $res->GetNextElement()) {
        $arFields = $ob->GetFields();
        $arResult[] = [
            "ID" => $arFields["ID"],
            "NAME" => $arFields["NAME"],
        ];
    }
    
    // Отправка JSON-ответа
    header('Content-Type: application/json');
    echo json_encode($arResult);
    
    require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php");
    ?>
  • Как реализовать связную фильтрацию в Битрикс?

    tomdropov90
    @tomdropov90 Автор вопроса
    Андрей Николаев, Я обновил код в вопросе, изначально старый залил, извиняюсь

    Вот новый:

    <?php
    require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
    
    CModule::IncludeModule('iblock');
    
    $iblockId = 27; // Замените на ID вашего инфоблока
    
    // Получение данных из AJAX-запроса
    $cityToFind = $_POST['CITY'];
    $companyToFind = $_POST['COMPANY'];
    $specializationToFind = $_POST['SPECIALIZATION'];
    $categoryToFind = $_POST['CATEGORY'];
    
    $arFilter = [
        "IBLOCK_ID" => $iblockId,
        "ACTIVE" => "Y",
    ];
    
    // Добавление фильтров на основе полученных данных
    if (!empty($cityToFind)) {
        $arFilter["PROPERTY_CITY"] = $cityToFind;
    }
    
    if (!empty($companyToFind)) {
        $arFilter["PROPERTY_COMPANY"] = $companyToFind;
    }
    
    if (!empty($specializationToFind)) {
        $arFilter["PROPERTY_SPECIALIZATION"] = $specializationToFind;
    }
    
    if (!empty($categoryToFind)) {
        $arFilter["PROPERTY_CATEGORY"] = $categoryToFind;
    }
    
    $arSelect = ["ID", "NAME"];
    $res = CIBlockElement::GetList([], $arFilter, false, false, $arSelect);
    
    $arResult = [];
    
    while ($ob = $res->GetNextElement()) {
        $arFields = $ob->GetFields();
        $arResult[] = [
            "ID" => $arFields["ID"],
            "NAME" => $arFields["NAME"],
        ];
    }
    
    // Отправка JSON-ответа
    header('Content-Type: application/json');
    echo json_encode($arResult);
    
    require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php");
    ?>