Мини GetList для файлов

В исходниках битрикса есть CAllFile::GetList($arOrder, $arFilter, $arParams); но он видимо служит для внутреннего использования и не описан в документации. Нам нужно выбрать описание по 10 файлам за раз, этот метод, в качестве параметра фильтра массив из ID файлов не принял. Пришлось накидать свою функцию.

function __arfileGetList($ar_FileID)
{
	if(is_array($ar_FileID) && count($ar_FileID) > 0)
	{
		global $DB;
		$rs_File = $DB->Query(
			"SELECT * FROM b_file WHERE ID IN 
                               (". implode(',', $ar_FileID). ")",
			false,
			"FILE: ".__FILE__." LINE: ".__LINE__
		);
		while($ar_File = $rs_File->Fetch())
		{
			$ar_Result[] = $ar_File;
		}

		if(is_array($ar_Result) && count($ar_Result) > 0)
			return $ar_Result;
	}
}

P/S
Не забудте проверить $ar_FileID, чтобы там были именно ID файлов…

6 thoughts on “Мини GetList для файлов

  1. //@2DO: внести в ветку ифа работу с превьюшкой и детальной картинкой
    //@BUG: максим Смирнов признал баг в API, в следующий апдейт должны починить

    // конвертируем массив в строку
    $strFileID = »;
    foreach($arFilesID as $fileID)
    {
    $strFileID .= $fileID . ‘,’;
    }
    // отрезаем последнюю запятую
    $strFileID = substr($strFileID,0, strlen($strFileID)-1);
    // в фильтр добавляем плейсхолдер
    $arFilesID = array(«@ID» => $strFileID);

    // делаем запрос
    $arResultFiles = array();
    $rcsFiles = CFile::GetList(false, $arFilesID, false);
    while($arFile = $rcsFiles->GetNext())
    {
    // делаем реврайтинг и создаём поле SRC
    // в поле SRC хранится путь к ресурсу
    $src = «/».(COption::GetOptionString(«main», «upload_dir», «upload»)).»/».$arFile[«SUBDIR»].»/».$arFile[«FILE_NAME»];
    $src = str_replace(«//»,»/»,$src);
    if(defined(«BX_IMG_SERVER»))
    $src = BX_IMG_SERVER.$src;
    $arFile = $arFile + Array(«SRC» => $src);

    $arResultFiles[$arFile[‘ID’]] = $arFile;
    }

    У меня вот так вполне неплохо работает

  2. $arFilesID = array(‘ID’ => $strFileID); я сюда массив подставил, а не строку с ID, спасибо Максим…

  3. И
    $strFileID = »;
    foreach($arFilesID as $fileID)
    {
    $strFileID .= $fileID . ‘,’;
    }
    Лучше заменить на implode(‘,’, $arFilesID)

  4. foreach($arFilesID as $fileID)
    {
    $strFileID .= $fileID . ‘,’;
    }

    встроенная функция должна же быть быстрее?
    $strFileID = implode(‘,’, $arFilesID);

Comments are closed.