В данной статье опишу способ, как сделать в галерее кнопки Следующая и Предыдущая. Возможно, это пригодится где-то еще.
Самый простой способ, это прибавить и отнять от ID рисунка 1 и запросить ранний и поздний. Но так делать нельзя, т.к. такого ID может не быть (к примеру, если рисунок был удален).
Тут рассмотрим рабочий способ на примере модуля InGallery для PHP-Nuke. Программный код тут очень простой и может быть использован в других CMS и собственных разработках.
Для лучшего понимания процесса рассмотрим также просто отдельный PHP код, запросы в БД в котором, производятся как в системе PHP-Nuke, измените под свою CMS при необходимости.
Функция просмотра изображения в модуле InGallery:
<?php
function pic($id) {
global $prefix, $db, $module_name, $admin_file, $pagetitle, $admin, $datetime, $user;
$id = intval($id); //проверяем переменную на цифру
include("modules/$module_name/config"); //подключаем настройки
if ($block3 == 1) {//В зависимости от настроек показывем правый блок
define('INDEX_FILE', true);
}
if (is_admin($admin)) {//Запрос в базу для админа
$result2 = $db->sql_query("SELECT pid, title, bodytext, date, active, pic, w, h, psize, view FROM ".$prefix."_ingallery WHERE pid='$id'");
} else {//Запрос в базу для остальных
$result2 = $db->sql_query("SELECT pid, title, bodytext, date, active, pic, w, h, psize, view FROM ".$prefix."_ingallery WHERE pid='$id' and active!='0'");
}
if ($db->sql_numrows($result2) == 0) {//Если ничего не запросилось, перебрасываем пользователя на главную модуля
Header("Location: modules.php?name=$module_name");
exit;
}
//Присваиваем переменным данные из базы данных
$row2 = $db->sql_fetchrow($result2);
$pid = intval($row2['pid']);
$title = filter($row2['title'], "nohtml");
$bodytext = filter($row2['bodytext'], "nohtml");
$pic = filter($row2['pic'], "nohtml");
$wd = intval($row2['w']);
$hd = intval($row2['h']);
$view = intval($row2['view']);
$date = $row2['date'];
formatTimestamp($date);
$psize = intval($row2['psize']);
$psize = round($psize/1024, 2);
$active = intval($row2['active']);
if ($w > $wd) {$w = $wd;}//сверяем ширину изображения с настройками
if (empty($title)) {$title = _NONAME;} //если у изображения нет имени, называем ее "Без имени"
if (!empty($bodytext)) {$bodytext = "<br><br><font class=\"storytitle\">"._BODY.":</font><br>$bodytext";}//Если есть описание оформляем и показываем его
$pagetitle = "- "._GALLERY." - $title"; //заголовок страницы
include("header.php"); //подключаем верхнюю часть сайта
title(""._GALLERY." - $title"); //Выводим заголовок
//Если администратором закрыт доступ к изображению для гостей, выдаем гостю не картинку, а предупреждение, что нужно зарегистрироваться.
if (($active == 2) AND (!is_user($user))) {
OpenTable();
echo "<center><b><font color=\"red\">"._TOUSER2."</b></font><br><br>"._REG."<br><br>"._GOBACK."</center>";
CloseTable();
include("footer.php"); //Нижняя часть сайта
}
//Ниже мы выводим информацию о картинке и саму картинку
OpenTable();
echo "<table border=\"0\" width=\"100%\"><tr><td align=\"center\">";
echo "<img border=\"0\" src=\"InImage/$pic\" alt=\"$title\" width=\"$w\">";
echo "</td></tr><tr><td>";
echo "<b>"._SIZE.":</b> $wd x $hd "._PIX."";
echo "</td></tr><tr><td>";
echo "<b>"._SIZE2.":</b> $psize "._KB."";
echo "</td></tr><tr><td>";
echo "<b>"._DATE.":</b> $datetime";
echo "</td></tr><tr><td>";
echo "<b>"._VIEW.":</b> $view";
echo "</td></tr><tr><td>";
if ($active == 0) {
echo "<b><font color=\"red\">"._TOADMIN."</b></font>";
echo "</td></tr>";
} else {
echo " ";
echo "</td></tr>";
}
//Если админ, то ниже покажем ему функции для управления
if (is_admin($admin)) {
echo "<tr><td align=\"right\">";
echo "<a href=".$admin_file.".php?op=InGalDelImages&pid=$pid>" . _DELETE . "</a> | <a href=".$admin_file.".php?op=InGalEditImages&pid=$pid>" . _EDIT . "</a>";
echo "</td></tr>";
}
echo "</table>$bodytext";
CloseTable();
//Плюсуем 1 к кол-ву просмотров изображения
$db->sql_query("update ".$prefix."_ingallery set view=view+1 WHERE pid='$id'");
//Показываем низ сайта.
include("footer.php");
}
?>
Отдельный PHP код будет выглядеть так:
<?php
$result = $db->sql_query("SELECT pid, title FROM base WHERE pid='$id'"); //Запрос в базу данных
$row = $db->sql_fetchrow($result));
//Присваиваем переменным значения из базы
$pid = intval($row['pid']);
$title = $row['title'];
echo "$title"; //Выводим заголовок
?>
Сделаем еще 2 запроса в базу, чтобы определить предыдущую и следующую
В модуле InGallery найдем в самом низу CloseTable();, и выше добавим:
<?php
//////////////////// Находим предыдущую картинку
echo "<div align=\"center\">";
if (is_admin($admin)) {//Запрос в базу для админа
$result2 = $db->sql_query("SELECT pid FROM ".$prefix."_ingallery WHERE pid<'$id' ORDER by pid DESC");
} else {//Запрос в базу для остальных
$result2 = $db->sql_query("SELECT pid FROM ".$prefix."_ingallery WHERE pid<'$id' and active!='0' ORDER by pid DESC");
}
if ($db->sql_numrows($result2) != 0) {//Если результат не равен 0, выводим
//Присваиваем переменным данные из базы данных
$row2 = $db->sql_fetchrow($result2);
$pid2 = intval($row2['pid']);
echo "<a href=\"modules.php?name=$module_name&in=pic&id=$pid2\">Предыдущая</a> ";
}
//////////////////// Находим следующую картинку
if (is_admin($admin)) {//Запрос в базу для админа
$result3 = $db->sql_query("SELECT pid FROM ".$prefix."_ingallery WHERE pid>'$id'");
} else {//Запрос в базу для остальных
$result3 = $db->sql_query("SELECT pid FROM ".$prefix."_ingallery WHERE pid>'$id' and active!='0'");
}
if ($db->sql_numrows($result3) != 0) {//Если результат не равен 0, выводим
//Присваиваем переменным данные из базы данных
$row3 = $db->sql_fetchrow($result3);
$pid3 = intval($row3['pid']);
echo " <a href=\"modules.php?name=$module_name&in=pic&id=$pid3\">Следующая</a>";
}
echo "</div>";
?>
Отдельный PHP код будет выглядеть так, его просто нужно добавить ниже:
<?php
//////////////////// Находим предыдущую картинку
echo "<div align=\"center\">";
$result2 = $db->sql_query("SELECT pid FROM base WHERE pid<'$id' ORDER by pid DESC");
if ($db->sql_numrows($result2) != 0) {//Если результат не равен 0, выводим
//Присваиваем переменным данные из базы данных
$row2 = $db->sql_fetchrow($result2);
$pid2 = intval($row2['pid']);
echo "<a href=\"url&id=$pid2\">Предыдущая</a> ";
}
//////////////////// Находим следующую картинку
$result3 = $db->sql_query("SELECT pid FROM base WHERE pid>'$id'");
if ($db->sql_numrows($result3) != 0) {//Если результат не равен 0, выводим
//Присваиваем переменным данные из базы данных
$row3 = $db->sql_fetchrow($result3);
$pid3 = intval($row3['pid']);
echo " <a href=\"url&id=$pid3\">Следующая</a>";
}
echo "</div>";
?>
Обратите внимание, добавлять код нужно без
Он используется тут для подсветки, чтобы было понятнее читать.
Если вы нашли, какие то неточности в коде, или есть какой то другой способ, с радостью выслушаю ваши мнения.
Комментарии к статье весьма ограничены, поэтому если вы хотите поделиться своими кодами, убедительная просьба создать тему на форуме.