Как я понимаю, ImageCache отвечает на URI, такие как
http://www.yourdomain.com/default/files/imagecache/set/images/pic.png
, где http://www.yourdomain.com
- это ваш домен, files/imagecache
- это путь к кешированию изображения, set
- это предопределенный набор настроек управления изображениями, а остальные(здесь: images/pic.png
) - фактический относительный путь к исходному изображению.
Таким образом, если pic.png не существует, другой файл (default.png) должен быть передан в ImageCache.Решением .htaccess для несуществующих файлов может быть:
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule ^([^.]+)\.[gif|jpg|png]$ /images/default.png [L]
Теперь ImageCache запрашивает images/pic.png
, который не существует и получает images/default.png
, обрабатывает его и сохраняет в default/files/imagecache/set/images/pic.png
.
Ну, по крайней мере, это моя теория.
С уважением, Пол
- ########### -
РЕДАКТИРОВАТЬ относительно первогоКомментарий: Хорошо, я заглянул в модуль.В imagecache.module
строка 386 запускает вспомогательную функцию _imagecache_cache($presetname, $path)
.В этой функции проверяется наличие исходного файла (строка 403).Измените этот блок
// Check if the path to the file exists.
if (!is_file($src) && !is_file($src = file_create_path($src))) {
watchdog('imagecache', '404: Unable to find %image ', array('%image' => $src), WATCHDOG_ERROR);
header("HTTP/1.0 404 Not Found");
exit;
};
на
// Check if the path to the file exists.
if (!is_file($src) && !is_file($src = file_create_path($src))) {
watchdog('imagecache', '404: Unable to find %image ', array('%image' => $src), WATCHDOG_ERROR);
/*header("HTTP/1.0 404 Not Found");
exit;*/
$src = 'sites/all/modules/imagecache/sample.png';
};
(Примечания. Я оставил строки исходного кода в качестве комментариев. Вы можете установить $ src для любого файла по умолчанию.)