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

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

irbees2008 irbees2008 Опубликовано - 12 - февраля Изображения
1121 - 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.
=================================================
Вот, уже по мелочам но получается поправить то там то сям))

Можешь почитать и вот эту статейку "Хак- Свой счетчик на сайт"

Опрос

Ваше мнение

Как вам наш дизайн сайта?
Результаты

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

Обновленное

Теги

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

Статистика

  • Caйту: 4736 дней
  • Новостей: 603
  • Комменты: 257
  • Зарегистрированно : 703
  • Онлайн всего: [10]
  • Гости: [8]
  • Поисковики: [2] Google, Яндекс
  • Были сегодня : [3] Google, irbees2008, Яндекс
  • SQL запросов: 31
  • Генерация страницы: 0.326сек
  • Потребление памяти: 5.524 Mb 
  •   Яндекс.Метрика