[Решено] Абсолютный путь img src= в функции theme('imagecache', 'preset', $user->picture)

Главные вкладки

Аватар пользователя Mascher Mascher 30 мая 2011 в 15:04

Возникла некоторая проблема с выводом функции theme с хуком imagecache.
Дело в том, что функция theme('imagecache', 'avatar-preset', $user->picture) по умолчанию выдает следующий результат:
<img class="imagecache avatar-preset" height="20" width="20" title="" alt="" src="http://fantasy-portal.ru/sites/default/files/imagecache/bloger-list-avatar/pictures/avatars/picture-7.jpg">

Зачем imgecache выводит в img src полный url до картинки с доменным именем, я не понимаю.
Думаю должна быть возможность вывода картинки без http и доменного имени (" http://fantasy-portal.ru ") ...

По идее, вот переменные, которые влияют на вывод данной функции:
print theme('imagecache', $preset, $image['filepath'], $alt, $title, $attributes);

Со всеми переменными кроме $attributes, все понятно. Интересно какие значения могут быть в переменной $attributes?

Комментарии

Аватар пользователя Mascher Mascher 30 мая 2011 в 15:22

G.A. Vinogradov wrote:
Вот вам не похуй, как выводится? Или 24 байта трафика пожалели?

Ну как бы не 24 байта а 1,5-2 килобайта лишнего трафика на некоторых страницах, но зачем лишние байты если от них можно избавится?

Аватар пользователя G.A. Vinogradov G.A. Vinogradov 30 мая 2011 в 15:30

Mascher wrote:
G.A. Vinogradov wrote:
Вот вам не похуй, как выводится? Или 24 байта трафика пожалели?

Ну как бы не 24 байта а 1,5-2 килобайта лишнего трафика на некоторых страницах, но зачем лишние байты если от них можно избавится?

24 байта на каждую картинку, если быть точным. Если картинка весит в среднем 50Кб - то это 0.05% прироста.
P.S. используйте gzip на выходе Wink

Аватар пользователя Mascher Mascher 1 июня 2011 в 10:11

Тыкс, с переменной $attributes разобрался, она никак не влияет на формирование img src...

Переменная $attributes является массивом, в котором можно задать различные атрибуты объекта, в нашем случае это тэг img, например:

  print theme('imagecache', 'имя пресета imagecache', 'путь до картинки', 'альт', 'тайтл', array('border' => 0, 'class' => 'CSS класс картинки', 'align' => 'absmiddle'));

В примере мы задаем параметры тэга img и у нас на выходе сформируется следующая строка

  <img class="CSS класс картинки" height="высота пресета" border="0" align="absmiddle" width="ширина пресета" title="тайтл" alt="альт"
  src="http://нашдомен/sites/default/files/imagecache/имя пресета imagecache/путь до картинки">

Поиск в интернете дал информацию о том, что imagecache формирует img src таким образом на многих сайтах, только вот информацию о том, каким образом выводить путь до файла картинки без http и доменного имени, нигде не нашел... Походу надо копать модуль imagecache.

Аватар пользователя Mascher Mascher 1 июня 2011 в 10:11

Ну вот я и нашел решение, и стоило вас великих гуру беспокоить? Smile
Хук theme_imagecache в файле imagecache.module выглядит следующим образом:

function theme_imagecache($presetname, $path, $alt = '', $title = '', $attributes = NULL, $getsize = TRUE, $absolute = TRUE) {
  // Check is_null() so people can intentionally pass an empty array of
  // to override the defaults completely.
  if (is_null($attributes)) {
    $attributes = array('class' => 'imagecache imagecache-'. $presetname);
  }
  if ($getsize && ($image = image_get_info(imagecache_create_path($presetname, $path)))) {
    $attributes['width'] = $image['width'];
    $attributes['height'] = $image['height'];
  }

  $attributes = drupal_attributes($attributes);
  $imagecache_url = imagecache_create_url($presetname, $path, FALSE, $absolute);
  return '<img src="'. $imagecache_url .'" alt="'. check_plain($alt) .'" title="'. check_plain($title) .'" '. $attributes .' />';
}

и если в нашем примере сделать следующий вывод:

  print theme('imagecache', 'имя пресета imagecache', 'путь до картинки', 'альт', 'тайтл', array('border' => 0, 'class' => 'CSS класс картинки', 'align' => 'absmiddle'), TRUE, FALSE);

На выходе получим следующую строку:

  <img class="CSS класс картинки" height="высота пресета" border="0" align="absmiddle" width="ширина пресета" title="тайтл" alt="альт"
  src="/sites/default/files/imagecache/имя пресета imagecache/путь до картинки">

Спасибо Mascher-у за помощь Smile
Надеюсь кому-то пригодится Smile