page.tlp.php и page-forum.tpl.php

Главные вкладки

Аватар пользователя yline yline 8 марта 2010 в 13:10

Для форума (стандартный) создал новый шаблон page-forum.tpl.php, список форумов, тем отображаются через шаблон page-forum.tpl.php, но при переходе на какое нибудь сообщение, адрес меняется на http://сайт.ru/NODE/, т.е. уже не http://сайт.ru/FORUM/, и соответственно тут уже работает шаблон page.tlp.php, появляются левый сайдбар, который мне на форуме не нужен и который я убираю в шаблоне page-forum.tpl.php Как можно выйти из этого положения, может быть есть другой способ

Комментарии

Аватар пользователя yline yline 8 марта 2010 в 15:42

адреса сообщений форумов стали сайт.ru/forum/16, но все равно используется шаблон page.tlp.php, видимо из-за того, что системное имя все равно осталось сайт.ru/node/16

Аватар пользователя direqtor direqtor 8 марта 2010 в 16:14

"RxB" wrote:
Неправда, есть phptemplate-сниппет для этого

Вроде у меня что-то такое было в загашниках решений, но утверждать не буду. Я сегодня, оёёё...
"yline" wrote:
адреса сообщений форумов стали сайт.ru/forum/16, но все равно используется шаблон page.tlp.php, видимо из-за того, что системное имя все равно осталось сайт.ru/node/16
Итак, вам надо в нодах типа Сообщение форума убрать колонки left и right. Тогда в начале page.tpl.php пишем примерно так:

$is_forum = FALSE;
if(arg(0)=='node' && ($node=node_load(arg(1)) && ($node->type=='forum')) $is_forum = TRUE;

Колонки обычно выводятся в шаблоне примерно так:

<?php if($left): ?>
<div id="left">
<?php print $left ?>
</div>
<?php endif; ?>

Модифицируем:

<?php if($left && !$is_forum): ?>
<div id="left">
<?php print $left ?>
</div>
<?php endif; ?>

Правда, это слишком хардкодно. Правильнее переменную $is_forum надо определять в препроцесс-функции этого шаблона, но это уже ищите в документации.

Аватар пользователя yline yline 9 марта 2010 в 19:45

"direqtor" wrote:
Тогда в начале page.tpl.php пишем примерно так:

Попробовал так сделать, но получается ошибка:
Parse error: syntax error, unexpected T_VARIABLE in /путь до файла/page.tpl.php on line 18 .
В этой строчке выше описанный код.
Может что ни так сделал.
"RxB" wrote:
Неправда, есть phptemplate-сниппет для этого

А что за снипет, подскажите

Аватар пользователя direqtor direqtor 9 марта 2010 в 21:49

"yline" wrote:
Может что ни так сделал.
Это у меня в коде скобочка одна случайно пропущена. Поправьте – заработает.

Аватар пользователя direqtor direqtor 10 марта 2010 в 20:11

Попробуйте еще с парой скобок:

$is_forum = FALSE;
if(
  (arg(0)=='node') &&
  ($node=node_load(arg(1))) &&
  ($node->type=='forum')
) $is_forum = TRUE;

И сами потестируйте. Идею-то поняли?
Если
это страница ноды И
нода грузится И
тип ноды это forum,
то это страница форума.

Аватар пользователя yline yline 10 марта 2010 в 20:19

Да, идея то понятна, почитал про arg, только у меня почему то, тип не forum. Написал в личном сообщении адрес сайта, если не сложно можно взглянуть на него

Аватар пользователя Shedko Shedko 10 марта 2010 в 22:26

Давно еще на 4.7.Х использовал следующий код:

function my_is_forum() {
if (arg(0) == 'forum') {
  return TRUE;
}
if (arg(0) == 'node' && ctype_digit(arg(1))) {
  $node = node_load(arg(1));
  if ($node->type == 'forum') {
    return TRUE;
  }  
}
return FALSE;
}

(помещаем эту функцию в template.php )

соответственно, код вывода левого блока (который убирался на форуме) у меня принимал вид:

          <?php if (!my_is_forum()) { ?>
          <?php if ($sidebar_left) { ?>
            <td class="rightcol" valign="top">
              <?php print $sidebar_left ?>
            </td>
          <?php } ?>
          <?php } ?>