Статьи

12.10.2009 — Как не показывать рекламу определенной группе пользователей на phpBB

Как не показывать рекламу определенной группе пользователей на phpBB

Допустим на вашем форуме есть группа пользователей которым не нужно показывать рекламу. Это могут быть привилегированные по каким то причинам пользователи
или пользователи, которым оказывается платная подписка. Например, пользователи платят деньги и за это освобождены от просмотра рекламы. Данная статья как раз о том, как это сделать.

Первое, что Вам необходимо сделать, так это зайти в  «Администраторский раздел» и перейти во вкладку «Пользователи и группы»в которой в левом столбце примерно посередине
есть ссылка, которую и надо выбрать   «Управление группами».

В открывшемся меню нам необходимо создать группу которой не будет показываться (или наоборт будет) определенный контекст. Я выбрал для себя, вариант названия группы — «VIP».
При настройке группы заполняем необходимую информацию и обратите внимание. В  типах групп укажите что группа   «Закрытая». Администратор будет сам выбирать каким
пользователей предоствить в ней членство.create-groups

После создания группа вам необходимо добавить в нее участников форума. Для этого для создавшейся группы нажимаете ссылку  «Участники» и добавляете необходимых пользователей.

Работу в ACP (административной панели) мы выполнили и можно смело переходить к программным работам.
Для этого открываем файл /includes/functions.php и ищем строки

1 // The following assigns all _common_ variables that may be used at any point in a template.
2 $template -> assign_vars (array(
3 'SITENAME' => $config [ 'sitename' ],
4 'SITE_DESCRIPTION' => $config [ 'site_desc' ]

У меня в файле это примерно 3760 строка. До начала объявления переменных шаблонов необходимо добавить такой код:

1 $sql_mygr = "select count(*) as 'count' from" . USER_GROUP_TABLE . " a INNER join " . GROUPS_TABLE . " b on a.group_id=b.group_id where a.user_id=" . intval ( $user -> data [ 'user_id' ]). " and b.group_name='VIP'" ;
2 $result_mygr = $db -> sql_query ( $sql_mygr );
3 $row_mygr = $db -> sql_fetchrow ( $result_mygr );
4 $db -> sql_freeresult ( $result );

Что делает этот код ?

Этот код возвращает результат вхождения пользователя в группу VIP. если значение 1 то пользователь входит в группу  «VIP». Если же, возвращаемое значение — 0 то не входит. то не входит.

Итак значение у нас есть и его надо передать в шаблон и как это сделать ?

Решение достаточно простое. При надо объявить константу. Вернемся к коду в файле /includes/functions.php и повторно найдем строки:

1 // The following assigns all _common_ variables that may be used at any point in a template.
2 $template -> assign_vars (array(
3 'SITENAME' => $config [ 'sitename' ],
4 'SITE_DESCRIPTION' => $config [ 'site_desc' ]

При объявлении констант укажем:

'IS_VIP' => ( $row_mygr [ 'count' ]> 0 ) ? 1 : 0

Теперь в шаблонах появиться новая переменная с возможным значением 1 или 0. Это то что нам нужно.
Теперь нам необходимо открыть файл шаблона в котором может находится рекламные блоки. Например файл /styles/prosilver/template/overall_header.html

Пример моего блока:

<!-- IF IS_VIP eq 0 -->
<script type="text/javascript">
<!-- google_ad_client = "pub-5136668927298117";
/* 468x60, ksvtmb.ru */
google_ad_slot = "1694490395";
google_ad_width = 468;
google_ad_height = 60;
//--> <
/script>
<script type="text/javascript"
src = "http://pagead2.googlesyndication.com/pagead/show_ads.js" >
</script>
<!-- ENDIF -- >

Из примера видно что необходимо помещать рекламные конктрукции в блоки вида:

рекламный вывод

После таких изменений не забудьте зайти в в административную панель где выполним операцию  «Очистка кеша» и можно смотреть результат. Пользователям, не состоящим в группе  «VIP» будет показана реклама.