Ради интереса, через командную php-строку на demo.1c-bitrix.ru выполнил следующий код:
Код |
---|
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
if(!CModule::IncludeModule("iblock")) return;
$res = CIBlockElement::GetByID(68);
if($ar_res = $res->GetNext()) {
$newfile = CFile::GetByID($ar_res["PREVIEW_PICTURE"]);
}
echo "<pre>".print_r($newfile->fetch(),1)."</pre>"; |
получил массив вида
Код |
---|
Array
(
[ID] => 33
[TIMESTAMP_X] => 17.10.2011 13:38:11
[MODULE_ID] => iblock
[HEIGHT] => 100
[WIDTH] => 65
[FILE_SIZE] => 8157
[CONTENT_TYPE] => image/gif
[SUBDIR] => iblock/c72
[FILE_NAME] => apokal.gif
[ORIGINAL_NAME] => apokal.gif
[DESCRIPTION] =>
[HANDLER_ID] =>
[~src] =>
) |
т.е. этот пример аналогичен, тому коду, который используете вы.
А теперь посмотрим, что вернет нам для файла с этим же ID (33) функция CFile::GetFileArray, которая используется в исходниках функции ResizeImageGet
Код |
---|
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
$file = CFile::GetFileArray(33);
echo "<pre>".print_r($file,1)."</pre>"; |
Код |
---|
Array
(
[ID] => 33
[TIMESTAMP_X] => 17.10.2011 13:38:11
[MODULE_ID] => iblock
[HEIGHT] => 100
[WIDTH] => 65
[FILE_SIZE] => 8157
[CONTENT_TYPE] => image/gif
[SUBDIR] => iblock/c72
[FILE_NAME] => apokal.gif
[ORIGINAL_NAME] => apokal.gif
[DESCRIPTION] =>
[HANDLER_ID] =>
[~src] =>
[SRC] => /upload/iblock/c72/apokal.gif
) |
Как видно, во втором случае в ключе SRC у нас есть путь до файла, в первом случае этого ключа нет совсем
Теперь, если опять же вернуться к исходникам, в случае если размеры, которые мы указываем для генерации картинки не положительные или больше размеров оригинальной картинки, то функция попытается нам вернуть путь до оригинальной картинки
Код |
---|
function ResizeImageGet($file, $arSize, $resizeType = BX_RESIZE_IMAGE_PROPORTIONAL, $bInitSizes = false, $arFilters = false)
{
if (!is_array($file) && IntVal($file) > 0)
{
$file = CFile::GetFileArray($file);
}
if (!is_array($file) || !array_key_exists("FILE_NAME", $file) || StrLen($file["FILE_NAME"]) <= 0)
return false;
if ($resizeType != BX_RESIZE_IMAGE_EXACT && $resizeType != BX_RESIZE_IMAGE_PROPORTIONAL_ALT)
$resizeType = BX_RESIZE_IMAGE_PROPORTIONAL;
if (!is_array($arSize))
$arSize = array();
if (!array_key_exists("width", $arSize) || IntVal($arSize["width"]) <= 0)
$arSize["width"] = 0;
if (!array_key_exists("height", $arSize) || IntVal($arSize["height"]) <= 0)
$arSize["height"] = 0;
$arSize["width"] = IntVal($arSize["width"]);
$arSize["height"] = IntVal($arSize["height"]);
$uploadDirName = COption::GetOptionString("main", "upload_dir", "upload");
$imageFile = "/".$uploadDirName."/".$file["SUBDIR"]."/".$file["FILE_NAME"];
$arImageSize = false;
if (($arSize["width"] <= 0 || $arSize["width"] >= $file["WIDTH"])
&& ($arSize["height"] <= 0 || $arSize["height"] >= $file["HEIGHT"]))
{
global $arCloudImageSizeCache;
$arCloudImageSizeCache[$file["SRC"]] = array($file["WIDTH"], $file["HEIGHT"]);
return array("src" => $file["SRC"], "width" => IntVal($file["WIDTH"]), "height" => IntVal($file["HEIGHT"]));
} |
и в вашем случае строка
Код |
---|
return array("src" => $file["SRC"], "width" => IntVal($file["WIDTH"]), "height" => IntVal($file["HEIGHT"])); |
не вернет путь до картинки, т.к. в массиве нет значения $file["SRC"]