Доброго всем дня! Спасибо что заглянули на мой блог! Сегодня я хочу поговорить с Вами о панели навигации на нашем блоге. Как известно на всех интернет дневниках, на главной странице выводится лишь по 5-10 заметок, все остальное находится на других страницах, перейти на которые можно щелкнув по панели навигации, которая обычно находится в нижней части интернет проекта. Как добиться подобного функционала?
Что-то подобное мы уже делали, когда реализовывали менеджер файлов в админ панели. Но там нам приходилось сканировать количество файлов в папке, а не записей в базе данных. Да и сама панели навигации не блещет функционалом.
Ладно, давайте сначала поговорим о том как наша панель должна работать, после чего я дам Вам за комментированный код модуля (комментариев в коде очень много )
Начну пожалуй с того как именно выводить из базы данных нужные заметки. Тут все довольно просто. Ранее мы работали с такой чудо-штукой как LIMIT для запроса SELECET. Лимит позволяет выводить определенное количество строк из базы данных. В данный момент наша главная страница блога выводит 10 заметок именно с помощью этой чудо-штуки
$result_index = mysql_query("SELECT * FROM blog ORDER BY id DESC LIMIT 10");
Но у лимит есть еще одна очень удобная возможность. Можно указать с какой позиции (строчки в базе данных) начинать выводить определенное количество заметок. Например можно написать вот так
$result_index = mysql_query("SELECT * FROM blog ORDER BY id DESC LIMIT 0, 10");
В этом случае мы получим тот же результат, что и с помощью предыдущего запроса, но используя начальную позицию.
Как вы уже наверное догадались, навигация именно так и работает. Пользователь переходя на страницу номер 2, запрашивает у скрипта заметки не с нулевой позиции, а с десятой
$result_index = mysql_query("SELECT * FROM blog ORDER BY id DESC LIMIT 10, 10");
тем самым на экране он увидит заметки с 10 по 20-ую позицию.
Задача нашего модуля, опираясь на открытую страницу рассчитать с какой именно позиции выводить необходимые 10 заметок.
Как уже сказал выше, задача модуля рассчитать с какой позиции необходимо выводить нужные заметки. Для того чтобы рассчитать это, скрипту необходимо будет целое число (номер страницы) задать которое возлагается на плечи пользователя Для того чтобы облегчить задачу пользователя в определения данного целого числа мы нарисуем для него панель навигации (в общем то эта задача самая сложна). Выглядит эта панель вот так:
Для того чтобы Вы поняли комментарии которые я оставил в коде, должен пояснить пару деталей. Я разделил данную панель на три глобальных элемента:
Центральную часть панели я поделил на три элемента:
Генерация панели будет производится от самого центра, то есть от центральной части центральной панели. В центральной части может находится любое количество активных кнопок (по умолчанию их 6). Но желательно что бы это было четное число, так как в центре активных кнопок будет добавлено еще одна, не активная кнопка (по умолчанию в центральной панели будет 6 активных кнопок плюс одна не активная, и того семь кнопок)
Появление левой и правой части панели будет зависеть от того сколько всего страниц, и какая именно страница открыта.
В общем то все что нужно я уже сказал, можно приступать к реализации, но сразу после объявления для новоприбывших
Если Вы на моем блоге в первый раз, то не проходите мимо данного пункта. Вы вряд ли поняли чем мы тут занимаемся, поэтому слушайте Данная заметка является частью глобального цикла по реализации своего простенького движка персонального блога "Создать блог с нуля". Цикл статей уже выходит на финишную прямую, нам осталось реализовать совсем ничего, после чего я поделюсь копией движка с уже отловленными (большую часть) багами.
Смысл всего этого в том, что бы понять как работает простой скрипт интернет проекта, после чего увидеть копию полностью рабочего движка, в котором почти каждая строчка Вам известна. Данное знание позволит Вам создать что-то свое, что-то то что удовлетворяло бы Вас на все 100%
Если данная тематика Вам интересна, то переходите вот по этой ссылке и приступайте к изучению изложенного мной материала.
Если Вы собираетесь задержаться на моем блоге, то обязательно подпишитесь на RSS ленту блога через ридер, или же по почте. Так Вы не пропустите новые заметки цикла, ну или какую-нибудь другую интересную информацию
Думаю необходимо перечислить список файлов которые нам нужно будет создать или отредактировать:
Я пока не знаю, уложусь ли я в один пост, или нет. Но тем не менее сильно не заморачивайтесь если не понимаете суть и назначение некоторых добавлений, увидите в коде все поймете
Как уже говорил, модуль содержит три функции. Я даю Вам полный код данного модуля. Файл я назвал navig.php и поместил в пользовательскую папку moduls (учтите, код очень большой, поэтому лучше скопируйте его или скачайте исходник. В программе с адекватной подсветкой проще будет разобраться)
<?
function navig($post,$pn,$cat,$page,$chpu)//функция деления заметок на страницы.
{
//$post - количество выводимых постов
//$pn - номер открытой страницы
//$cat - либо id категории либо пустота
//$page - либо index либо cat, в зависимости от того в каком модуле запускается данная функция
//$chpu - режим чпу. 0 - выключен; 1 включен
//Навигация (расчет количества страниц)
//Выводим кол-во записей. Выбор таблицы из которой выводится информация зависит от переменной page.
if($page == "cat")$sql = "SELECT COUNT(*) FROM blog WHERE cat='$cat' AND viewindex='1'";
if($page == "index")$sql = "SELECT COUNT(*) FROM blog WHERE viewindex='1'";
$result3 = mysql_query ($sql);
$myrow3 = mysql_fetch_array ($result3);
$full = $myrow3[0];//заносим в переменную кол-во постов в базе данных
$links = (($full - 1) / $post) + 1;//рассчитываем сколько всего должно быть страниц ([1][2][3][4][5][6])
$links = intval($links);//делаем из переменной целое число (если в результате расчета получилось 6.789, то после операции получим 6)
$page_link = $pn * $post - $post;//рассчитываем с какой строчки sql запрос начнет выводить заметки из базы данных
//Навигация (расчет количества страниц)
$limit[0] = $page_link;//позиция означающая с какой строчки sql запрос начнет выводить заметки из базы данных
$limit[1] = $post;//количество выводимых заметок
$limit[2] = $links;//количество страниц ([1][2][3][4][5][6])
return $limit;//выводим результат в виде массива из трех элементов
}
function listnav($links,$pn,$max,$cat,$page,$chpu)//функция генерации навигационной панели
{
//$links - количество страниц ([1][2][3][4][5][6])
//$pn - номер открытой страницы
//$max - максимальное кол-во АКТИВНЫХ кнопок в центре (между "..." и "...") панели навигации (...[4][5][6] 7 [8][9][10]...)
//$cat - либо id категории либо пустота
//$page - либо index либо cat, в зависимости от того в каком модуле запускается данная функция
//$chpu - режим чпу. 0 - выключен; 1 включен
if($chpu == 1 AND $cat != "")//если ЧПУ выключен и функция запущена из модуля категории.
{
//то выводим имя чпу из таблицы menu
$result3 = mysql_query ("SELECT nameurl FROM menu WHERE id='$cat'");
$myrow3 = mysql_fetch_array ($result3);
}
//
//блок кода формирование центральной части панели
//
$max_pn = $max;//максимальное число АКТИВНЫХ кнопочек на странице (...[4][5][6] 7 [8][9][10]...)
$left_right_links = $max_pn/2;//рассчитываем сколько АКТИВНЫХ кнопок должно быть с левой стороны центральной панели, и с правой стороны
//По умолчанию выводится 6 активных кнопок. При деление на два мы получаем
//[4][5][6] - три активной кнопки с левой стороны центральной панели
//[8][9][10] - и три кнопки с правой стороны центральной панели
//в центре будет не активная кнопка, то бишь открытая страница
for($i=$pn-$left_right_links;$i<$pn;$i++)//формируем левую сторону центральной панели.
//Отсчитываем от открытой страницы максимальное количество
//активных кнопок с лева (по умолчанию 3 кнопки)
{
if($i>=1)//если переменная i больше или равно 1. У нас же нет страницы [-2] =)
{
if($page == "cat")//если функция запущена из модуля категории
{
if($chpu == 0)$forFUN = $cat;//в случае если чпу выключен, определяем id категории
if($chpu == 1)$forFUN = $myrow3['nameurl'];//в случае если чпу включен, определяем имя чпу категории
$nav .= linkBLOCK($page,$chpu,$i,$forFUN,0);//запускаем функцию формирования блока панели навигации
}
if($page == "index")$nav .= linkBLOCK($page,$chpu,$i,'',0);//если функция запущена из модуля новости,
//просто запускаем функцию формирования блока панели.
}
}
//в случае если у нас всего 26 страниц. Активных кнопок в центральной панели должно быть 6, а открыта 10-ая страница
//то на выходи в переменной nav будет
//находится следующее значение (приблизительная схема без оформления html кодом):
//[7][8][9]
$nav .= linkBLOCK('','',$pn,'',1);//прикручиваем не активную кнопку, то бишь открытая страниц
//сейчас в переменной nav находится вот такое значение: [7][8][9] 10
for($i=$pn+1;$i<($pn+1)+$left_right_links;$i++)//формируем правую сторону центральной панели.
//Отсчитываем от открытой страницы максимальное количество
//активных кнопок с права (по умолчанию 3 кнопки)
{
if($i<=$links)//если переменная i не превысило максимальное количество страниц
{
if($page == "cat")//если функция запущена из модуля категории
{
if($chpu == 0)$forFUN = $cat;//в случае если чпу выключен, определяем id категории
if($chpu == 1)$forFUN = $myrow3['nameurl'];//в случае если чпу включен, определяем имя чпу категории
$nav .= linkBLOCK($page,$chpu,$i,$forFUN,0);//запускаем функцию формирования блока панели навигации
}
if($page == "index")$nav .= linkBLOCK($page,$chpu,$i,'',0);//если функция запущена из модуля новости,
//просто запускаем функцию формирования блока панели.
}
}
//сейчас в переменной nav находится следующее значение: [7][8][9] 10 [11][12][13]
//
//блок кода формирование центральной части панели
//
//
//блок кода который поределит нужно ли подключать левую и правую часть панели
//
$minLINKS = $pn - $left_right_links;//определяем номер первой страницы в левой части центрального блока
//Например в нашем случае переменная будет содержать число 7
// <----------
//["7"][8][9] 10 [11][12][13]
$maxLINKS = $pn + $left_right_links;//проделываем ту же операцию, но только в правую сторону
// ------------>
//[7][8][9] 10 [11][12]["13"]
if($minLINKS > 1)//если значение первой страницы левой части центральной панели больше единицы
//в нашем случае переменная имеет значение 7
{
if($minLINKS == 2)$stepFUN = 0;//если значение первой страницы левой части центральной панели равно двум
//то запустим функцию формирования блока в режиме ноль
else $stepFUN = 3;//если значение не равно двум, то запускаем в режиме три
if($page == "cat")//если функция запущена из модуля категории
{
if($chpu == 0)$forFUN = $cat;//записываем id категории в случае если чпу выкл
if($chpu == 1)$forFUN = $myrow3['nameurl'];//заносим имя чпу если чпу включен
$nav = linkBLOCK($page,$chpu,1,$forFUN,$stepFUN).$nav;//формируем блок
}
if($page == "index")$nav = linkBLOCK($page,$chpu,1,'',$stepFUN).$nav;//если функция запущена из модуля новости,
//просто запускаем функцию формирования блока панели.
}
//на выходе переменная nav будет содержать следующее значение: [1]...[7][8][9] 10 [11][12][13]
if($maxLINKS < $links)//если значение последней страницы правой части центральной панели не больше максимального кол-ва страниц
//в нашем случае страниц 26 а последняя страница правой части - 13.
{
if($links-1 == $maxLINKS)$stepFUN = 0;//если значение последней страницы правой части центральной панели
//равно предпоследнему значению общего кол-ва страниц (в нашем примере 25-ти)
//то функция будет запущена в режиме ноль
else $stepFUN = 2;//в противном случае в режиме два
if($page == "cat")//если функция запущена из модуля категории
{
if($chpu == 0)$forFUN = $cat;//записываем id категории в случае если чпу выкл
if($chpu == 1)$forFUN = $myrow3['nameurl'];//заносим имя чпу если чпу включен
$nav .= linkBLOCK($page,$chpu,$links,$forFUN,$stepFUN);//формируем блок
}
if($page == "index")$nav .= linkBLOCK($page,$chpu,$links,'',$stepFUN);//если функция запущена из модуля новости,
//просто запускаем функцию формирования блока панели.
}
//сейчас в переменной nav содержится следующее значение: [1]...[7][8][9] 10 [11][12][13]...[26]
//
//блок кода который определит нужно ли подключать левую и правую часть панели
//
$nav = "<div id=\"navig\" align=\"center\">".$nav."</div>";//заносим с генерированное значение в блок div
return $nav;//выводим результат в виде html кода
}
//-------------------------------------
function linkBLOCK($page,$chpu,$pn,$cat,$step)//функция формирования блока
{
//$page - либо index либо cat, в зависимости от того в каком модуле запускается данная функция
//$chpu - режим чпу. 0 - выключен; 1 включен
//$pn - номер открытой страницы
//$cat - либо id категории либо пустота
//$step - режим запуска функции:
//0 - обычное формирование ссылки с адресом страницы и номером страницы
//1 - формирования блока с номером открытой страницы. НЕ является ссылкой
//2 - формирования ссылки с адресом страницы и номером страницы
//плюс прибавка в полученному результату многоточие (...[число])
//3 - формирования ссылки с адресом страницы и номером страницы
//плюс прибавка в полученному результату многоточие ([число]...)
if($step == 0 OR $step == 2 OR $step == 3)//если запущены режимы 0 или 2 или 3
{
if($chpu == 0)//если чпу выключен
{
if($page == "cat")$link = "index.php?cat=".$cat."&pn=".$pn;//формирование ссылки для категории
if($page == "index")$link = "index.php?pn=".$pn;//формирование ссылки для модуля news
}
if($chpu == 1)//если включен чпу
{
if($page == "cat")$link = "category/".$cat."/".$pn."/";//формирование чпу для категории
if($page == "index")$link = $pn."/";//формирование чпу для модуля news
}
$result = "<div class='navig'><a href='".$link."'>".$pn."</a></div>";//обвертываем значение html кодом
if($step == 2)$result = "<div class='morenavig'>...</div>".$result;//если режим запуска 2, то прибавляем многоточее после ссылки
if($step == 3)$result .= "<div class='morenavig'>...</div>";//если режим запуска 3, то прибавляем многоточее перед ссылкой
}
if($step == 1)$result = "<div class='navigACTIV'>".$pn."</div>";//если режим запуска 1 то просто обвертываем номер страницы html кодом
return $result;//выводим результат в виде html кода
}
?>
Я потратил несколько часов что бы за комментировать данный код. Логика всех функций должна быть ясна. (надеюсь это так ) Я даже не знаю чего бы добавить вроде все подробно расписал в коде... В общем если есть какие либо вопросы, то напишите мне на мыло или в комментарии, я поясню непонятные Вам моменты..
Как уже писал выше, в данных модулях на нужно будет рассчитать позицию с которой будут выводится 10 наших заметок. Так же необходимо будет подключить панель навигации. Для расчета позиции у нас есть функция navig(), а для вывода панели у нас есть функция listnav(), вот и воспользуемся ими
Открываем news.php, и правим функцию index_page() вот таким образом:
function index_page($chpu)
{
global $pn;
include("moduls/navig.php");
$limit = navig(10,$pn,"","index",$chpu);
$links = $limit[2];
$result_index = mysql_query("SELECT * FROM blog WHERE viewindex='1' ORDER BY id DESC LIMIT $limit[0], $limit[1]");//Выводим из базы данных последние 10 записей
$myrow_index = mysql_fetch_array($result_index);
if($myrow_index != "")//Проверяем есть ли в базе данных записи
{//Если есть...
$sm_read = file("templates/news.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
do//Цикл do while
{
$edd_tamp = $sm_read;//Так как на придется править шаблон,
//то лучше его сохранить в отдельную переменную, иначе нам придется
//пользоваться функцией file() чаще чем 1 раз, а это нагрузка на сервер
$text = explode("<p>[end]</p>",$myrow_index[text]);//идентификатор в тексте показывающий,
//что после него следует вывести кнопку "читать дальше"
//формируем ссылку на пост
if($chpu == 0)$link = "index.php?blog=".$myrow_index[id];
else $link = "post/".$myrow_index[nameurl];
//Замены идентификаторов на переменные из базы данных
$edd_tamp = str_replace("[_text]",$text[0],$edd_tamp);//Текст
$edd_tamp = str_replace("[_title]",$myrow_index[title],$edd_tamp);//Название статьи
$edd_tamp = str_replace("[_author]",$myrow_index[author],$edd_tamp);//Автор статьи
$edd_tamp = str_replace("[_date_b]",$myrow_index[date_b],$edd_tamp);//Дата размещения
$edd_tamp = str_replace("[_gomore]",$link,$edd_tamp);//линк статьи
$news .= $edd_tamp;// Склеиваем весь с генерированный код в одну переменную
}
while($myrow_index = mysql_fetch_array($result_index));
if($links > 1)$news .= listnav($links,$pn,6,"","index",$chpu);//Вывод ссылок на страницы
}
else $news = "<p align='center'>Нет записей в базе данных</p>";//Если записей нет, то вывести это сообщение
return $news;//Выводим с генерированный html код
}
Прежде чем делать какие либо расчеты мы объявляем переменную pn (которую создадим ниже) глобальной
global $pn;
После подключаем наш новый модуль и запускаем функцию navig()
include("moduls/navig.php");
$limit = navig(10,$pn,"","index",$chpu);
$links = $limit[2];
Функция navig() возвращает массив из трех элементов. В первых двух элементах находится номер позиции и количество выводимых постов. В третьем элементе находится общее количество страниц.
Теперь имея позицию и количество выводимых постов мы может создать новый запрос
$result_index = mysql_query("SELECT * FROM blog WHERE viewindex='1' ORDER BY id DESC LIMIT $limit[0], $limit[1]");//Выводим из базы данных последние 10 записей
Далее идет не тронутая логика модуля. После формирование html кода с анонсами скрипт попытается подключить панель
if($links > 1)$news .= listnav($links,$pn,6,"","index",$chpu);//Вывод ссылок на страницы
Панель появится на экране только в том случае если страниц больше одной
Открываем файл cat.php и правим функцию index_cat() вот таким образом:
function index_cat($cat,$chpu)
{
global $pn;
include("moduls/navig.php");
$limit = navig(10,$pn,$cat,"cat",$chpu);
$links = $limit[2];
$result_index = mysql_query("SELECT * FROM blog WHERE cat='$cat' AND viewindex='1' ORDER BY id DESC LIMIT $limit[0], $limit[1]");//Выводим из базы данных 10 записей где колонка cat равна переменной $cat
$myrow_index = mysql_fetch_array($result_index);
if($myrow_index != "")//Проверяем есть ли в базе данных записи
{//Если есть...
$sm_read = file("templates/news.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
do//Цикл do while
{
$edd_tamp = $sm_read;//Так как на придется править шаблон,
//то лучше его сохранить в отдельную переменную, иначе нам придется
//пользоваться функцией file() чаще чем 1 раз, а это нагрузка на сервер
$text = explode("<p>[end]</p>",$myrow_index[text]);//идентификатор в тексте показывающий,
//что после него следует вывести кнопку "читать дальше"
//формируем ссылку на пост
if($chpu == 0)$link = "index.php?blog=".$myrow_index[id];
else $link = "post/".$myrow_index[nameurl];
//Замены идентификаторов на переменные из базы данных
$edd_tamp = str_replace("[_text]",$text[0],$edd_tamp);//Текст
$edd_tamp = str_replace("[_title]",$myrow_index[title],$edd_tamp);//Название статьи
$edd_tamp = str_replace("[_author]",$myrow_index[author],$edd_tamp);//Автор статьи
$edd_tamp = str_replace("[_date_b]",$myrow_index[date_b],$edd_tamp);//Дата размещения
$edd_tamp = str_replace("[_gomore]",$link,$edd_tamp);//линк статьи
$result .= $edd_tamp;// Склеиваем весь с генерированный код в одну переменную
}
while($myrow_index = mysql_fetch_array($result_index));
if($links > 1)$result .= listnav($links,$pn,6,$cat,"cat",$chpu);//Вывод ссылок на страницы
}
else $result = "<p align='center'>Нет записей в базе данных</p>";//Если записей нет, то вывести это сообщение
return $result;//Выводим с генерированный html код
}
Я проделал тут тоже самое что и в модуле мини новостей. Про параметры функций navig() и listnav() читайте в комментариях модуля navig.php, там все подробно расписано
Ну что же, подключение прошло успешно, теперь необходимо определить, очень важную для нашего нового модуля, переменную pn!
Открываем файл пользовательский index.php и добавляем сразу после вот этого блока:
//GET ПЕРЕМЕННАЯ cat
if(isset($_GET['cat']))
{
$cat = $_GET['cat'];
if(!preg_match("/^[0-9]+$/",$cat))
{
header("location: index.php");
exit;
}
}
//GET ПЕРЕМЕННАЯ cat
Вот такой код:
//GET ПЕРЕМЕННАЯ pn
if(isset($_GET['pn']))
{
$pn = $_GET['pn'];
if(!preg_match("/^[0-9]+$/",$pn))
{
header("location: index.php");
exit;
}
}
if(!isset($pn))$pn = 1;
//GET ПЕРЕМЕННАЯ pn
Этот небольшой скрипт проверит на корректность присланную переменную и сохранит ее значение в переменной pn. Если же присланного значение не существует, то переменная pn все равно объявится, но со значением по умолчанию, а именно с единицей
В режиме отключенного ЧПУ ссылки будут выглядеть приблизительно вот так:
http://rio-shaman.ru/index.php?pn=4
В случае же включенного ЧПУ ссылки должны выглядеть вот так:
http://rio-shaman.ru/4/
В случае если пользователь обращается к ссылке ЧПУ вида, то скрипт создаст не переменную $_GET['pn'] а переменную $_GET['pagesite']. Именно поэтому у нас существует файл getchpu.php в котором мы принимаем подобные значения и переводим их в понятные для нашего движка переменные. Поэтому открываем наш файл getchpu.php и добавляем сразу после:
//GET ПЕРЕМЕННАЯ category
if(isset($_GET['category']))
{
if(!preg_match("/^[-a-z0-9]+\.html$/",$_GET['category']))//если имя не корректное,то переносим
{
header("location: ".$server_root);//на главную страницу
exit;
}
$cat = chpu($_GET['category'],"category");//по имени страницы достаем из бд id
if($cat == "")//если результат функции пустота, то переносим пользователя
{
header("location: ".$server_root);//на главную страницу
exit;
}
}
//GET ПЕРЕМЕННАЯ category
Вот такой блок кода
//GET ПЕРЕМЕННАЯ pagesite
if(isset($_GET['pagesite']))
{
if(!preg_match("/^[0-9]+$/",$_GET['pagesite']))//если имя не корректное,то переносим
{
header("location: ".$server_root."404.html");//на страницу с ошибкой
exit;
}
$pn = $_GET['pagesite'];
}
//GET ПЕРЕМЕННАЯ pagesite
Надеюсь все понятно... Правда у Вас может возникнуть вопрос, с чего это блог решит создавать переменную $_GET['pagesite'] а не $_GET['pn']? Вопрос вполне уместный, ведь блог пока не может создать переменную $_GET['pagesite'], данную возможность мы реализуем в следующем пункте
Как известно в режиме включенного ЧПУ за объявление переменных отвечает файл .htaccess. Вот и в данном случаем нам необходимо будет прибегнуть к силе данного файла. Открываем его и правим код в нем вот таким образом:
RewriteEngine on
RewriteRule ^([0-9]+)/$ index.php?pagesite=$1 [L]
RewriteRule ^post/([-a-z0-9]+.html)$ index.php?post=$1 [L]
RewriteRule ^category/([-a-z0-9]+.html)$ index.php?category=$1 [L]
RewriteRule ^category/([-a-z0-9]+.html)/([0-9]+)/$ index.php?category=$1&pagesite=$2 [L]
RewriteRule ^contacts.html$ index.php?contact=1 [L]
Как видите, я добавил два новых условия:
RewriteRule ^([0-9]+)/$ index.php?pagesite=$1 [L]
и
RewriteRule ^category/([-a-z0-9]+.html)/([0-9]+)/$ index.php?category=$1&pagesite=$2 [L]
Если пользователь обратится к адресу:
http://rio-shaman.ru/4/
то движок создаст вот такую ссылку для обработки:
http://rio-shaman/index.php?pagesite=4
Ну а если же пользователь обратится вот по такому адресу:
http://rio-shaman.ru/category/testovaya-kategoriya.html/2/
То скрипт получит вот такую ссылку:
http://rio-shaman.ru/index.php?category=category/testovaya-kategoriya.html&pagesite=2
После вот таких преобразований, в getchpu.php переменная $_GET['pagesite'] преобразуется в переменную pn и все будет пучком
В общем то последнее что нам осталось сделать, так это оформить нашу панель. Открываем style.css и в самый низ прописываем вот такие стили:
.morenavig
{
padding:5px;
float:left;
margin:2px;
}
.navig,.navigACTIV
{
padding:5px;
float:left;
margin:2px;
}
.navigACTIV
{
border:1px solid #dcdcdc;
}
Ну что же, на этом все! Вот как выглядит панель на моей копии разрабатываемого движка
Я вывел по три поста на странице, уж очень было лень добавлять несколько десятков пустых страниц
Если у Вас есть какие либо вопросы, то пользуйтесь формой ниже. Если Вы еще не подписаны на мой блог, то обязательно подпишитесь на RSS ленту блога через ридер, или же по почте.
Всего Вам наилучшего! У меня все!
Исходник |
include("module_ncms/navig.php");
$txt= pn();
отображает только ошибки что navig.php не работает
если есть время посмотрите плиз:
http://niun.ru/downoload
скачайте: http://niun.ru/niuncms_1.4.2.zip
и посмотрите что, там неверно :(
http://rio-shaman.ru/download/download_2001023246.rar
Я прокомментировал все что исправил. Надеюсь это Вам поможет
например:
Читатель: id 3
Модератор: id 2
Администратор: id 1
У системы RS-BLOG не предусмотрена регистрация и хранение других аккаунтов в базе данных, так как система является персональным блогом, а не коллективным.
P.S.: Если собираетесь реализовывать коллективный доступ в админ панель, то не вздумайте завязывать работу на id. Вам потребуется создать отдельное поле (например access) и вписывать туда число, которое будет олицетворять уровень доступа:
3 - Гость
2 - Читатель
1 - Модератор
0 - Админ
Выводится уровень доступа (а именно строка в БД) по сочетанию логина и пароля пользователя.
if($page == "cat")$sql = "SELECT COUNT(*) FROM blog WHERE cat='$cat' AND viewindex='1'";
откуда она появилась и можно ли вместо ее использовать id записи???
Количество строк необходимо для того что бы определить сколько должно быть страниц.
http://rio-shaman.ru/razrabotka-cms/razrabotka-bloga/menju-i-mini-novosti/
Боюсь что Вам скорее всего нужно будет проходить весь цикл статей "создать блог с нуля". Сложно вообразить какие у Вас еще могут возникнуть трудности в написание навигации.
http://rio-shaman.ru/content/files/navigation.rar
Я очень упростил его. Замените название полей и таблиц. Ну еще естественно коннект к БД. Надеюсь разберетесь что к чему.
у меня никак не получается, уже все перепробовал, ничего не получается......помогите
можешь посмотреть, почему не работает?
Что касается Вашей проблемы вывести детализацию и анонсы статей. Попробуйте у текста отмерить абзац и вставить тег [end]. Данный тег делит Вашу статью на анонс и продолжение.
пример:
Эти модели, разработанные с использованием
[end]
лидирующих в отрасли технологий обработки изображений Canon....
WHERE viewindex='1'
Вот, вполне возможно, из-за этого у Вас и нет записей.
Суть в том, что данный модуль не "видит" GET переменную page. Из-за этого, запрос на получение количества страниц пуст (Query was empty) и сам блок навигации не выводиться (т.к. не срабатывают if условия).
Быть может, Вы сможете подсказать, где искать ошибку?
У нас есть переменная page, с помощью которой мы определяем, запрос к какой таблице БД будем делать.
Конкретно эти строчки кода:
Кстати, если страницы не существует лучше не перекидывать пользователя на главную, а выдавать 404 ошибку.
С точки зрения SEO это будет правильнее !!
будет дубль страница, опять же для SEO не хорошо
Пример: razrabotka-cms/uluchshenija//////////postranichnaja-navigacija//