Подскажите, как заменить переменную в twig шаблоне.
Допустим мне нужно в переменной заменить подчерки на дефисы. Этот код работает:
<div class="{{style_name|replace( { '_' : '-' } ) }}">
Теперь мне нужно заменить
/files/styles/style_name/public/images/2022/08/image.jpg
на
/files/images/2022/08/image.jpg
Пробую так:
'{style_name}' : '',
'/styles/' : '',
'/public': '',
} %}
{% set url_orig = url|replace( replaces ) %}
Получается
/filesstyle_name/images/2022/08/image.jpg
Т.е. переменную папки стиля не заменяет
Комментарии
А что если в настройках форматтера просто вывести оригинал картинки?
Не получиться просто. Потом скажу почему.
Вопрос по использованию переменных в операторе replace. В принципе я могу конструкции типа '/styles/large', '/styles/small' использовать. Но хочу через переменную.
Попробуй
'style_name' : '',
'\/styles\/' : '',
'\/public': '',
} %}
https://twigfiddle.com/olmwcv
Насколько я понял style_name - это не литерал, а имя переменной, которая определена где-то снаружи/ранее. С литералами все работает, и даже слеши искейпить не обязательно. Засада именно с использованием значения переменной в качестве ключа/индекса массива.
Да, теперь увидел
Переменные не поддерживаются в таком виде.
Если название стиля в переменной, то может так:
{% set url = "/files/styles/style_1/public/images/2022/08/image.jpg" %}
{% set replaces = {
'/styles/' : '',
'/public': '',
} %}
{% set replaces = replaces|merge({(style_name): ''}) %}
{{ url }}
{% set url_orig = url|replace( replaces ) %}
{{ url_orig }}
https://twigfiddle.com/lh8a08
Или так:
{% set url = "/files/styles/style_1/public/images/2022/08/image.jpg" %}
{% set replaces = {
(style_name): '',
'/styles/': '',
'/public': '',
} %}
{{ url }}
{% set url_orig = url|replace( replaces ) %}
{{ url_orig }}
https://twigfiddle.com/ab2pd1
Большое спасибо!
Т.е. переменную надо было записывать в скобках:
(style_name): '',
} %}
Это я и хотел узнать.
Для чего это надо? Для доработки модуля insert. D8+ версия умеет делать ссылку только на изображение с каким-то стилем.
Модуль insert это рудимент из далекого прошлого. Зачем он тебе в Д8+?
чтобы именно с поля в редактор вставлять![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
Это я понимаю, но зачем?![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
На старом сайте insert вставлял небольшой кусок кода в зависимости от стиля изображения.
Воссоздаю эту магию на новом сайте.
Вся прелесть переезда с семерки на девятку, что можно наконец-то исправить многие архитектурные косяки. А не воссоздавать их![Crazy](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/crazy.gif)
На будущее. А есть решение, чтоб в CKEditor если вставляешь картинку больше определенной ширины, формировалась ссылка типа (?):
<img src="/...styles/puplic/cropped/image.jpg"
</a>