Метод $wa->globals() создаёт не глобальную, а локальную переменную. Не принято

1

Создайте в index.html

{$wa->globals("test", "test")}

Достаньте эту переменную в шаблонах магазина, например, category.html и увидите null

Пытался делать так

{assign var=test value="test" scope="global"}

результат тот же.

Отсюда вопрос: есть ли вообще возможность создать и использовать глобальные переменные?

p.s. тема использована стандартная

10 комментариев

  • +2
    Михаил Ушенин Михаил Ушенин Webasyst 18 января 2019 09:48 #

    Шаблон index.html подключается после обработки category.html, поэтому так делать не получится. Попробуйте использовать дополнительные параметры поселения.

    • +1
      devellopah devellopah 18 января 2019 18:11 #


      Шаблон index.html подключается после обработки category.html

      Это шутка такая? Тогда в чём прикол создавать $wa->globals() Для того, что метод мог создать глобальную переменную, которую нельзя будет использовать во вложенных шаблонах, потому что они компилируются до импорта в index файл?

      А на каком этапе компилируется index файл? Почему нельзя сначала импортировать всё что нужно в главный файл, а затем всё это добро скомпилировать в html? В этом случае, можно будет использовать созданные с помощью вышеуказанного метода глобальные переменные во вложенных шаблонах.

      • +1
        Eugen Nichikov Eugen Nichikov 18 января 2019 19:30 #

        Зато можно использовать global-переменную из category.html в index.html

        • +1
          devellopah devellopah 18 января 2019 20:59 #

          Зато нельзя использовать global-переменную из category.html в cart.html, checkout.html, product.html...

          • +1
            Eugen Nichikov Eugen Nichikov 18 января 2019 22:06 #

            Естественно, т.к. она создаётся на этапе компиляции шаблона.

            • +2
              devellopah devellopah 19 января 2019 18:33 #

              Что насчёт этого?

              Почему нельзя сначала импортировать всё что нужно в главный файл, а затем всё это добро скомпилировать в html? В этом случае, можно будет использовать созданные с помощью вышеуказанного метода глобальные переменные во вложенных шаблонах.

            • +1
              Михаил Ушенин Михаил Ушенин Webasyst 18 января 2019 19:33 #

              Файл index.html — это шаблон макета. Для обработки шаблона макета нужно сначала получить содержимое, которое в него добавят экшены. В шаблон макета можно быть подключено содержимое одного или более экшенов. Когда содержимое, сформированное экшенами готово, оно вставляется в шаблон макета в виде переменных Smarty. Поэтому сначала экшены, потом макет. В вашем случае сначала экшен категории (который для своей работы задействует шаблон category.html), потом общий макет страниц витрины (шаблон index.html).

              Предложите нужный вам порядок обработки шаблонов на форуме для разработчиков. Хотя есть вероятность, что нам вместе удастся найти приемлемый способ решения стоящей перед вами задачи и с текущей логикой, если вы опишете эту задачу.

            • +1
              devellopah devellopah 18 января 2019 18:25 #

              Если мне нужно, что-то вроде такого, то дополнительные параметры не помогут

              {if $wa->isAuthEnabled()}
                  {if $wa->user()->isAuth()}
                      {$wa->globals("isAuthorized", true)}
                  {else}
                      {$wa->globals("isAuthorized", false)}
                      {$wa->globals("hideCart", true)}
                  {/if}
              {/if}

              Для этого придётся создавать блок, типа {$wa->block("shop.global_vars")} и вставлять в нужных шаблонах.

            • +3
              {$wa->session($key, $value = null)}

              решает эту убогую проблему.

              • +1
                devellopah devellopah 19 января 2019 22:01 #

                "убогую" проблему может и решает, однако речь была о функции $wa->globals(), которая, как я уже понял, на самом деле создаёт глобальную переменную, но которую не достать во вложенных шаблонах, поскольку они импортируются в index файл, уже скомпилированными.

                Добавить комментарий

                Чтобы добавить комментарий, зарегистрируйтесь или войдите