Переменные в Fenom

Помогите пожалуйста разобраться, скорее всего дело в типе переменных, вопрос в следующем:
Устанавливаю переменную в чанке, она не работает в шаблоне, это все на fenom, подробнее:

Устанавливаю в чанке — head, который вызываю вот так в шаблоне — {include 'head'} две переменные:
{var $id = $_modx->resource.id}
{var $parent = $_modx->resource.parent}
В этом же чанке вызываю условие, которые работает как надо:
{if $id|in:[122, 32, 125] || $parent |in:[122, 32, 125]}<link rel="stylesheet" href="/css/ecp.css">{/if}
А вот это условие уже в шаблоне, а не в чанке:
{if $id == '6' || $parent |in:[6,7,94,65,29,106]} Действие 1 {else} Действие 2 {/if}
И это условие уже не отрабатывает.

Понимаю что так как в чанке назначаются переменные, по этому не работает.
Неужели нужно все-время назначать переменные, в каждом чанке в шаблоне и в самом теле шаблона?
Это не будут лишние запросы?
Может не правильно задаю переменную или вызов не так делаю?
Maxim
18 сентября 2018, 16:50
modx.pro
4 484
0

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

Евгений Webinmd
18 сентября 2018, 17:00
0
setPlaceholder можно использовать
Да и проще использовать уже само $_modx->resource.id
    Maxim
    18 сентября 2018, 17:07
    0
    Спасибо за ответ, у меня в head получается 6 раз используется, не будет ли это громоздко использовать $_modx->resource.id много раз? Это не будет 6 запросов? Нагрузку не прибавит?

    {if $id|in:[1, 5]}<link rel="stylesheet" href="/css/index.css">{/if}
    {if $id == '2'}<link rel="stylesheet" href="/css/contact.css">{/if}
    {if $id == '3' || $parent == '3'}<link rel="stylesheet" href="/css/pricedown.css">{/if}
    {if $id == '5' || $parent == '5'}<link rel="stylesheet" href="/css/about.css">{/if}
    {if $id|in:[122, 32, 125] || $parent |in:[122, 32, 125]}<link rel="stylesheet" href="/css/ecp.css">{/if}
    {if $id == '6'}<link rel="stylesheet" href="/css/nanocad.css">{/if}
    setPlaceholder — сейчас попробую разобраться с ним, спасибо)
      Евгений Webinmd
      18 сентября 2018, 17:10
      +2
      в документации написано что {$_modx->resource} — массив с текущим ресурсом, так что запросов не будет
    Aleksandr Huz
    18 сентября 2018, 18:15
    1
    +1
    include подключает кусок кода и видит переменные только текущего шаблона, там где он вызывается.
    Вариантов несколько:
    1. Назначить переменные в самом шаблоне перед всеми include
    2. Передать переменные в include:
      {include "head" id=$id parent=$parent}
    3. Использовать тег insert вместо include(не проверял, но должно работать)
      Maxim
      19 сентября 2018, 10:07
      0
      Спасибо, то что нужно
      Наумов Алексей
      19 сентября 2018, 15:42
      0
      Сейчас вы в head напишите
      {var $id = $_modx->resource.id}
      а в чанке мм… допустим login вот так:
      {var $id = $_modx->user.id}
      вопрос, сколько времени вы будете искать почему конструкция
      {$id}

      неправильно работает в чанке footer?

      Вот поэтому и не видны переменные за границами чанка. Ибо то, что вы хотите — это глобальные переменные, что не есть гуд.

      Пользуйтесь $_modx->resource.id, это нормально, понятно, удобно.

      Ну и setPlaceholder, когда это нужно.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        6