Я работал над этой проблемой, выполняя некоторые тесты с двумя возможными синтаксисами веток.
<!-- standard syntax: -->
{% image 'img/promo/widget.autopromo.testimonial.jpg' filter='jpegoptim' output='img/*.js' %}
<img src="{{ asset_url }}" alt="Example"/>
{% endimage %}
<!-- twig function: -->
<img src="{{ jpegoptim('img/promo/widget.autopromo.activity.jpg') }}" />
Я начал со следующей конфигурации
assetic:
debug: %kernel.debug%
use_controller: %kernel.debug%
read_from: %kernel.root_dir%/../web/static/
write_to: %kernel.root_dir%/../web/static/optimasset
filters:
jpegoptim:
bin: /usr/bin/jpegoptim
apply_to: "\.jpe?g$"
strip_all: true
twig:
functions:
jpegoptim: ~
между каждым изменением я запускал следующие команды, чтобы убедиться, что кэш очищен и новые файлы сбрасываются.
rm -Rvf app/cache/* # yes I wanted to make that sure cache is cleared
rm -Rvf web/static/optimasset;
app/console cache:clear --no-warmup;
app/console assetic:dump
1010 *
*
00 Сначала вывод дампа был
web/static/optimasset/images/e749c9f.jpg
web/static/optimasset/images/e749c9f_widget.autopromo.testimonial_1.jpg
web/static/optimasset/assetic
web/static/optimasset/assetic/bb69582.jpg
web/static/optimasset/assetic/bb69582_widget.autopromo.activity_1.jpg
и сгенерированный html
<img src="/static/images/e749c9f_widget.autopromo.testimonial_1.jpg" alt="Example">
<img src="/static/assetic/c03bc54.jpg">
Примечание:
- функция ветки генерирует неправильное имя файла.
- Оба учитывают параметр
write_to
в config.yml при дампе ресурсов, но все равно создают папку по умолчанию (assetic/
или images
).
- Оба игнорируют параметр
write_to
при создании html, но используют их папку по умолчанию, следующую за папкой, указанной в framework.templating.assets_base_urls.http
- Функция Twig генерирует HTML с неправильным именем файла
01 Указание выходного каталога в config.yml
filters:
jpegoptim:
bin: /usr/bin/jpegoptim
apply_to: "\.jpe?g$"
strip_all: true
output:'img/*.jpg' # just a test
twig:
functions:
jpegoptim: {output:'img/*.jpg'} # according to documentation
Примечание: Вы получите точно такой же результат. Ни один из синтаксисов не обрабатывает «вывод» из конфигурации (только в ветке).
02 Указание вывода в шаблоне веточки
Кстати, я добавил optimasset/
к выходному пути, потому что рендеринг не учитывает значение `` `` write_to```.
{% image 'img/promo/widget.autopromo.testimonial.jpg' filter='jpegoptim' output='optimasset/img/*.jpg' %}
<img src="{{ asset_url }}" alt="Example"/>
{% endimage %}
<img src="{{ jpegoptim('img/promo/widget.autopromo.activity.jpg', {output:'optimasset/img/*.jpg'}) }}" />
свалка:
web/static/optimasset/optimasset/img
web/static/optimasset/optimasset/img/974c414.jpg
web/static/optimasset/optimasset/img/974c414_widget.autopromo.testimonial_1.jpg
web/static/optimasset/optimasset/img/c230e9e.jpg
web/static/optimasset/optimasset/img/c230e9e_widget.autopromo.activity_1.jpg
отображать как:
<img src="/static/optimasset/img/974c414_widget.autopromo.testimonial_1.jpg" alt="Example">
<img src="/static/optimasset/img/080b62e.jpg">
Примечание: Рендеринг правильный, но путь к дампу - нет. Чтобы это исправить, мне пришлось удалить параметр write_to
.
ЗАКЛЮЧЕНИЕ
{{ optipng(...) }}
как {{ jpegoptim(...) }}
никогда не выводит правильное имя файла.
Используйте синтаксис {% images ... %}
.
- Вы не должны использовать
write_to
, если вы используете сборку для фильтрации изображений {% images%} не учитывает это при рендеринге html, только {% javascripts %}
и {% stylesheets %}
делают.