URL-адрес стиля изображения не создает изображения [закрыто]
Я использую image_style_url, чтобы получить миниатюру изображение, которое я добавил через интерфейс администратора.
// $foo->field_picture['und'][0]['uri'] has value public://foo.jpg
image_style_url('foo-thumb', $foo->field_picture['und'][0]['uri']);
API указывает, что изображение будет создано при запросе URL-адреса. Однако при посещении страницы изображение не отображается (404). URL-адрес, возвращаемый функцией, кажется хорошо сформированным, но файл не был создан.
Папка "большой палец" находится в папке общедоступных данных, и права доступа к файлам должны быть в порядке. Я попытался очистить кэш изображений (drupal image-flush foo-thumb), но все еще нет результаты.
Есть идеи?
7 answers
От: https://drupal.org/drupal-7.20-release-notes
Кроме того, любой код, который программно генерирует ссылку на производную изображения без использования стандартной функции API image_style_url() , больше не будет работать корректно, если изображение еще не существует в файловой системе, поскольку необходимый токен не будет присутствовать в URL.
Вместо этого вы можете сделать что-то вроде этого;
$image_uri = $node->field_image[LANGUAGE_NONE][0]['uri']; // or any public://my_image
$style = 'my_style';
$derivative_uri = image_style_url($style, $image_uri);
$success = file_exists($derivative_uri) || image_style_create_derivative(image_style_load($style), $image_uri, $derivative_uri);
$new_image_url = file_create_url($derivative_uri);
Одной из распространенных ошибок является неправильный формат URI. Убедитесь, что ваш параметр URI имеет префикс public://
.
Плохая практика
$imageUrl = image_style_url('style_name', 'myimage.jpg');
$imageUrl = image_style_url('style_name', $node->field_x[$node->language][0]['filename']);
Это выводит URL-адрес стилизованного изображения (с маркером изображения), но не создает стилизованное изображение, если оно не было создано ранее.
Надлежащая практика
$imageUrl = image_style_url('style_name', file_build_uri('myimage.jpg')); // changes to 'public://myimage.jpg'
$imageUrl = image_style_url('style_name', $node->field_x[$node->language][0]['uri']);
Это выводит стилизованный URL-адрес, подобный приведенному выше, и генерирует стилизованное изображение, если такового не существует.
Неверный путь к общедоступной файловой системе.
Другой вариант - использовать функцию темы.
$img = theme('image_style', array('style_name' => 'your_image_style_machine_name', 'path' => $node->field_image['und'][0]['uri']));
Вместо того, чтобы возвращать URL-адрес, он вернет html-код для img.
$fid = file_load($field_yuorfield_fid);
$image_uri = image_style_url('yuor_style', $fid->uri);
fopen($image_uri, 'r');
Здесь можно использовать URL-адрес для создания html
Убедитесь, что у вас есть стиль foo-thumb
, вы можете проверить на admin/config/media/image-styles
.
Первые параметры image_style_url - это имя стиля , а не имя папки .
Если при попытке просмотра изображения вы получаете 404, возможно, имя стиля изображения неверно. В моем случае имя стиля, которое отображалось в стилях изображений, не было именем компьютера имени стиля. При наведении указателя мыши на стиль в URL-адресе будет отображаться имя компьютера с именем стиля. Либо измените его на имя машины, либо удалите текущее и создайте заново с нужным именем.