Не работает условие в чанке футера на остальных страницах

Здравствуйте всем. Возможно, вопрос простой. Недавно на одном из сайтов в чанке футера я написал такое условие (на скорую руку):
<div class="container">
  <div class="row banner-flex">
	{if $_modx->resource.Banner_footer_img_01 != ''}
	<div class="col-md-3 col-xs-6">
	  <div class="test_banner_tmp">
		<a href="[[pdoField? &id=`1` &field=`Banner_footer_link_01` &top=`2`]]" target="_blank">
		  <img src="[[pdoField? &id=`1` &field=`Banner_footer_img_01` &top=`2`]]" loading="lazy"
		  alt="Баннер в подвале 1" width="264" height="120" class="img-responsive" />
		</a>
	  </div>
	</div>
	{/if}

	{if $_modx->resource.Banner_footer_img_02 != ''}
	<div class="col-md-3 col-xs-6">
	  <div class="test_banner_tmp">
		<a href="[[pdoField? &id=`1` &field=`Banner_footer_link_02` &top=`2`]]" target="_blank">
		  <img src="[[pdoField? &id=`1` &field=`Banner_footer_img_02` &top=`2`]]" loading="lazy"
		  alt="Баннер в подвале 2" width="264" height="120" class="img-responsive" />
		</a>
	  </div>
	</div>
	{/if}
	{if $_modx->resource.Banner_footer_img_03 != ''}
	<div class="col-md-3 col-xs-6">
	  <div class="test_banner_tmp">
		<a href="[[pdoField? &id=`1` &field=`Banner_footer_link_03` &top=`2`]]" target="_blank">
		  <img src="[[pdoField? &id=`1` &field=`Banner_footer_img_03` &top=`2`]]" loading="lazy"
		  alt="Баннер в подвале 3" width="264" height="120" class="img-responsive" />
		</a>
	  </div>
	</div>
	{/if}
	{if $_modx->resource.Banner_footer_img_04 != ''}
	<div class="col-md-3 col-xs-6">
	  <div class="test_banner_tmp">
		<a href="[[pdoField? &id=`1` &field=`Banner_footer_link_04` &top=`2`]]" target="_blank">
		  <img src="[[pdoField? &id=`1` &field=`Banner_footer_img_04` &top=`2`]]" loading="lazy"
		  alt="Баннер в подвале 4" width="264" height="120" class="img-responsive" />
		</a>
	  </div>
	</div>
	{/if}
  </div>
</div>
Это условие проверяет наличие пустого тв-поля картинки-баннера. Если тв-поле пустое, то блок с определённым баннером не выводится.
Оно сработало на главной странице, но когда просматривал остальные — условие не сработало и не выводило теперь весь блок с баннерами. Почему? Или проверка тв-поля в чанке не так делается?

В логах выводит такие ошибки. Возможно, это из-за неправильного вывода условия.

`` is not a valid integer and may not be passed to makeUrl()
Attempted to redirect to an empty URL.
al1ve
25 февраля 2025, 14:49
modx.pro
641
0

Комментарии: 16

Артур Шевченко
25 февраля 2025, 18:21
0
Так попробуй
{if !$_modx->resource.Banner_footer_img_01}...{/if}
    al1ve
    25 февраля 2025, 19:02
    0
    по моему, не сработало. не выводит весь блок с баннерами
      Артур Шевченко
      25 февраля 2025, 19:05
      0
      А чанк ты как на странице выводишь?
        al1ve
        25 февраля 2025, 19:19
        0
        ну в шаблонах чаще всего прописано через [[$Footer]]. Заметил, что часть кода в некоторых шаблонах подсвечена красным. сайт не я делал. Может из-за этого моё условие на феноме и не срабатывает. Мож если исправить ошибки в шаблоне — условие сработает.
          Артур Шевченко
          25 февраля 2025, 19:26
          0
          Синтаксис конечно лучше не смешивать, но вряд ли дело в этом. Скорее всего, дело в том, что баннеры берутся из ресурса с id = 1, а ты проверяешь поле текущего ресурса. И вероятно для текущего ресурса условие ложно.
            al1ve
            25 февраля 2025, 19:44
            0
            я думал раз чанк футера подключается во всех шаблонах, то будет работать и на любой странице/в любом шаблоне, раз это чанк. Значит нужно прописывать вот так?
            {if $Banner_footer_img_02 != ''}
              Артур Шевченко
              25 февраля 2025, 19:52
              0
              Чанк будет работать и работает на любой странице, НО баннеры у тебя в ресурсе 1, а ты проверяешь, условно, есть ли баннер в ресурсе 2. И раз блок выводится, значит баннер в ресурсе 2 есть. Чтобы работало корректно проверять надо так
              {if (1 | resource: 'Banner_footer_img_01')}...{/if}
                al1ve
                25 февраля 2025, 20:25
                0
                а, работало на всех страницах, мне нужно написать условие такого вида? хотя я иногда путаюсь между $_modx->resource.id и $id
                {if ($_modx->resource.id | resource: 'Banner_footer_img_01')}...{/if}
                  Артур Шевченко
                  25 февраля 2025, 20:30
                  0
                  Задача в том, чтобы выводить баннер из ТВ заполненного для конкретного ресурса? Или выводить на всех страница баннер из ресурса 1?
                    al1ve
                    25 февраля 2025, 20:37
                    0
                    выводить блок с баннерами на всех страницах, так как блок с баннерами прописан в чанке футера. но чтобы проверяло тв-поле на заполненность. Если пусто — не выводить код блока определённого баннера, а то когда клиент удаляет картинку из тв-поля — она выводится на сайте как битая.
                      Артур Шевченко
                      25 февраля 2025, 20:40
                      0
                      Баннеры разные для разных страниц или одинаковые везде?
                      al1ve
                      25 февраля 2025, 20:42
                      0
                      одинаковые везде
                      Артур Шевченко
                      25 февраля 2025, 20:43
                      +1
                      Тогда вот так должно условие выглядеть
                      {if (1 | resource: 'Banner_footer_img_01')}...{/if}
                      al1ve
                      25 февраля 2025, 20:52
                      0
                      да, кажется, сработало, спасибо). Но почему оно сработало? 1 — это ведь вроде только для ресурса с id 1, но футер ведь во всех страницах, с разным id?..

                      upd: а, да… понял. у меня ведь тв-поля баннеров добавлены к ресурсу 1. Теперь понял.
                      Артур Шевченко
                      25 февраля 2025, 20:58
                      0
                      Какая разница на какой странице выводится футер, если баннеры хранятся в ресурсе с id = 1? Рассмотрим такой пример. У тебя есть две комнаты, в комнате с номером 1 стоит тумбочка с ящиками. Если тебе что-то нужно из неё взять, когда ты находишься в комнате 2, ты что будешь делать: искать тумбочку в комнате 2 (её там нет по условию) или пойдёшь в комнату 1?
                      al1ve
                      25 февраля 2025, 21:05
                      0
                      ну да, пойду в комнату 1. Ну по вашей подсказке потом допёрло почему в условии id 1. в ресурсе 1 у меня и лежат эти тв-поля.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
16