
В данной статье я попытаюсь помочь начинающим программистам создать свой первый проект. Сегодня мы будем писать самый простой и быстрый движок блога.
Начнем с базы данных. Я считаю, что самым оптимальным вариантом будет mysql. Создадим через phpmyadmin новую таблицу со следующими полями: id (уникальный номер статьи), title (заголовок статьи), date (дата добавления статьи), content (текст статьи). Чтобы Вы не теряли время, я собрал sql запрос:
1 2 3 4 5 6 |
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 ; |
Давайте теперь добавим несколько записей для того, чтобы в дальнейшем мы смогли проверить работоспособность скрипта.
1 2 3 4 5 |
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 файл т.к. такой способ оказался быстрым и удобным.
Наш файл будет содержать следующие строки:
1 2 3 4 5 6 7 |
#Настройки базы данных mysql_host = localhost mysql_user = root mysql_password = 12345 mysql_database = blog #Количество статей на страницу pp = 5 |
Сохраняем файл и даем ему произвольное название, я назвал просто — config.ini.
Приступаем к написанию главной страницы блога. Сначала нам предстоит собрать html каркас. За одно создадим файл стилей.
index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<!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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
* { 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.
1 2 3 4 5 6 7 |
<?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 и начнем писать запрос к базе данных для выборки свежих новостей.
1 |
$otvet = mysql_query('SELECT * FROM `blog` ORDER BY `date` DESC LIMIT '. $conf['pp']); |
Как вы уже заметили, мы и тут использовали наш файл настроек.
Теперь займемся выводом полученной информации. В нужном месте шаблона прописываем цикл:
1 2 3 4 5 6 7 |
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, следует вставить следующие строки для того, чтобы узнать количество статей на сайте и общее количество страниц:
1 2 3 4 |
$counter = mysql_query('SELECT COUNT(`id`) FROM `blog`'); $counter = mysql_fetch_array($counter); //Теперь у нас в $counter[0] количество статей на сайте $pages = (int) ($counter[0] - 1) / $conf['pp']) + 1; // количество страниц |
Проверяем, не передавал ли пользователь номер страницы и переделываем наш запрос.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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 пропишем:
1 2 3 4 5 6 |
<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> |
И не забудьте добавить стиль для данных ссылок. Давайте сделаем их в виде кнопок:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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; } |
Для тех, кто не разобрался в коде главной страницы, выкладываю его сюда:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
<?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> |
www.onlinevse.ru — мы создаём настроение.