Если второй параметр равен
единице, то оглавление каталога будет выведено в обратном порядке, т. е.
ссылки . и .. мы получим в конце массива, а не в начале. Не будем
усложнять себе жизнь, т. е. выводить оглавление в обратном порядке.
Листинг 7.1 содержит пример кода, выводящего тег со случайной
картинкой.
/ Сканируем текущий каталог
files = scandir(».»);
94
Часть II. PHP-Nuke
// Получаем случайное число от 2 до N, где N — число элементов каталога
$k = mt_rand(2, count($files)-1);
// Выводим результат
echo ««;
Заметим, что функция scandir () работает только в Р»НР 5, если у вас РНР 4,
то код изменяется следующим образом:
$dir =
$dh = opendir($dir);
while (false !== ($filename = readdir($dh)))
{
$files[] = $filename;
}
Когда мы определились, что будет делать наш модуль и даже набросали
примерный его код, можно приступить к созданию самого модуля.
Поскольку наш модуль не очень сложный, то нет особой необходимости
рассматривать отдельно шаблон модуля и сам модуль. Сэкономим время. Внимательно
читайте комментарии в листинге 7.2 — как говорится, лучше один раз
увидеть, чем сто раз услышать.
// Файл модуля random_image (index.php)
// Запрещаем прямой вызов модуля
if (1defined(»MODULE_FILE»)) {
die («You can’t access this file directly…»);
}
// Подключаем mainfile.php — обязательно
require_once(«mainfile.php»);
// Переменная $module_name содержит имя модуля
$module_name = basename (dirname ( FILE ));
Глэва 7. Создание собственных модулей для PHP-Nuke
95
II Подключаем языковый файл.
//В зависимости от выбранного пользователем языка
// функция get_lang() сама подключит нужный файл
get_lang($module_name);
// Если переменная $index=l, то будут отображены правые блоки,
// иначе их не будет.
$index = 1;
// Вставляем шапку сайта
include(«header.php»);
// Открываем таблицу для вывода данных
OpenTable ();
// Начинается код модуля. Любое содержимое можно вывести с помощью echo
// Для совместимости с РНР 4 и РНР 5 используется код для РНР 4
// Это наш каталог, в котором будут храниться картинки
$dir = ‘modules/random_image/images/’;
// Открываем каталог
$dh = opendir($dir);
// Читаем список файлов
while (false !== ($filename = readdir($dh)))
{
$files[] = $filename;
}
// Получаем случайное число от 2 до ?, где N — число
// элементов каталога
$k = mt_rand(Of count($files)-1);
// Выводим нашу константу
echo «
‘/ Выводим картинку
echo «
96
Часть II. PHP-Nuke
// Конец кода модуля
// Закрываем таблицу
CloseTable();
// Вставляем нижнюю часть сайта
include(«footer.php»);
?>
Файл модуля нужно назвать index.php и поместить в каталог random_image.
Из листинга 7.2 видно, где заканчивается обязательная подготовительная
часть любого модуля и начинается его код. Также видно, где наш
(пользовательский) код заканчивается.
Для проверки модуля вам нужно загрузить каталог random_image в каталог
modules Web-сервера, а затем активировать модуль (см. главу 6).
7.2. Работа с базой данных
В данной главе мы создали довольно простой модуль, работающий с
файлами. Более сложные модули взаимодействуют с базой данных. Система PHP-
Nuke не накладывает никаких ограничений на работу нашего кода, поэтому
мы с легкостью могли бы использовать для работы с базой данных функции
mysqi*, но это было бы не совсем правильно. Да, работать будет, но гораздо
корректнее обращаться к базе данных через средства PHP-Nuke.
Начнем с самого начала. Доступ к базе данных осуществляется через
глобальные переменные $db и $pref ix. Первая — это объект для доступа к базе
данных, причем не важно, к какой именно, ведь PHP-Nuke поддерживает
несколько серверов баз данных. Вторая переменная — это префикс таблиц
PHP-Nuke. Если у нас будут только собственные таблицы, а не таблицы PHP-
Nuke, то данный префикс можно опустить. Поэтому первым делом нам
необходимо определить эти глобальные переменные: