Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
hacenator

Передать переменные между шаблонами IPB 3

Рекомендованные сообщения

В глобальном шаблоне передается массив $items, в частности он используется для формирования "breadcrumbs". Мне же надо формировать их непосредственно в шаблоне "topicViewTemplate". Как я могу добавить или передать эту переменную в данный шаблон? Или это надо делать как-то иначе?

Поделиться сообщением


Ссылка на сообщение

В редакторе шаблонов сверху справа есть кнопка "Variables"

Там прописываются входящие переменные при необходимости. Но чаще всего надо и в файлах что-то менять.

Поделиться сообщением


Ссылка на сообщение

Спасибо. Там я прописывал, и она конечно же приходит пустой.

 

Но чаще всего надо и в файлах что-то менять.

В каких именно?

Поделиться сообщением


Ссылка на сообщение
В каких именно?

Не факт что там где вызывается topicViewTemplate будет эта переменная, может breadcrumbs вообще в другом методе класса формируется, или часть кода выполнятся после topicViewTemplate. А вообще так и ищите getTemplate('группа_шаблона')->имя_шаблона

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Косяк вашей задачи в том, что globalTemplate всегда вызывается в самую последнюю очередь, когда контент страницы сгенерирован и topicViewTemplate уже отработал.

 

Вот если бы вам нужно было бы передать что-то из topicViewTemplate в globalTemplate, например, переменную $forum, это было бы легко сделать так:

 

1. Добавить в topicViewTemplate в начало:

<php>$GLOBALS['any_unique_name'] = $forum;</php>

или

<php>global $any_unique_name; $any_unique_name = $forum;</php>

 

2. Добавить в globalTemplate в начало:

<php>$forum = $GLOBALS['any_unique_name'];</php>

или

<php>global $any_unique_name; $forum = $any_unique_name;</php>

 

3. Использовать в любом нужном вам месте globalTemplate переменную {$forum}. Оно будет содержать значение $forum из topicViewTemplate.

 

Работает это просто - шабоны IPB при парсинге приводятся к обычным функциям в php-классах, а значит там работает global variable scope.

 

Однако, как уже говорилось вначале, не получится передать что-то из шаблона более высокого уровня в более низкий, т.к. они выполняются последовательно вверх по уровням. Посмотрите, где и как получаетс этот нужный вам $items. Попробуйте построить его самостоятельно прямо в шаблоне topicViewTemplate.

  • Upvote 2

Поделиться сообщением


Ссылка на сообщение
04/26/11 13:48 (изменено)

Спасибо.

Ну в приципе я думаю что всё не столь страшно. И скорей всего просто надо найти как он формирует этот массив $items и возможно прям впихнуть куском кода в 'topicViewTemplate'.

 

Только для этого еще бы не помешала API документация для IPB. Но я пока так и не нашел нормальной. Она конечно есть на офф. сайте, но полноценной документацией её назвать можно лишь с натяжкой.

Изменено пользователем hacenator

Поделиться сообщением


Ссылка на сообщение

Она конечно есть на офф. сайте, но полноценной документацией её назвать можно лишь с натяжкой.

А более полной и нет.

 

Только просмотр кода форума.

Поделиться сообщением


Ссылка на сообщение
04/26/11 18:08 (изменено)

Порылся. Похоже что навигация становится доступна уже после рендеринга шаблона 'topicViewTemplates'

Изменено пользователем hacenator

Поделиться сообщением


Ссылка на сообщение
04/26/11 19:41 (изменено)

Вообщем если кому-то еще пригодится:

Лезем в файлик

admin/applications/forums/modules_public/forums/topics.php и ищем строки

if ( is_array( $this->nav ) AND count( $this->nav ) )
{
 foreach( $this->nav as $_nav )
 {
   $this->registry->output->addNavigation( $_nav[0], $_nav[1], $_nav[2], $_nav[3] );
 }
}

 

Вырезаем их и вставляем немного выше, над строкой:

$template = $this->registry->output->getTemplate('topic')->topicViewTemplate( $this->forum, $this->topic, $post_data, $displayData );

 

В итоге это должно будет выглядеть примерно так:

if ( is_array( $this->nav ) AND count( $this->nav ) )
{
 foreach( $this->nav as $_nav )
 {
   $this->registry->output->addNavigation( $_nav[0], $_nav[1], $_nav[2], $_nav[3] );
 }
}

$template = $this->registry->output->getTemplate('topic')->topicViewTemplate( $this->forum, $this->topic, $post_data, $displayData );

 

Теперь идем в наш шаблон 'topicViewTemplate'.

Добавляем в переменные $items.

 

И в том месте где нам необходимо вставить "хлебные крошки" пишем:

<php>
$items = $this->registry->output->_navigation;
</php>

<ul id='breadcrumb' class='left'>
<foreach loop="$items as $idx => $data">
 <li>
   <span class='nav_sep'>{parse replacement="f_nav_sep"}</span>
   <a href='{parse url="{$data[1]}" base="$data[4]" seotitle="$data[2]" template="$data[3]"}' title='{$this->lang->words['nav_return_to']}{$data[0]}'>{$data[0]}</a>
 </li>
</foreach>
 <li>>{$topic['title']}</li>
</ul>

 

Возможно придеться еще немного подправить стили.

Если например надо будет продублировать "хлебные крошки" внизу страницы то нужно добавить код без верхних трех строк (он конечно не навредит но всё же).

Я проверял и это замечательно работает на 3х уровнях вложенности.

Изменено пользователем hacenator
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...