В этой статье я хочу рассказать о том, как можно осуществлять вывод новостей.
Начнем, как уже повелось, с постановки задачи: Необходимо создать страницу, на которой будет отображен список разделов новостей, если кликнуть по какому-либо разделу, должна открыться страница со списком новостей нужной категории. В данном списке новостей для каждой новости должно отображаться заголовок, краткое описание, автор, а также ссылка на полный текст новости.
Прежде чем перейти к написанию кода, нужно спроектировать базу данных. В базе данных мы будем хранить новости и категории новостей. Нам потребуется две таблицы, первая – category, для хранения категорий новостей, она будет состоять из двух полей – id и category_name. Тут все понятно, id – первичный ключ, а name будет служить для хранения названия категорий. Вторая таблица будет создана для новостей — news. Таблица news будет состоять из полей:
Id — первичный ключ,
id_category – id категории из таблицы category,
title — заголовок,
small_text – краткое описание,
text – полный текст новости,
author – автор новости.
Поскольку таблица news использует в своем поле id_category id из таблицы category, нам необходимо связать две таблицы ключом.
Для создания этих таблиц Вы можете воспользоваться sql-патчем. Помимо создания таблиц и связей, патч создаст несколько записей.
CREATE TABLE `category` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, PRIMARY KEY (`id`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB; CREATE TABLE `news` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `id_category` INT(10) NOT NULL, `title` VARCHAR(255) NOT NULL, `small_text` TEXT NOT NULL, `text` TEXT NOT NULL, `author` VARCHAR(255) NOT NULL, PRIMARY KEY (`id`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB; ALTER TABLE `news` ADD CONSTRAINT `FK_news_category` FOREIGN KEY (`id_category`) REFERENCES `category` (`id`); INSERT INTO `category` (`category_name`) VALUES ('category_1'); INSERT INTO `category` (`category_name`) VALUES ('category_2'); INSERT INTO `news` (`id_category`, `title`, `small_text`, `text`, `author`) VALUES (1, 'title1', 'small_text1', 'text1', 'author1'); INSERT INTO `news` (`id_category`, `title`, `small_text`, `text`, `author`) VALUES (2, 'title2', 'small_text2', 'text2', 'author2'); INSERT INTO `news` (`id_category`, `title`, `small_text`, `text`, `author`) VALUES (2, 'title3', 'small_text3', 'text3', 'author3');
Теперь приступим к написанию кода. Начнем с того что создадим файл db_connection.php. В этом файле будет содержаться код для подключения базы данных. И теперь при необходимости подключить базу данных, вместо нескольких строк кода, мы будем просто подключать один файл. А вот и код этого файла:
<?php define("HOST", "localhost"); define("USER", "root"); define("PASSWORD", ""); define("DB_NAME", "mydb"); $db_connect = mysql_connect(HOST, USER, PASSWORD, TRUE); mysql_selectdb(DB_NAME,$db_connect); mysql_set_charset('utf8'); ?>
Теперь давайте создадим страницу, на которой будет отображаться список категорий новостей, за эту страницу бедет отвечать скрипт index.php, а вто и его код:
<?php include("/db_connection.php"); // подключаемся с бд // получаем список категори // и отсортируем по алфавиту $sql = mysql_query(" SELECT * FROM `category` ORDER BY `name` ASC; ") or die(mysql_error()); $rows = array(); while($r = mysql_fetch_array($sql, MYSQL_ASSOC)){ $rows[] = $r; } /* * вывод списка категорий * в списке сразу создаем ссылку на страницу, * где будет отображаться список статей той или иной категории */ foreach($rows as $row){ ?> <a href="/news_list.php?cat_id=<?php echo $row['id']; ?>"><?php echo $row['name']; ?></a> <br> <?php }?>
Теперь давайте создадим файл news_list.php – этот файл будет отвечать за список новостей. Ниже приведен его код:
<?php include("/db_connection.php"); // подключаемся с бд // получаем id категории, для которой нужно вывести новости // id передается в урле // если в урле ни чего не передалось, то выведем новости всех категорий // Не забадте проверять, то что передаета в запрос. // Я делаю без проверок, чтобы не усложнять код if(isset($_GET['cat_id'])){ $sqlQuery = " SELECT * FROM `news` WHERE `id_category` = ".$_GET['cat_id']."; "; }else{ $sqlQuery = " SELECT * FROM `news`; "; } // делаем запрос к бд и получаем новости $sql = mysql_query($sqlQuery) or die(mysql_error()); $rows = array(); while($r = mysql_fetch_array($sql, MYSQL_ASSOC)){ $rows[] = $r; } /* * вывод списка новостей * в списке сразу создаем ссылку на страницу, * где будет отображаться полная новость */ foreach($rows as $row){ ?> <h1><?php echo $row['title']; ?></h1> <p><?php echo $row['small_text']; ?></p> <h3>Author: <?php echo $row['author']; ?></h3> <a href="/news.php? id=<?php echo $row['id']; ?>">Read more</a> <hr/> <?php }?>
Теперь создадим файл news.php, он будет отвечать за страницу с полным текстом новости. Вот код этого файла:
<?php include("/db_connection.php"); // подключаемся с бд // получаем id новости которую будем показывать // id передается в урле // если в урле ни чего не передалось, // то напишем что новость не нашлась if(isset($_GET['id'])){ $sqlQuery = " SELECT * FROM `news` WHERE `id` = ".$_GET['id']."; "; // делаем запрос к бд и получаем новости $sql = mysql_query($sqlQuery) or die(mysql_error()); $rows = array(); while($r = mysql_fetch_array($sql, MYSQL_ASSOC)){ $rows[] = $r; } foreach($rows as $row){ ?> <h1><?php echo $row['title']; ?></h1> <p><?php echo $row['text']; ?></p> <h3>Author: <?php echo $row['author']; ?></h3> <?php } }else{ echo "News not found"; } ?>
Все готово. Исходники можете скачать тут.
Здравствуйте,вы можете применить постраничный вывод к этому скрипту помогие пожалуйста
Большой спасибо за этого урока ! Здорово помогли . Удаче в Вашем работе !