Не работает условие в чанке футера на остальных страницах
Здравствуйте всем. Возможно, вопрос простой. Недавно на одном из сайтов в чанке футера я написал такое условие (на скорую руку):
Оно сработало на главной странице, но когда просматривал остальные — условие не сработало и не выводило теперь весь блок с баннерами. Почему? Или проверка тв-поля в чанке не так делается?
В логах выводит такие ошибки. Возможно, это из-за неправильного вывода условия.
<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.
Комментарии: 16
Так попробуй
{if !$_modx->resource.Banner_footer_img_01}...{/if}
по моему, не сработало. не выводит весь блок с баннерами
А чанк ты как на странице выводишь?
ну в шаблонах чаще всего прописано через [[$Footer]]. Заметил, что часть кода в некоторых шаблонах подсвечена красным. сайт не я делал. Может из-за этого моё условие на феноме и не срабатывает. Мож если исправить ошибки в шаблоне — условие сработает.
Синтаксис конечно лучше не смешивать, но вряд ли дело в этом. Скорее всего, дело в том, что баннеры берутся из ресурса с id = 1, а ты проверяешь поле текущего ресурса. И вероятно для текущего ресурса условие ложно.
я думал раз чанк футера подключается во всех шаблонах, то будет работать и на любой странице/в любом шаблоне, раз это чанк. Значит нужно прописывать вот так?
{if $Banner_footer_img_02 != ''}
Чанк будет работать и работает на любой странице, НО баннеры у тебя в ресурсе 1, а ты проверяешь, условно, есть ли баннер в ресурсе 2. И раз блок выводится, значит баннер в ресурсе 2 есть. Чтобы работало корректно проверять надо так
{if (1 | resource: 'Banner_footer_img_01')}...{/if}
а, работало на всех страницах, мне нужно написать условие такого вида? хотя я иногда путаюсь между $_modx->resource.id и $id
{if ($_modx->resource.id | resource: 'Banner_footer_img_01')}...{/if}
Задача в том, чтобы выводить баннер из ТВ заполненного для конкретного ресурса? Или выводить на всех страница баннер из ресурса 1?
выводить блок с баннерами на всех страницах, так как блок с баннерами прописан в чанке футера. но чтобы проверяло тв-поле на заполненность. Если пусто — не выводить код блока определённого баннера, а то когда клиент удаляет картинку из тв-поля — она выводится на сайте как битая.
Баннеры разные для разных страниц или одинаковые везде?
одинаковые везде
Тогда вот так должно условие выглядеть
{if (1 | resource: 'Banner_footer_img_01')}...{/if}
да, кажется, сработало, спасибо). Но почему оно сработало? 1 — это ведь вроде только для ресурса с id 1, но футер ведь во всех страницах, с разным id?..
upd: а, да… понял. у меня ведь тв-поля баннеров добавлены к ресурсу 1. Теперь понял.
upd: а, да… понял. у меня ведь тв-поля баннеров добавлены к ресурсу 1. Теперь понял.
Какая разница на какой странице выводится футер, если баннеры хранятся в ресурсе с id = 1? Рассмотрим такой пример. У тебя есть две комнаты, в комнате с номером 1 стоит тумбочка с ящиками. Если тебе что-то нужно из неё взять, когда ты находишься в комнате 2, ты что будешь делать: искать тумбочку в комнате 2 (её там нет по условию) или пойдёшь в комнату 1?
ну да, пойду в комнату 1. Ну по вашей подсказке потом допёрло почему в условии id 1. в ресурсе 1 у меня и лежат эти тв-поля.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.