Смена программно стиля вывода изображения

15.12.2017

В статье мы обсудим как в Drupal 7 вывести программно изображение обработанное стилями. Стиль вывода изображения это допустим создаем новую новость и прикрепляем к ней картинку, при просмотре полной новости, у нас выводится большая картинка ( значит используется стиль large или medium ), а при просмотре новости в общем списке новостей используется маленькая картинка ( значит это стиль thumbnail ).

Просмотреть все стили для картинок можно в админке по ссылке: admin/config/media/image-styles. Там же мы можем создавать новые стили, для “боевого” сайта лучше всего создать свои стили, т.к. встроенные изменять нельзя, только переопределять.

Отформатированные изображения создаются при первом к нам обращении, то есть после того как мы создали новость с картинкой, зашли на главную и тогда сразу же создается отформатированное изображение. Для каждого стиля на сервере имеется своя папка, для примера, загружаем мы файл test.jpg, он будет загружен в:

public://field/image/test.jpg

и дополнительно в:

public://styles/thumbnail/public/field/image/test.jpg

Теперь подойдем ближе к задаче, нужно вывести программно стиль картинки “thumbnail”. Допустим у нас есть тип материала “Новость” ( news ), в этом типе есть поле “Картинка” ( field_image ). Мы добавили ноду в данный тип материала, и нашей ноде автоматически был присвоен ID 1. Теперь для того чтобы загруженную нами картинку вывести именно в стиле “thumbnail” нужно:
1 . посмотреть все данные ноды:

$node = node_load(1);

2. вывести поле скартинкой

$image = $node->field_image['und'][0]['uri'];

После этого ссылка картинки будет иметь вид:

public://field/image/test.jpg

Дальше нам нужно переобразовать данный путь так, чтобы использовался стиль thumbnail ( придыдущие действия, мы сделали для того чтобы просто забрать ссылку картинки с ноды ):

$image_uri = image_style_path('thumbnail', $node->field_image['und'][0]['uri']);

Теперь путь картинки стал:

public://styles/thumbnail/public/field/image/test.jpg

Далее нам нужно получить нормальную URL для картинки:

$image_url = file_create_url($image_uri);

Ну вот и все, в переменной $image_url теперь хранится полный путь к “thumbnail” картинке, например:

http://localhost/sites/default/files/styles/thumbnail/public/field/image/test.jpg

Это моя первая статья не только о друпал, а вообще, решил поделится опытом, подумал что это важно, т.к. сам потратил много времени на поиск решения проблемы.

Update - 04-06-2013

В Drupal 7.20 ( https://drupal.org/drupal-7.20-release-notes ) и старше, вывод изображения изменился, теперь достаточно использовать только одну функцию:

image_style_url('thumbnail', $node->field_image['und'][0]['uri']);

Также, о нововведении можно прочесть на странице - http://drupal.ua/groups/drupal-7/ne-rabotayut-image-style-na-drupal-7-nachinaya-s-720