it-swarm.com.ru

Как вывести поле изображения drupal?

Вполне возможно, что я просто ищу помощь в поиске имени функции, которая уже существует в drupal (7), но иногда с документацией немного сложно ориентироваться. Надеюсь, кто-нибудь может мне помочь.

У меня есть узел, который имеет настраиваемое поле.

Я работаю с шаблоном field--mycustomcontenttype.tpl.php и поэтому пытаюсь найти имя функции PHP, которая выводит поле изображения со стилями изображения.

mycustomcontenttype является узлом со следующим дополнительным полем:

[field_image] => Array
(
    [und] => Array
    (
        [0] => Array
        (
            [fid] => 51
            [alt] => ImageAltText
            [title] => 
            [width] => 150
            [height] => 150
            [uid] => 29
            [filename] => myimagename.jpg
            [uri] => public://myimagename.jpg
            [filemime] => image/jpeg
            [filesize] => 8812
            [status] => 1
            [timestamp] => 1339445372
            [uuid] => a088ea8f-ddf9-47d1-b013-19c8f8cada07
            [metatags] => Array
        (
    )
)

Так что я мог бы отобразить изображение, используя (уродливые) функции, свернутые вручную, который принимает значение, найденное в $item['#options']['entity']->field_image, и выполняет замену public:// на фактический путь к серверу, а затем также возможно, что я захочу загрузить изображение с правильным стилем изображения drupal (эскиз, пользовательский стиль и т. д.)

К сожалению, я просто не знаю, как называется функция, которая работает примерно так: unknown_function_name_drupal_image_print($item['#options']['entity']->field_image, 'thumnail');.

Есть ли кто-нибудь, кто может помочь мне найти это?

20
Alex C

Вы ищете image_style_url(style_name, image_url);

Например:

<?='<img src="'.image_style_url('fullwidth', $node->field_page_image['und'][0]['filename']).'" />'?>

ПРАВКА

Как указывалось, вы также можете установить стиль изображения на странице «Управление отображением» для типа содержимого, а затем вывести его с помощью рендера.

<?php print render($content['field_image']); ?>
23
SpaceBeers

Я бы сделал это, используя комбинацию field_get_items и field_view_value .

Например:

    <?php

    // In some preprocessor...
    $images = field_get_items('node', $node, 'field_image');
    if(!empty($images)) {
      $image = field_view_value('node', $node, 'field_image', $images[0], array(
        'type' => 'image',
        'settings' => array(
          'image_style' => 'custom_image_style' // could be 'thumbnail'
        )
      )
     );
    }
    $variables['image'] = $image;

    // Now, in your .tpl.php
    <?php print render($image); ?>

У меня есть запись о доступе к полю и этой самой вещи здесь .

Удачи.

14
mavame

Ответ SpaceBeers правильный - вы можете напечатать изображение таким образом. Но в Drupal это плохо. У вас язык не определен, и вы напрямую используете только первое поле, если оно является многозначным полем . Кроме того, вы жестко программируете некоторые из приятных вещей Drupal, такие как изменение стиля изображения с помощью пользовательского интерфейса. 

<?php print render($content['field_image']); ?>

При этом изображение будет напечатано с правильными размерами (в теге img), тегами alt и всегда будет соответствовать тому, что вы установили на вкладке «Управление отображением» типа узла mycustomcontenttype.

12
Ayesh K

Я использую это:

print theme('image_style', array('path' => [image uri from field], 'style_name' => [image style]));

Вы также можете включить переменную массива «attribute», которая содержит элементы для (например) класса, alt и title. Я думаю, что это лучший вариант, позволяющий выбрать стиль изображения, но при этом по умолчанию используется рендеринг изображений в Drupal (или вашей теме).

8
Heather Gaye

Вы должны использовать

<?='<img src="'.image_style_url('fullwidth', $node->field_page_image['und'][0]['uri']).'" />'?>

вместо

<?='<img src="'.image_style_url('fullwidth', $node->field_page_image['und'][0]['filename']).'" />'?>
3
Denis

Я думаю, что ответ Айеш К - предпочтительный способ печати поля на странице в Drupal. Гораздо проще для чтения и сохраняет все операции/пресеты, которые вы делаете с вашим изображением в пользовательском интерфейсе. 

Вы можете разбить его, но, похоже, это было бы для узких вариантов использования.

1
ricardoom
<?php
global $base_url;
$nid=6;//node id
$node=node_load($nid);
echo '<div style="margin-right:350px;">';
echo "<Marquee>";
foreach($node->field_image_gallery['und'] as $v){
$image=$v['uri'];
$image_path=explode("public://",$image);
$url_path=$base_url.'/sites/default/files/'.$image_path[1];
echo '<img src="'.$url_path.'" width="100" height="100">&nbsp;';
 }

echo "</Marquee>";
echo "</div>";
?>
1
gangadhara
 $field_image = field_view_field('node', $promoNode, 'field_image');
 $variables['promo_image'] = render($field_image);

Оказывает: 

<div class="field field--name-field-image field--type-image field--label-above">
  <div class="field__label">Image:&nbsp;</div>
  <div class="field__items">
      <div class="field__item even">
        <img typeof="foaf:Image" 
             src="http://domain/sites/domain/files/promo1.png"
             width="360" 
             height="301"
             alt="Promotional Image"
             title="Promotional Image Title">
      </div>
  </div>
</div>

Примечание. Класс label-выше можно удалить с помощью настроек типа содержимого Manage-Display полей, установив для Label значение, но сейчас это не работает для меня, поэтому я просто использую CSS, чтобы скрыть. field__label class. 

0
Eduardo Chongkan

это можно сделать так:

   $style='full_width';
   $path=$node->my_img_field['und']['0']['uri'];
   $style_url = image_style_url($style, $path);
   print "<img src=".file_create_url($style_url)." >";
0
Matoeil