Блоки

Сделать:
Что такое блоки
Зачем они нужны
Как их настроить
Блоки, которые создают модули
Удаление блоков
Создание блоков

Как вывести блок на странице

Чтобы "включить" блок, нужно:

Настройка блока

Видимость блоков

Почитать:

PHP block visibility settings

Показывать / НЕ показывать блок на страницах форума

Задача

Показывать или не показывать блок на страницах форума.
Не только по пути: forum/*, но и на страницах просмотре и редактирования тем форума.

Решение

В настройках блока ставим галочку напротив "Показать, если данный PHP-код возвращает TRUE (PHP-режим, только для экспертов)." и ниже вводим код:

НЕ показывать блок на СТРАНИЦАХ форума

При этом он будет виден по страницам с адресом forum/*

<?php
$result
=true;
if ((
arg(0) == 'node') && is_numeric(arg(1))) {
   
$node = node_load(arg(1));
    if (
$node->type == "forum" $result=false;
}
return
$result;
?>

Код возвращает TRUE только, если в данный момент не просматривается документ типа 'forum'.
А раз так - блок выводится всегда, кроме случая просмотра документа типа 'forum'.

Показать блок ТОЛЬКО на СТРАНИЦАХ форума

Показывает блок ТОЛЬКО на страницах форума (включая просмотр и редактирование нод форума)

<?php
if (arg(0) == 'forum')   return TRUE;
if (
arg(0) == 'node' && is_numeric(arg(1))) {
  
$result= db_fetch_object(db_query("SELECT n.type FROM {node} AS n WHERE n.nid=%d LIMIT 1", arg(1)));
   if (
$result->type == 'forum')     return TRUE;
}
return
FALSE;
?>

НЕ показать блок на ВСЕМ форуме

<?php
//НЕ показать блок на страницах форума (включая просмотр и редактирование нод форума)
if (arg(0)=='node' && is_numeric(arg(1))){
  
$result= db_fetch_object(db_query("SELECT n.type FROM {node} AS n WHERE n.nid=%d LIMIT 1", arg(1)));
   if (
$result->type == 'forum')     return FALSE;
} elseif (
arg(0)=='forum')  return FALSE;
return
TRUE;
?>

НЕ показать блок ТОЛЬКО при просмотре и редактировании топика:

<?php
if (arg(0)  ==  'node' && arg(1)){
  
$result= db_fetch_object(db_query("SELECT n.type FROM {node} AS n WHERE n.nid=%d LIMIT 1", arg(1)));
    return (
$result->type != 'forum');
}
?>

Как показать блок только при просмотре и редактировании ноды типа форум догадайтесь сами...

Использованные материалы

Решено: включить/выключить блок на форуме

Полезные ссылки

Показывать / НЕ показывать блок на странице профиля пользователя

Задача

Показывать / НЕ показывать блок на странице профиля пользователя

Решение

В настройках блока ставим галочку напротив "Показать, если данный PHP-код возвращает TRUE (PHP-режим, только для экспертов)." и ниже вводим код:

Показывать

Показывать блок на странице СОБСТВЕННОГО профиля пользователя

<?php
 
global $user;
  if (
arg(0) == 'user' && $user->uid == arg(1))   return TRUE;
  return
FALSE;
?>

Показывать блок на страницах ВСЕХ профилей пользователей

<?php
global $user;
if (
arg(0) == 'user')   return TRUE;
return
FALSE;
?>

НЕ показывать

Не показывать блок на странице СОБСТВЕННОГО профиля пользователя

<?php
global $user;
if (
arg(0) == 'user'  && $user->uid == arg(1))   return FALSE;
return
TRUE;
?>

Не показывать блок на страницах ВСЕХ профилей пользователей

<?php
global $user;
if (
arg(0) == 'user')   return FALSE;
return
TRUE;
?>

Вывод документов опреденного типа в блоке

Задача:

показать в блоке документы определённого типа.

Решения:

1. Использовать модуль Views

  • создать вид (блочный),
  • фильтр по типу материала.
  • полученный блок выводите куда вам нужно.

2. Использовать PHP-код в этом блоке

Модуль views потребляет очень много ресурсов. Его мощь и преимущество в том, что он может помочь быстро сделать вывод на страницу опред. материалов (списков, таблиц, анонсов и др.). Именно быстро сделать, но это не работает быстро.
Лично я стараюсь использовать этот модуль тогда, когда на странице с материалами нужно использовать фильтры - с этим модуль справляется превосходно, а повторить своими силами это трудно.
Итак, альтернативное решение - добавить в тело блока PHP-код, который будет выводить эти документы.

<?php
unset ($output);
$nmbr_reklama=3;//Количество сообщений рекламы
if (arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {
 
$node = node_load(arg(1));
 
$sql="SELECT n.title, n.nid FROM {node} AS n WHERE n.status=1 AND n.type='reklama' GROUP BY n.nid LIMIT ".$nmbr_reklama;
 
$result = db_query($sql);
  while (
$anode = db_fetch_object($result)) {
   
$reklama= node_load($anode->nid);
   
$output .= '
      <div class="node"><h3 class="title">'
.$reklama->title.'</h3>'. $reklama->body.'</div>';
  }
  return
$output;
}
?>

Формат ввода нужно установить в PHP.