В данной статье я попытаюсь помочь начинающим программистам создать свой первый проект. Сегодня мы будем писать самый простой и быстрый движок блога.
Начнем с базы данных. Я считаю, что самым оптимальным вариантом будет mysql. Создадим через phpmyadmin новую таблицу со следующими полями: id (уникальный номер статьи), title (заголовок статьи), date (дата добавления статьи), content (текст статьи). Чтобы Вы не теряли время, я собрал sql запрос:
Давайте теперь добавим несколько записей для того, чтобы в дальнейшем мы смогли проверить работоспособность скрипта.
В первой части мы напишем скрипт, который будет выводит главную страницу со свежими статьями и сделаем постраничную навигацию.
Создадим конфигурационный файл, чтобы в будущем Вы всегда смогли изменить настройки блога. Я буду использовать ini файл т.к. такой способ оказался быстрым и удобным. Подробнее о файлах настроек Вы можете прочитать в интересной статье «Самые быстрые настройки для PHP-скриптов». Наш файл будет содержать следующие строки:
Сохраняем файл и даем ему произвольное название, я назвал просто — config.ini.
Приступаем к написанию главной страницы блога. Сначала нам предстоит собрать html каркас. За одно создадим файл стилей.
index.php
style.css
Создадим еще один файл, в котором будет прописано подключение к базе данных, дадим ему имя con.php.
Теперь к индексному файлу подключим con.php и начнем писать запрос к базе данных для выборки свежих новостей.
Как вы уже заметили, мы и тут использовали наш файл настроек.
Теперь займемся выводом полученной информации. В нужном месте шаблона прописываем цикл:
Настало время попробовать сделать постраничную навигацию.
Вверху index.php, после подключения con.php, следует вставить следующие строки для того, чтобы узнать количество статей на сайте и общее количество страниц:
Проверяем, не передавал ли пользователь номер страницы и переделываем наш запрос.
Для проверки данного скрипта, вы можете в файле настроек заменить pp = 5 на pp = 1, чтобы на страницу выводилась только одна статья.
Осталось добавить кнопки навигации. Сразу после тега article пропишем:
И не забудьте добавить стиль для данных ссылок. Давайте сделаем их в виде кнопок:
Для тех, кто не разобрался в коде главной страницы, выкладываю его сюда:
Начнем с базы данных. Я считаю, что самым оптимальным вариантом будет mysql. Создадим через phpmyadmin новую таблицу со следующими полями: id (уникальный номер статьи), title (заголовок статьи), date (дата добавления статьи), content (текст статьи). Чтобы Вы не теряли время, я собрал sql запрос:
CREATE TABLE `blog` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`title` CHAR( 200 ) NOT NULL ,
`date` DATE NOT NULL ,
`content` TEXT NOT NULL
) ENGINE = MYISAM ;
Давайте теперь добавим несколько записей для того, чтобы в дальнейшем мы смогли проверить работоспособность скрипта.
INSERT INTO `blog` (`id`, `title`, `date`, `content`) VALUES
(1, 'Моя первая статья', '2011-09-01', '<p>Первая статья.</p>'),
(2, 'Вторая статья', '2011-09-08', '<p>Вот и вторая статья</p>'),
(3, 'Третья статья', '2011-09-09', '<p>Третья статья.</p>'),
(4, 'Четвертая статья', '2011-09-20', '<p>Да, это четвертая статья.</p>');
В первой части мы напишем скрипт, который будет выводит главную страницу со свежими статьями и сделаем постраничную навигацию.
Создадим конфигурационный файл, чтобы в будущем Вы всегда смогли изменить настройки блога. Я буду использовать ini файл т.к. такой способ оказался быстрым и удобным. Подробнее о файлах настроек Вы можете прочитать в интересной статье «Самые быстрые настройки для PHP-скриптов». Наш файл будет содержать следующие строки:
#Настройки базы данных
mysql_host = localhost
mysql_user = root
mysql_password = 12345
mysql_database = blog
#Количество статей на страницу
pp = 5
Сохраняем файл и даем ему произвольное название, я назвал просто — config.ini.
Приступаем к написанию главной страницы блога. Сначала нам предстоит собрать html каркас. За одно создадим файл стилей.
index.php
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8" />
<title>Мой блог</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<header>
<!-- шапка блога -->
</header>
<article>
<!-- content -->
</article>
<body>
</html>
style.css
* {
font-family: Arial, Helvetica, sans-serif;
}
/* Блоки */
header {
width:850px;
height:200px;
margin:5px auto;
border-radius:6px;
background:white url('i/bg.jpg') no-repeat top left; /* можете скачать картинку в интернете */
}
article {
width:850px;
height:auto;
margin:auto;
}
article section {
border-bottom:1px dashed #BDECFE;
}
article section h2 {
color:#41738A;
font-size:17pt;
}
article section p {
font-size:10pt;
}
article section p.date {
font-size:9pt;
color:#516168;
text-align:right;
margin-bottom:0px;
padding-bottom:0px;
}
Создадим еще один файл, в котором будет прописано подключение к базе данных, дадим ему имя con.php.
<?php
$conf = parse_ini_file('config.ini');
mysql_connect($conf['mysql_host'],$conf['mysql_user'],$conf['mysql_password']) or die('Ошибка подключения к базе данных');
mysql_select_db($conf['mysql_database']) or die('Ошибка подключения к базе данных');
?>
Теперь к индексному файлу подключим con.php и начнем писать запрос к базе данных для выборки свежих новостей.
$otvet = mysql_query('SELECT * FROM `blog` ORDER BY `date` DESC LIMIT '. $conf['pp']);
Как вы уже заметили, мы и тут использовали наш файл настроек.
Теперь займемся выводом полученной информации. В нужном месте шаблона прописываем цикл:
while($row = mysql_fetch_assoc($otvet)){
echo "<section>
<h2>{$row['title']}</h2>
{$row['content']}
<p class=\"date\">{$row['date']}</p>
</section>";
}
Настало время попробовать сделать постраничную навигацию.
Вверху index.php, после подключения con.php, следует вставить следующие строки для того, чтобы узнать количество статей на сайте и общее количество страниц:
$counter = mysql_query('SELECT COUNT(`id`) FROM `blog`');
$counter = mysql_fetch_array($counter);
//Теперь у нас в $counter[0] количество статей на сайте
$pages = (int) ($counter[0] - 1) / $conf['pp']) + 1; // количество страниц
Проверяем, не передавал ли пользователь номер страницы и переделываем наш запрос.
if( isset($_GET['page'])) {
// Да, пользователь что-то передал
$page = (int) $_GET['page'];
if ( $page > 0 && $page <= $pages ) {
// Если переданное значение больше нуля и не привышает общее количество страниц
// Вычисляем с какого номера статьи надо начинать выводить
$start = $page * $conf['pp'] - $conf['pp'];
$sql = "SELECT * FROM `blog` ORDER BY `date` DESC LIMIT {$start}, {$conf['pp']}";
}
else {
$sql = 'SELECT * FROM `blog` ORDER BY `date` DESC LIMIT '. $conf['pp'];
$page = 1;
}
}
else {
$sql = 'SELECT * FROM `blog` ORDER BY `date` DESC LIMIT '. $conf['pp'];
$page = 1;
}
$otvet = mysql_query($sql);
Для проверки данного скрипта, вы можете в файле настроек заменить pp = 5 на pp = 1, чтобы на страницу выводилась только одна статья.
Осталось добавить кнопки навигации. Сразу после тега article пропишем:
<nav>
<?php
if( $page > 1 ) echo '<a href="index.php?page='.($page-1).'">← туда</a>';
if( $page < $pages ) echo '<a href="index.php?page='.($page+1).'">туда →</a>';
?>
</nav>
И не забудьте добавить стиль для данных ссылок. Давайте сделаем их в виде кнопок:
nav {
width:850px;
height:auto;
margin:10px auto;
text-align:center;
}
nav a {
padding:2px;
background-color:#EFEFEF;
border:1px solid #D5C2C2;
text-decoration:none;
color:black;
font-size:10pt;
margin:2px;
border-radius:5px;
}
Для тех, кто не разобрался в коде главной страницы, выкладываю его сюда:
<?php
require_once dirname(__FILE__).'/con.php';
$counter = mysql_query('SELECT COUNT(`id`) FROM `blog`');
$counter = mysql_fetch_array($counter);
$pages = intval( ($counter[0] - 1) / $conf['pp']) + 1;
if( isset($_GET['page'])) {
// Да, пользователь что-то передал
$page = (int) $_GET['page'];
if ( $page > 0 && $page <= $pages ) {
// Вычисляем с какого номера статьи надо начинать выводить
$start = $page * $conf['pp'] - $conf['pp'];
$sql = "SELECT * FROM `blog` ORDER BY `date` DESC LIMIT {$start}, {$conf['pp']}";
}
else {
$sql = 'SELECT * FROM `blog` ORDER BY `date` DESC LIMIT '. $conf['pp'];
$page = 1;
}
}
else {
$sql = 'SELECT * FROM `blog` ORDER BY `date` DESC LIMIT '. $conf['pp'];
$page = 1;
}
$otvet = mysql_query($sql);
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8" />
<title>Мой блог</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<header>
<!-- шапка блога -->
</header>
<article>
<!-- content -->
<?php
while($row = mysql_fetch_assoc($otvet)){
echo "<section>
<h2>{$row['title']}</h2>
{$row['content']}
<p class=\"date\">{$row['date']}</p>
</section>";
}
?>
</article>
<nav>
<?php
if( $page > 1 ) echo '<a href="index.php?page='.($page-1).'">← туда</a>';
if( $page < $pages ) echo '<a href="index.php?page='.($page+1).'">туда →</a>';
?>
</nav>
<body>
</html>