Собрал здесь несколько полезных функций, которые могут быть полезны для работы с полем изображений в Drupal семерочке. Данная коллекция представляет из себя закладку с примерами. В памяти всё не удержишь, приходится ползать по выполненным проектам — копипастить микро-кусочки кода. А на сайте — все под рукой.
В семерке конструктор полей встроен в коробочную версию — это набор модулей Field. В набор входят разные типы полей, в том числе Image. Вот о небольших примерах работы с ним из PHP дальше пойдет речь.
Итак, у нас есть поле с изображением (-иями), оно представляет из себя вот такой массив:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Array ( [und] => Array ( [0] => Array ( [fid] => 513 [uid] => 1 [filename] => finepicture.jpg [uri] => public://slides/finepicture.jpg [filemime] => image/jpeg [filesize] => 98800 [status] => 1 [timestamp] => 1441700209 [rdf_mapping] => Array ( ) [alt] => [title] => [width] => 200 [height] => 100 ) [...] => Array ( ) ) ) |
Темизация
Если нужно сформировать тег <img> то на помощь придет функция theme, которая соберет картинку из данного массива.
1 2 3 4 5 6 |
if (!empty($node->field_image['und'])) { foreach($node->field_image['und'] as $r) { $r['path'] = $r['uri']; $img .= theme('image', $r); } } |
Так массив будет преобразован в список картинок. Вы, возможно, обратили внимание, что я обращаюсь к ветке массива — UND. Эта ветка не специфичного по отношению к языку контента. Она присутствует у всех типов полей конструктора.
Абсолютный путь
Так как путь у картинок хранится в виде некого внутреннего указателя, вроде — public://slides/finepicture.jpg, то совершенно естественно возникает необходимость в ряде случаев получить абсолютный путь.
1 |
$url = file_create_url($node->field_image['und'][0]['uri']); |
Нужная функция в drupal для этого случая как видите есть.
Темизация с использованием видов показа изображения
Стили изображений настраиваются вот здесь — /admin/config/media/image-styles. Для программирования нам понадобится так называемое машинное имя стиля.
1 2 3 4 5 6 7 |
//берем первое изображение из массива $im = $node->field_image['und'][0]; //нужны путь и стиль $im['path'] = $im['uri']; $im['style_name'] = 'my-image-style'; //все готово для темизации - выполняем $img = theme_image_style($im); |
И еще одна функция для получения url изображения, образованного с использованием видов показа изображений.
1 |
image_style_url($style_name, $path); |