Поддержка серверов

CSmile::getList: метод Битрикс

Постоянная ссылка: http://bxapi.ru/src/?id=165975

//    CSmile::getList()
//    /bitrix/modules/main/classes/general/smile.php:364

    public static function getList($arParams = Array(), $lang = LANGUAGE_ID)
    {
        global $DB;

        $arResult = $arSelect = $arOrder = $arFilter = $arJoin = Array();
        if (!isset($arParams['SELECT']) || !is_array($arParams['SELECT']))
            $arParams['SELECT'] = Array('ID', 'SET_ID', 'TYPE', 'NAME', 'SORT', 'TYPING', 'CLICKABLE', 'HIDDEN', 'IMAGE', 'IMAGE_DEFINITION', 'IMAGE_WIDTH', 'IMAGE_HEIGHT');

        // select block
        foreach ($arParams['SELECT'] as $fieldName)
        {
            if ($fieldName == 'NAME')
            {
                $arSelect['NAME'] = 'sl.'.$fieldName;
                $arJoin['LANG'] = "LEFT JOIN b_smile_lang sl ON sl.TYPE = '".self::TYPE_SMILE."' AND sl.SID = s.ID AND sl.LID = '".$DB->ForSql(htmlspecialcharsbx($lang))."'";
            }
            elseif ($fieldName == 'SET_NAME')
            {
                $arSelect['SET_ID'] = 's.SET_ID';
                $arSelect['SET_NAME'] = 'sl2.NAME as SET_NAME';
                $arJoin['LANG2'] = "LEFT JOIN b_smile_lang sl2 ON sl2.TYPE = '".CSmileSet::TYPE_SET."' AND sl2.SID = s.SET_ID AND sl2.LID = '".$DB->ForSql(htmlspecialcharsbx($lang))."'";
            }
            else
            {
                $arSelect[$fieldName] = 's.'.$fieldName;
            }
        }
        $arSelect['ID'] = 's.ID';

        // filter block
        if (isset($arParams['FILTER']['ID']))
        {
            if (is_array($arParams['FILTER']['ID']))
            {
                $ID = Array();
                foreach ($arParams['FILTER']['ID'] as $key => $value)
                    $ID[$key] = intval($value);

                if (!empty($ID))
                    $arFilter[] = "s.ID IN (".implode(',', $ID).')';
            }
            else
            {
                $arFilter[] = "s.ID = ".intval($arParams['FILTER']['ID']);
            }
        }
        if (isset($arParams['FILTER']['SET_ID']))
        {
            if (is_array($arParams['FILTER']['SET_ID']))
            {
                $ID = Array();
                foreach ($arParams['FILTER']['SET_ID'] as $key => $value)
                    $ID[$key] = intval($value);

                if (!empty($ID))
                    $arFilter[] = "s.SET_ID IN ('".implode("','", $ID)."')";
            }
            else
            {
                $arFilter[] = "s.SET_ID = ".intval($arParams['FILTER']['SET_ID']);
            }
        }
        if (isset($arParams['FILTER']['TYPE']) && in_array($arParams['FILTER']['TYPE'], Array(self::TYPE_SMILE, self::TYPE_ICON)))
        {
            $arFilter[] = "s.TYPE = '".$arParams['FILTER']['TYPE']."'";
        }
        if (isset($arParams['FILTER']['PARENT_ID']))
        {
            $arFilter[] = "ss2.PARENT_ID = ".intval($arParams['FILTER']['PARENT_ID']);
            $arJoin['PARENT'] = "LEFT JOIN b_smile_set ss2 ON ss2.ID = s.SET_ID";
        }

        // order block
        if (isset($arParams['ORDER']) && is_array($arParams['ORDER']))
        {
            foreach ($arParams['ORDER'] as $by => $order)
            {
                $order = strtoupper($order) == 'ASC'? 'ASC': 'DESC';
                $by = strtoupper($by);
                if (in_array($by, Array('ID', 'SET_ID', 'SORT', 'IMAGE_DEFINITION', 'HIDDEN')))
                {
                    $arOrder[$by] = 's.'.$by.' '.$order;
                }
            }
        }
        else
        {
            $arOrder['ID'] = 's.ID DESC';
        }

        $strSelect = "SELECT ".implode(', ', $arSelect);
        $strSql = "
            FROM b_smile s
            ".(!empty($arJoin)? implode(' ', $arJoin): "")."
            ".(!empty($arFilter)? "WHERE ".implode(' AND ', $arFilter): "")."
            ".(!empty($arOrder)? "ORDER BY ".implode(', ', $arOrder): "")."
        ";

        if (isset($arParams['RETURN_SQL']) && $arParams['RETURN_SQL'] == 'Y')
        {
            return $strSelect.$strSql;
        }

        if(array_key_exists("NAV_PARAMS", $arParams) && is_array($arParams["NAV_PARAMS"]))
        {
            $nTopCount = intval($arParams['NAV_PARAMS']['nTopCount']);
            if($nTopCount > 0)
            {
                $strSql = $DB->TopSql($strSelect.$strSql, $nTopCount);
                $res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
            }
            else
            {
                $res_cnt = $DB->Query("
                    SELECT COUNT(s.ID) as CNT
                    FROM b_smile s
                    ".(!empty($arFilter)? "WHERE ".implode(' AND ', $arFilter): "")
                );
                $arCount = $res_cnt->Fetch();
                $res = new CDBResult();
                $res->NavQuery($strSelect.$strSql, $arCount["CNT"], $arParams["NAV_PARAMS"]);
            }
        }
        else
        {
            $res = $DB->Query($strSelect.$strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
        }

        if (isset($arParams['RETURN_RES']) && $arParams['RETURN_RES'] == 'Y')
        {
            return $res;
        }
        else
        {
            while ($row = $res->GetNext(true, false))
                $arResult[$row['ID']] = $row;

            return $arResult;
        }
    }
';

Блог разработчика

9 августа 2016 ResizeImageGet и простой водяной знак налету

Сегодня поговорим о том как проще всего воткнуть водяной знак на картинки в Битрикс. Например, на все изображения каталога.

21 июля 2016 Добавление вкладки в CRM коробки Битрикс24

В этом посте я покажу, как легко и просто добавить вкладку в сущность CRM. И не просто добавить, а вывести там свой контент.

21 июля 2016 Как просто обращаться из коробки Битрикс24 на сайт на базе Битрикс

К примеру вам хочется внутренним скриптом дернуть с сайта-магазина информацию, которая там, в свою очередь, закрыта некоторыми правами. Например, админскими. Можно конечно мутить свой REST, или иной формат общения, но проще всего воспользоваться штатным инструментом:

Текст сообщения*
Загрузить изображение