2015-11-03 4 views
9

Я пытаюсь напечатать изображение, используя стиль изображения, который я создал в моей теме drupal 8.Как использовать стиль изображения в шаблоне Drupal 8 twig?

Я могу напечатать изображение в шаблоне, выполнив {{content.banner}}, но как применить стиль изображения к этому изображению? Я пробовал искать документацию, но там, похоже, нет.

ответ

11

В настоящее время drupal 8 не имеет специального фильтра для применения стиля изображения. Вместо этого вы можете установить новый атрибут для вашего изображения, как это:

{% set image = image|merge({'#image_style': 'thumbnail'}) %} 

Затем просто выход вашего обновленным образом:

{{ image }} 

P.S. Вы можете сделать {{ dump(image) }}, чтобы узнать, какие атрибуты вы можете уточнить.

+0

Я также фактически нашел в настройках типа содержимого, вы можете отображать все изображения для этого типа контента, которые должны быть из Image Style X. Поэтому я мог бы сделать это из своего ответа или вашего, но ваш лучше imo. – Kato

+1

Какую переменную следует использовать для «изображения»? content.field_bloc_1_image.entity не работает, например: s –

+0

Я не мог заставить это работать. Он не использует стиль изображения? У меня есть {% set image = content.field_global_image | merge ({'# image_style': 'thumbnail'})%} {{image}} – paulcap1

4

Я решил это, создав свой собственный Twig Filter.

Вы можете сделать это, создав собственный модуль, обнажив это. Фильтр.

Не стесняйтесь использовать его повторно.

Код

namespace Drupal\twig_extender\TwigExtension; 

use Drupal\node\Entity\Node; 
use Drupal\Core\Link; 
use Drupal\Core\Url; 

use Drupal\file\Entity\File; 
use Drupal\image\Entity\ImageStyle; 

class Images extends \Twig_Extension { 
    /** 
    * Generates a list of all Twig functions that this extension defines. 
    */ 
    public function getFunctions(){ 
     return array(
      new \Twig_SimpleFunction('image_style', array($this, 'imageStyle'), array('is_safe' => array('html'))), 
     ); 
    } 

    /** 
    * Gets a unique identifier for this Twig extension. 
    */ 
    public function getName() { 
     return 'twig_extender.twig.images'; 
    } 


    /** 
     * Generate images styles for given image 
     */ 
     public static function imageStyle($file_id, $styles) { 
      $file = File::load($file_id); 
      $transform = array(); 
      if (isset($file->uri->value)) { 
       $transform['source'] = $file->url(); 
       foreach ($styles as $style) { 
        $transform[$style] = ImageStyle::load($style)->buildUrl($file->uri->value); 
       } 
      } 
     return $transform; 
     } 
} 

Использование

{% set transform = image_style(image.entity.fid.value, ['thumbnail', 'large']) %} 

Тогда у вас есть доступ к исходному изображению & стилей

{{ transform.source }} 
{{ transform.thumbnail }} 
{{ transform.large }} 

Надеется, что это поможет йо У парня!

+0

Я пробовал метод выше. Я поставил вышеуказанный код в '/ modules/custom_module/src/TwigExtension/Images.php', но все равно получаю ошибку' Twig_Error_Syntax: Неизвестная функция image_style. в Twig_ExpressionParser -> .. ' – ARUN

+0

Теперь я использую Bamboo Twig (модуль Drupal 8). Который выставляет в расширении Bamboo Twig Loader две функции twig для рендеринга изображений. Здесь находится документ Bamboo Twig: https://www.drupal.org/docs/8/modules/bamboo-twig/usage. Функции: 'bamboo_render_image' и' bamboo_render_image_style'. –

 Смежные вопросы

  • Нет связанных вопросов^_^