Как предоставить файл изображения по умолчанию для ImageCache для использования и обработки, когда оригинал не существует? - PullRequest
3 голосов
/ 19 июня 2010

Можно ли использовать ImageCache для использования изображения по умолчанию? Или используя htaccess, чтобы предоставить изображение по умолчанию для обработки изображений в кэше? Некоторые из наших клиентских сайтов имеют размер> 4 ГБ, и очень тяжело работать со всеми их изображениями, которые нам не нужны для разработки. Я пытался использовать htaccess, но ImageCache не обрабатывает файл, а просто использует размеры файлов, что портит макет.

Есть мысли?

Ответы [ 2 ]

2 голосов
/ 21 июня 2010

Как я понимаю, 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 для любого файла по умолчанию.)

0 голосов
/ 17 января 2013

Я написал модуль для этого, потому что мне тоже не нравилось работать с неработающими макетами, и я ненавидел тянуть гигантские каталоги файлов, чтобы получить 1-10 ГБ + изображений только для того, чтобы исправить макет.оборачивая theme ('imagecache') и theme ('image_style') в логику, чтобы обнаружить неработающие пути.Также работает с форматерами изображений, а также с функциями тем.

http://drupal.org/project/imagecache_defaults

Работает для Drupal 6 и 7.

Удар по файловой системе дополнительное время для каждого изображения можномедленно для некоторых конфигураций сервера (http://drupal.org/node/908282), поэтому imagecache_defaults постоянно кэширует все, что обнаруживает, о файлах на вашем сервере и некоторых других вещах (для достижения наилучших результатов используйте реализацию кэша без базы данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...