Связываем меню и вывод мини новостей

 

Доброго времени суток дорогой читатель Блога RS! Прежде чем мы продолжим писать админку для cms, нам необходимо подумать о такой вещи как категории. Ведь если припомнить, наш блог не умеет выводить список мини новостей какой нить категории. Причем тут меню и мини новости? И для чего их связывать? Ссылка на категорию будет отображаться в меню, стало быть наше меню имеет прямое воздействие на категорию. Давайте вспомним как реализуется вывод мини новостей. Там мы просто вытаскивали 10 последних новостей из базы данных, и выводили их. Для категории же необходимо будет выводить только определенные записи.

 

 

Теория

 

Давайте немного поразмышляем. Откуда нам знать какие мини новости выводить на экран? Все довольно просто. В базе данных, у таблицы меню есть id. Его мы будем переносить в таблицу blog. Тем самым мы свяжем таблицу menu и таблицу blog.

rs_gallery['37']

Сейчас все делается в ручную, но это пока... В следующих постах мы научим админку реализовывать все эти изменения.

 

Редактируем таблицу

 

Для начала нам необходимо добавить новый столбец в таблице blog. Приступим..

Заходим в структуры нашей таблицы blog

внизу выбираем "после date_b" и жмем "ОК"

Называем колонку - cat, ставим тип int выставляем значение 10 и жмем "сохранить"

Вручную добавьте новый пункт меню и пост. Прописав в колонку cat, у таблицы blog, id нового пункта меню. В посте "Работа с базой данных в php" я рассказывал как вставлять в БД записи.

rs_gallery['38']

 

Редактируем модуль "Меню"

 

Вспоминайте как работает модуль меню.

Задача такая: Необходимо сделать так, что бы, если в таблице меню не заполнить колонку href то ссылка генерировалась автоматически. Так мы будем делать ссылки на категорию. Вот код:

<?
function menu()
{
$result_index = mysql_query("SELECT * FROM menu");//Выводим из базы данных все пункты меню
$myrow_index = mysql_fetch_array($result_index);
if($myrow_index != "")//Проверяем есть ли в базе данных записи
{//Если есть...
$sm_read = file("templates/menu.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
preg_match("/\[_divmenu\](.*?)\[_divmenu\]/s",$sm_read,$div_menu);//Вырезаем из шаблона ту
//часть, которая будет повторяться, то есть блок
//<div class="div_menu"><a class="menu_link" href="[_href]">[_link]</a></div>
do//Цикл do while
{
$edd_tamp = $div_menu[1];//Так как на придется править шаблон,
//то лучше его сохранить в отдельную переменную, иначе нам придется
//пользоваться функцией file() чаще чем 1 раз, а это нагрузка на сервер

//Замены идентификаторов на переменные из базы данных
if($myrow_index[href] == "")$href = "/index.php?cat=".$myrow_index[id];
else $href = $myrow_index[href];

$edd_tamp = str_replace("[_href]",$href,$edd_tamp);//Ссылка
$edd_tamp = str_replace("[_link]",$myrow_index[name],$edd_tamp);//Текст ссылки

$menu .= $edd_tamp;// Склеиваем весь с генерированный код в одну переменную
}
while($myrow_index = mysql_fetch_array($result_index));
$menu = preg_replace("/\[_divmenu\].*?\[_divmenu\]/s",$menu,$sm_read);//Вместо [_divmenu]...[_divmenu]
//вклеиваем наш сгенерированный код из $menu
}
else $menu = "";//Если записей нет, то вывести это сообщение
return $menu;//Выводим с генерированный html код
}
?>

Я добавил две новые строчки:

if($myrow_index[href] == "")$href = "index.php?cat=".$myrow_index[id];
else $href = $myrow_index[href];

И отредактировал одну уже написанную:

$edd_tamp = str_replace("[_href]",$href,$edd_tamp);//Ссылка

Теперь, нашь код проверит, пуста ли колонка в таблице... Если пустая то делаем из нее ссылку типа "index.php?cat=N" Если же не пуста, то просто вставляем ссылку записанную в БД.

 

Пишем модуль "Категории" - cat.php

 

Тут все до ужаса просто. Модуль на 99% схож с модулем мини новостей.

<?
function index_cat($cat)
{
$result_index = mysql_query("SELECT * FROM blog WHERE cat='$cat' ORDER BY id DESC");//Выводим из базы данных все записи где колонка 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("[end]",$myrow_index[text]);//идентификатор в тексте показывающий,
//что после него следует вывести кнопку "читать дальше"

//Замены идентификаторов на переменные из базы данных
$edd_tamp = str_replace("[_text]",$text[0],$edd_tamp);//Текст
$edd_tamp = str_replace("[_title]",$myrow_index[title],$edd_tamp);//Название статьи
$edd_tamp = str_replace("[_id]",$myrow_index[id],$edd_tamp);//id статьи, для вывода в полной статьи
$edd_tamp = str_replace("[_author]",$myrow_index[author],$edd_tamp);//Автор статьи
$edd_tamp = str_replace("[_date_b]",$myrow_index[date_b],$edd_tamp);//Дата размещения

$result .= $edd_tamp;// Склеиваем весь с генерированный код в одну переменную
}
while($myrow_index = mysql_fetch_array($result_index));
}
else $result = "<p align='center'>Нет записей в базе данных</p>";//Если записей нет, то вывести это сообщение
return $result;//Выводим с генерированный html код
}
?>

Разница лишь в некоторых переменных, которые я просто переименовал, и вывода записей из базы данных...

 

Подключаем модуль

 

Открываем файл index.php и добавляем вот эту строчку:

if($_GET['cat'])$cat = $_GET['cat'];

Сразу после вот этой строчки:

if($_GET['contact'])$contact = $_GET['contact'];

Далее нам необходимо прописать вот этот кусочек кода:

//МОДУЛЬ КАТЕГОРИЙ
if($cat)
{
include("moduls/cat.php");
$txt = index_cat($cat);
}
//МОДУЛЬ КАТЕГОРИЙ

Сразу после модуля мини новстей

 

Заключение

 

Писал все на скорую руку... сегодня как бы необходимо пост разместить, а у меня времени очень мало Если есть какие вопросы то задавайте, если что-то не работает, то тоже задавайте вопросы, буду свободен отвечу обязательно! Так же хочу заметить, что если Вы читатете блог в первые, то Вы не разберетесь в написанном. Этот пост продолжение цикла статей о разработки cms. Всем удачи, на сегодня у меня все!

Исходник