Jump to content

Передача переменной в шаблон showCard и инициализация шаблона


tasker
 Share

Recommended Posts

И снова здравствуйте!

 

У шаблона listWarnings имеется переменная $canWarn которая удобно используется в теле шаблона через условия типа <if test="canWarn:|:$canWarn">

 

Мне необходимо задействовать эту переменную в шаблоне showCard.

 

Простое добавление переменной приводит к ошибке, поскольку шаблон инициализируется с одной переменной таким кодом:

 

$this->returnHtml( $this->registry->getClass('output')->getTemplate('profile')->showCard( $member ) );

 

Как можно добавить в этот код инициализации шаблона вторую переменную? Просто $canWarn не срабатывает, $this->canWarn тоже.

 

Мне кажется, что эта переменная видна только в том классе, в котором она создана. Шаблон showCard выводится в файле admin/applications/members/modules_public/ajax/card.php а шаблон listWarnings в файле admin/applications/members/modules_public/profile/warnings.php

 

Спасибо!

Link to comment
Share on other sites

Обратите внимание

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

Link to comment
Share on other sites

Вы не до конца понимаете суть работы шаблонизатора. Сначала проводятся какие-то вычисления, собираются все необходимые данные, потом эти данные передаются в шаблон для последующего формирования исходного кода страницы. Не достаточно просто передать переменную "$canWarn" с аналогичным названием которая используется где-то в другом месте. Сначала вычислить, присвоить результат, потом уже передать в шаблоне.

Локальные переменные доступны только в текущем методе.

 

Весь код по обработке $canWarn начинается с комментария /* Can we view? */ по /* Load reasons */

 

ПС

'select' => 'count(*) as dracula'

Lol :)

Link to comment
Share on other sites

Да, видел дракулу эту. Про шаблоны всё прекрасно понял и задал конкретный вопрос. Просто PHP не знаю толком. Если в том классе объявить $canWarn как global не поможет? Или без инициализации класса это бесполезно? Пока сделал всё без $canWarn и просто отобразил кнопку только админам. Но так не очень нравится и хочется разобраться в сути вопроса.

 

Без $canWarn кнопка отображается даже в профиле пользователя, которого настройками запрещено предупреждать, поэтому и не нравится такой обходной вариант.

Link to comment
Share on other sites

Если в том классе объявить $canWarn как global не поможет? Или без инициализации класса это бесполезно?

Не поможет, это два разных преставления и отрабатывают они в разных моментов.

Подключить класс не получится, потому что он участвует в генерации исходного кода, это не отдельное АПИ.

В этом случае придется продублировать код вычисления переменной в нужном месте.

Link to comment
Share on other sites

Спасибо! Странная архитектура. В идеале надо сделать отдельный класс, который можно инициализировать и в котором будет глобальная переменная $canWarn. Или добавить её инициализацию в другой класс, который всегда инициализируется и ничего не выводит.

Link to comment
Share on other sites

Мелкий вопрос, а зачем в условиях типа этого <if test="isadmin:|:$this->memberData['g_access_cp'] == 1"> вот эта часть isadmin:|:

Link to comment
Share on other sites

Спасибо! Странная архитектура.

Архитектура как раз нормальная.

 

В идеале надо сделать отдельный класс, который можно инициализировать и в котором будет глобальная переменная $canWarn.

Зачем? Эта проверка выполняется только в одном месте, при выдаче предупреждений, и нигде больше. Так что особой необходимости для выведения в отдельный класс нету.

 

Мелкий вопрос, а зачем в условиях типа этого вот эта часть isadmin:|:

Метка для хуков

Link to comment
Share on other sites

Зачем? Эта проверка выполняется только в одном месте, при выдаче предупреждений, и нигде больше. Так что особой необходимости для выведения в отдельный класс нету.

 

Ну вот понадобилось мне использовать эту переменную в других шаблонах и не могу. Скажем, объект (массив) с данными пользователя виден везде, он типа глобального. Это позволяет использовать фишки типа $this->memberData['is_mod'] или $author['g_access_cp'] почти во всех шаблонах.

Link to comment
Share on other sites

Ну вот понадобилось мне использовать эту переменную в других шаблонах и не могу.

Мало ли кому что может понадобится в другом шаблоне. Там где это нужно выведено в отдельное АПИ.

Массив пользователя это важные данные, по суть приложение на нем держится. А $author['g_access_cp'] локальная переменная, хотя она может передаваться во многих шаблонах.

Link to comment
Share on other sites

Хорошо. Спасибо!

 

Могу тут описать как сделал такие кнопки предупреждений.

 

post-54874-0-19618500-1375475364_thumb.jpg

post-54874-0-77511000-1375475372_thumb.jpg

 

Если надо кому-нибудь.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...