Хаки и Скрипты Next Generation CMS

Снова мучаем изображения

irbees2008 irbees2008 Опубликовано - 12 - февраля Изображения
1136 - 0
  • Адаптировал: ИИ GPT
  • Уровень сложности исполнения: Справочник

Всем привет, давно не писал ни чего, вот залез в чат gpt и решил побаловаться, но нашлось довольно интересное решение коротких записей кода для изображений в короткой и полной новости. Правда GPT тупил по страшному выдавал код больших размеров чем это требовалось, но я добился чего хотел.
И так в дефолтном шаблоне в короткой новости news.short есть выражение для вывода изображений из тела новости и оно довольно массивное

Код:
{% if (news.embed.imgCount > 0) %}
<img src="{{ news.embed.images[0] }}" width="315" height="161"/>
{% else %}
<img src="{{ tpl_url }}/img/img-none.png" width="315" height="161"/>
{% endif %}
Конечно давно мы уже сократили его и получилось такое выражение
Код:
<img src="{% if (news.embed.imgCount > 0) %}
{{ news.embed.images[0] }}{% else %}{{ tpl_url }}/img/img-none.png{% endif %}" width="315" height="161"/>
Как оказалось можно еще упростить и усовершенствовать следуя прогрессу ))) , вот вариант
Код:
<img src="{{ (news.embed.imgCount > 0 and news.embed.images[0] is defined) ? news.embed.images[0] : tpl_url ~ '/img/img-none.png' }}" width="315" height="161"/>

Ну с этим все понятно , просто меня давно интересовал вариант использования изображений из дополнительных полей и тела новости, а также чтобы выводилась изображение заглушка . Итого три условия что они из себя представляют , первое
Код:
{% if (p.xfields.poster.count < 1) %}
{{ tpl_url }}/images/no_image.jpg
{% else %}
{{ p.xfields.poster.entries[0].purl }}
{% endif %}

Второе условие
Код:
 {% if (news.embed.imgCount > 0) %}
{{ news.embed.images[0] }}
{% else %}
{{ tpl_url }}/images/no_image.jpg
{% endif %}
Вот и помучал чат ИИ чтобы выдал красивый вариант
Код:
{% if p.xfields.poster.count > 0 and p.xfields.poster.entries[0].purl is defined %}
{{ p.xfields.poster.entries[0].purl }}
{% elseif news.embed.imgCount > 0 and news.embed.images[0] is defined %}
{{ news.embed.images[0] }}
{% else %}
{{ tpl_url }}/images/no_image.jpg
{% endif %}
Это наверно был десятый вариант и еще не последний ,попросил сократить ,а то массивно получается ,получилось так
Код:
{{ p.xfields.poster.count > 0 and p.xfields.poster.entries[0].purl is defined ? p.xfields.poster.entries[0].purl : 
(news.embed.imgCount > 0 and news.embed.images[0] is defined ? news.embed.images[0] : tpl_url ~ '/images/no_image.jpg') }}
PS этот вариант не работает Сократилось хорошо , но я случайно нажал и отравил сократить еще , и вот последний вариант
Код:
{{ p.xfields.poster.count > 0 and p.xfields.poster.entries[0].purl ?? (news.embed.imgCount > 0 and news.embed.images[0] ?? tpl_url ~ '/images/no_image.jpg') }}

Давайте разберёмся, почему это выражение не работает, и как его можно исправить.

Проблема:
В Twig оператор ?? (null-coalescing) имеет более высокий приоритет , чем логические операторы (and, or). Это означает, что в вашем выражении:

Код:
{{ p.xfields.poster.count > 0 and p.xfields.poster.entries[0].purl ?? (news.embed.imgCount > 0 and news.embed.images[0] ?? tpl_url ~ '/images/no_image.jpg') }}
логика интерпретируется не так, как вы ожидаете. Twig сначала пытается применить ?? к части выражения, а затем уже обрабатывает and. В результате структура условия нарушается, и выражение либо генерирует ошибку, либо возвращает неправильный результат.

Вот исправленный рабочий вариант:
Код:
{% set poster = p.xfields.poster.entries[0].purl ?? null %} {% set embedImage = news.embed.images[0] ?? null %} {{ poster ?: (embedImage ?: tpl_url ~ '/img/img-none.png') }}
=================================================
Вот сокращенный рабочий вариант
Код:
{{ (p.xfields.poster.entries[0].purl ?? null) 
?: (news.embed.images[0] ?? null)
?: tpl_url ~ '/images/no_image.jpg' }}

1. /images/no_image.jpg - ваш путь до картинки заглушки
2. poster - ваше дополнительное поле для изображений
3. p.xfields.poster.entries[0].purl выводит ссылку на превью( уменьшенное изображение ) если вы в админке не задали уменьшенное изображение то оно не будет отображено,будет выведена заглушка, если надо вывести ссылку на основное изображение то меняем purl на url.
=================================================
Вот, уже по мелочам но получается поправить то там то сям))

Можешь почитать и вот эту статейку "Шпаргалка О TWIGе"

Опрос

Ваше мнение

Какой поисковой системой пользуетесь?
Результаты

Последние комментарии

Обновленное

Теги

Anything in here will be replaced on browsers that support the canvas element

Статистика

  • Caйту: 4757 дней
  • Новостей: 608
  • Комменты: 257
  • Зарегистрированно : 717
  • Онлайн всего: [11]
  • Гости: [11]
  • Были сегодня : [2] Google, Яндекс
  • SQL запросов: 29
  • Генерация страницы: 0.262сек
  • Потребление памяти: 5.446 Mb 
  •   Яндекс.Метрика