Закрыть
Скидки в Webasyst 25–29 ноября 2021

Smarty не ставит global scope переменную

Товарищи, обнаружил странное поведение при попытке задать глобальной переменную в Smarty темплейте!

здесь http://www.smarty.net/docs/en/language.function.assign.tpl сказано

Example 7.13. {assign} a global variable

A global variable is seen by all templates.
{assign var=foo value="bar" scope="global"}
{assign "foo" "bar" scope="global"} {* short-hand *}

указываю в index.html не встречающуюся больше нигде переменную $ktblog
{assign var=ktblog value="MMM" scope="global"}

затем в post.html

пытаюсь вывести переменную
{$ktblog}

и она пуста, как же так? Индекс явно раньше должен обрабатываться.

P.S. Использую хостинг вебасиста.

10 ответов

  • 0
    Михаил Ушенин Webasyst 13 октября 2014 07:28 #
    >>> Индекс явно раньше должен обрабатываться.
    Нет, сначала генерируется основное содержимое страницы, и только потом оно вставляется в index.html. Поэтому это основное содержимое не может ничего "знать" о том, что объявлено в index.html, ведь его сначала готовят отдельно и только потом добавляют в основной шаблон.
  • 0
    Дмитрий 13 октября 2014 09:00 #
    :) Нельзя ведь предугадать, что нужно вставить в index.html, если он обрабатывается последним. Вдруг там пусто, тогда нет смысла гонять процессор.
    • 0
      Михаил Ушенин Михаил Ушенин Webasyst 13 октября 2014 09:55 #
      Это вы к чему?
      • 0
        Дмитрий Дмитрий 13 октября 2014 10:04 #
        к вашему комментарию, что индекс обрабатывается не первым, может не самым первым, но точно до вложенных в него блоков, иначе откуда узнать что вложено? Или я неправильно понял вас?
        P.S. вроде отвечал на ваш коммент, а вышел отдельный ответ на тему, сорри.
        • 0
          Михаил Ушенин Михаил Ушенин Webasyst 14 октября 2014 01:44 #
          >>> откуда узнать что вложено?
          Вложено будет значение переменной {$content}, а её содержимое формируется контроллером, который запускается при обработке конкретного URL.
          • 0
            %username% 21 октября 2014 07:55 #
            О том и речь - это явное нарушение принципа очередности при обработке секций сайта "от общего к частному", как результат - выключена область видимости глобальных переменных в нижележащих шаблонах. А еще холостая работа движка если сделать {*$content*}, но это фигня, главное, конечно, что так неудобно работать со Smarty. И как-то сомнительно, что разработчики получили какой-то значительный выигрыш от изобретения этого велосипеда :)
            • 0
              Михаил Ушенин Михаил Ушенин Webasyst 21 октября 2014 08:15 #
              А чего конкретно вы хотели добиться? Может, есть удобный/рекомендуемый способ сделать это. Для чего вам нужно такое использование глобальной переменной?
              • 0
                Дмитрий Дмитрий 21 октября 2014 14:53 #
                Спасибо за участие! Я хотел вместо Имени Фамилии Отчества пользователя в блогах вывести название самого блога. ФИО у нас типа закрытая информация, а отображаемого ника в системе контактов не предусмотрено. Тогда решил, почему бы не вставить туда имя самого блога? Он у меня один только, сохраню его в глобальную переменную и буду вставлять вместо имени. Его же и менять можно при необходимости из админки! Но через глобальную не вышло, а каждый раз лезть в {$blog = current($wa->blog->blogs())} и вставлять потом {$blog.name} мне совесть не позволяет :)
                Как можно красиво выйти из положения?
                • 0
                  Михаил Ушенин Михаил Ушенин Webasyst 22 октября 2014 01:18 #
                  Попробуйте использовать дополнительные параметры поселения (в "Структуре" Сайта), которые можно вставлять в шаблон темы дизайна в виде {$wa->globals('blog_author')}. Примерно так:
                  blog_author=Vasya Pupkin
                  • 0
                    Дмитрий Дмитрий 22 октября 2014 18:32 #
                    Работает, как-то не щелкнуло этот раздел раньше использовать :(, благодарю за помощь!

Добавить ответ

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