Такое поведение происходит по целому ряду причин. В первую очередь это false в engine/include/functions/File.php—>LocalPath()
не нашел ничего лучше чем закостылить:
static public function LocalPath($sPath, $xRoot) {
$xResult = false;
if (is_array($xRoot)) {
foreach ($xRoot as $sRoot) {
$xResult = static::LocalPath($sPath, $sRoot);
if ($xResult) {
return $xResult;
}
}
return $xResult;
} else {
$sRoot = (string)$xRoot;
}
if ($sPath && $sRoot) {
$sPath = static::NormPath($sPath);
$sRoot = static::NormPath($sRoot . '/');
//135
// костылим local URL
if (substr($sPath, 0, 1) === '/')
return substr($sPath, strlen($sRoot));
elseif (strpos($sPath, $sRoot) === 0 || strpos($sPath . '/', $sRoot) === 0) {
return substr($sPath, strlen($sRoot));
}
}
return $xResult;
}
Следующая грабля поджидает в engine/include/functions/File.php:ImgModSuffix(). Тут уже интереснее. Здесь потерпят фиаско уже не только попытки работы с local URL, но и все, кто попробует задать высоту вместе с шириной [и с crop/fit/pad]. Вносим минимальные правки — добавляем второй делитель и исправляем экстракцию высоты:
static public function ImgModSuffix($xSize = null, $sExtension = null) {
$sResult = '';
$nPos = strpos($xSize, 'x');
$mPos = strpos($xSize, '-');
if ($nPos === false) {
$nHeight = $nWidth = intval($xSize);
} elseif ($nPos === 0) {
$nWidth = 0;
$nHeight = intval(substr($xSize, 1));
} else {
$nWidth = intval(substr($xSize, 0, $nPos));
$mPos ? $nHeight = intval(substr($xSize, $nPos + 1, $mPos)) : $nHeight = intval(substr($xSize, $nPos + 1));
}
if ($nWidth || $nHeight) {
$sResult .= '-' . ($nWidth ? $nWidth : '') . 'x' . $nHeight;
if (strpos($xSize, 'fit')) {
$sResult .= '-fit';
} else if (strpos($xSize, 'crop')) {
$sResult .= '-crop';
} else if (strpos($xSize, 'pad')) {
$sResult .= '-pad';
}
if ($sExtension) {
$sResult .= '.' . strtolower($sExtension);
}
}
return $sResult;
}
Теперь получаем правильное имя файла, но если у нас его пока ещё нет, то чтобы он генерился в случае local URL нам надо в engine/include/functions/File.php—>Url2Dir() этот local URL закостылить, иначе проверка исходника на существование не пройдёт и $this->Img_Duplicate($sFile) в getPreviewImageUrl() не случится.
0 комментариев