Создание собственного динамического блока
Создание блоков, как вы убедились в предыдущей главе, - простой процесс. Очень простой. В действительности, создание динамических блоков не намного сложнее создания простейших статических блоков. Например, вы, наверное, уже знаете, что система PHP-Nuke позволяет вам присваивать очки пользователям, принимающим участие в поддержании сайта: путем опубликования новых статей, комментариев и т.д. Мне захотелось создать блок, отображающий имена пяти наиболее активных в этом смысле пользователей, с тем, чтобы придать дополнительный стимул принимать участие в жизни сайта другим его посетителям. С целью создания описанного блока я написал следующий код:
<?php
if (eregi("block-Top10„Downloads.php",$_SERVER['PHP^SELF1])) { Header{"Locationj index.php")j diet);
>
global $prefix, $db;
$content = "Currently in the lead:<brxbr>? ; $a - 1;
$sql = "SELECT username FROM * . $prefiic. "_users WHERE " ."user_id > 2 AND user_id <> 150 ORDER BY points " ."DESC LIMIT 0,5"; $result = $db->eql_<iuery($sql) ; while ($row = $db->sql_fetchrow($result)) { $title2 = ereg„replace("_", n $row[username]); $Content .= "fcnbsp;bnbsp;$a: $title2<br>"; $a++;
>
$content .= "<br>Prize awarded monthly to the top user! " -"Earn points by participating in the " ."<a class=\"blockcontent\" href=S"modules.php?name=" ."Forums\">Forums</a>, "; ^content .= "<a class=\"blockcontent\" " . "hre?=\"modules .php?name»iSuhmit„tlews\">submitting scripts" ."</a>, adding to your <a class=\"blockcontent\" ? . "href = \"modules .php?name=Joumal\"> Journal</a>, ?; $content .= "visiting our sponsors, and morel"; $content .= " <a class=\"blockcontent\" и ."href=\"modules.php?name=Your_Account\B>Check "
."your points</a> anytime.";
?>
Как видите, код занимает не так много места. Первые несколько строк проверяют, что доступ к странице не был осуществлен напрямую, если все же это так, пользователь перенаправляется на домашнюю страницу сайта. Такой подход предотвращает возмож
ность посещения пользователями сайта его отдельных страниц, поскольку не все страницы являются общедоступными. Гарантировав, что доступ к блоку может осуществляться только с другой страницы сайта (как правило, modules.php, которая отображает названия только тех блоков, которые могут просматриваться текущим пользователем), я еще и предупредил неправильное отображение этого блока,
if (eregi("block-ToplO_Downloads.php",$_SERVER['PHP_SELF*])){ Header{"Location: index.php"); diet);
}
Далее я определил несколько переменных и приступил к созданию отображаемых на экране элементов содержимого блока. Для вывода текста на экран в блоках не используется оператор echo, а всегда применяется переменная $content. Страницы, с которых осуществляется загрузка блоков, ожидают что в. переменной $content содержатся все данные, которые должны представляться блоком. В данном примере я начал с добавления в указанную переменную некоторого статического HTML-текста:
global $prefix, $db;
$content = "Currently in the lead:<brxbr>"j
Потом идет динамическая часть блока. Я организовал SQL-запрос к базе данных своего сайта на получение списка пользователей, расположенных в порядке убывания заработанных ими очков. Длина выборки была ограничена пятью элементами, при этом из выборки были исключены пользователи с идентификаторами ID 1, 2 и 150, которыми пользуюсь я сам. Еще не хватало мне соревноваться со своими пользователями!
Далее, как видите, следует цикл while (никл с предусловием), который последовательно просматривает пятерых пользователей, отобранных в результате выполнения запроса, и заносит их имена в переменную $content. Если вы не знакомы с программированием на языке РНР, то все вышесказанное может звучать для вас довольно странно. Если вы хотите лучше познакомиться с указанным языком, купите хорошую книгу. С точки зрения системы PHP-Nuke, единственной особенностью кода является наличие в нем переменной $db. Это объектная переменная (знатоки языка РНР знают, что это такое), которая позволяет встраивать возможности базы данных в систему PHP-Nuke. Команда $db->sql_query выполняет SQL-запрос, команда $db->sql_fetchrow- извлекает из результата выполнения запроса следующую строку л преобразует ее в массив. Предназначением представленного ниже кода является формирование пронумерованного списка, состоящего из пяти пользователей, расположенных в порядке убывания заработанных ими очков.
$а = 1;
$sql = "SELECT username FROM ".$prefix."_users WHERE ™ . "user„id > 2 AND user„id <> 150 ORDER BY points " ."DESC LIMIT 0,5"; Sresult = $db->sql_query($sql); while ($row = $db->sql_fetchrow($result)) < $title2 = ereg_replace ( ?_", " $ row [username J.) ; ^content .= "bnbsp; $a: $title2<br>"; $a++;
}
Оставшаяся часть кода вполне ясна - в ней просто осуществляется добавление статического текста в переменную $content,
$content "<br>Prize awarded monthly to the top user!" ."Earn points by participating in the " ."<a class=\"blockcontent\" href=\"modules.php?name=" ."Forums\">Forums</a>, "; $content .= "<a classs\"bloekcontent\" ? . "href=\"modules.php?name=Submit_News\">submitting scripts" ."</a>, adding to your <a class=\"blockcontentV" " . "href =Л "modules .php?name=Journal\">Joumal</a>, *; $content .= "visiting our sponsors, and more!"; ^content ,= " <a class=\"blockcontentS" "
."href=\"modules.php?name=Your_Account\">Check " ."your points</a> anytime.";
На этом код блока завершается. Вы увидите, блок ничего не пытается сделать с переменной $content, вы можете легко с помощью этой переменной заполнить блок любым содержимым, а оставшаяся часть, которая не поместилась, сохранится системой PHP-Nuke.
Блоки - это одни из наиболее простых компонентов системы PHP-Nuke. Процедура установки блока очень проста: просто скопируйте его файл в папку Blocks своего сайта. Далее вы сможе те выбрать этот блок в модуле Blocks и добавить его на свой сайт.
Ниже кратко перечислены основные этапы создания динамического блока:
? Начните с пустой РНР-страницы.
? Добавьте код, в котором переменной $content присваивается некоторое значение, которое должно отображаться на экране.
? Сохраните созданный файл в папке Blocks своего сайта. » Добавьте блок на сайт.
Очевидно, чтобы создавать динамические блоки, необходимо обладать некоторым опытом программирования на языке РНР, эта книга не сможет помочь вам стать программистом РНР. Однако существует огромное число других книг, посвященных указанному языку программирования, попробуйте поискать их в Интернете или в своем любимом книжном магазине, а затем выберите понравившуюся. Система PHP-Nuke предоставляет специальный класс $db, который можно использовать для доступа к базе данных, -единственное, что, обычно, требуется от блока.
