Создаем раздел «Новости»
В этой статье я хочу рассказать вам как создать на php и базе данных MySQL
создать раздел «Новости» для своего сайта. В написании раздела Новостей нет
ничего сложного – тут главное, как и в любом другом проекте написать ТЗ.
Итак: определимся с тем, что мы хотим от раздела Новостей.
- Раздел «Новости» должен находиться в папке «/news/» относительно корневого
каталога сайта
- Новости должны характеризоваться следующими полями: «Дата», «Тема», «Краткое
содержание», «Новость», «Автор\источник»
- Новости должны иметь клиентскую часть. Клиентская часть должна выводить
новости в порядке обратном их добавлению (последний-первый) и разбивать их
на страницы по 20 новостей на страницу со ссылкой на предыдущую страницу,
следующую страницу и 10 страниц вперед. При клике на конкретную новость должна
выводиться новость полностью. В случае, если к новости была добавлена фотография,
то при просмотре новости должна выводиться фотография. Фотография должна в
случае необходимости подгоняться под ширину 400 пикселей (если она большей
ширины).
- У Новостей должен быть модуль администрирования – модуль администрирования
должен позволять администратору авторизоваться в системе вводя логин и пароль
администратора. Так же раздел администрирования должен предоставлять возможность
администратору добавлять новости либо изменять\удалять уже имеющиеся. Должна
быть возможность добавлять к новости фотографию. Должно быть разбитие имеющихся
новостей на страницы в соответствии с датой их добавления (последний-первый).
В общих чертах мы определились с техническим заданием. Теперь давайте спроектируем
архитектуру модуля. Предлагаю слудующую:
/inc/vars.php – файл в котором
объявлены основные переменные (константы) – они общие для всего сайта
/inc/template.inc – шаблонизатор
/news/photos/ - папка с фотографиями
новостей
/news/template/template.html –
дизайн шаблон
/news/install.php – файл инсталлирующий
базу данных
/news/index.php – клиентская часть
модуля новостей
/news/administrating.php – «админская»
часть модуля новостей
Думаю эта модель оптимально подходит под определение «модульность» сайта. К
каждому модулю «инклюдятся» базовые файлы /inc/vars.php
и /inc/template.inc. Шаблонизатор
тут я не выкладываю – так как вы можете использовать любой шаблонизатор. Дизайн-шаблон
так же не описывается – так как это может быть просто пустой файл, в котором
присутствует код {MAIN} – контент
и {TITLE} – заголовок страницы.
Приступим к написанию модуля. Для этого определим базовые переменные
Файл базовых переменных и функций /inc/vars.php
<?
// переменные базы данных
$DBAdress = "127.0.0.1";
$userName = "user";
$userPass = "pass";
$DBName = "my_db";
// логин, пароль администратора
$LOGIN = "admin";
$PASSWD = "111";
/**********************************************************
* AUTH functions – функции авторизации (для модуля администрирования)
* открывает сессию и помещает ее ИД в куку
* приравнивает переменной $auth значение «1» и помещает ее в сессию
*
**********************************************************/
function setAuth(){
$auth = 1;
@session_start();
session_register("auth");
global $HTTP_SESSION_VARS;
$HTTP_SESSION_VARS["auth"] = 1;
$PHPSESSID = session_id();
@setcookie("PHPSESSID" , "$PHPSESSID" , time() + 3600*24*3);
if(session_is_registered("auth")){
return $auth;
}
return 0;
}
/*
function testAuth() – проверяет была ли произведена авторизация в системе и
возвращает булевы значения
*/
function testAuth(){
@session_start();
global $HTTP_SESSION_VARS;
if (session_is_registered("authPrice")){
$auth = $HTTP_SESSION_VARS["auth"];
return 1;
}else{
session_destroy();
return 0;
}
}
/*
function destroyAuth() – уничтожает авторизацию пользователя
*/
function destroyAuth(){
session_start();
session_destroy();
@setcookie("PHPSESSID" , "1"
, time() - 60*60*24);
}
/********************************************************************************************************
* Function importVars(); - полезная функция, она объединяет переменыне переданные
* методами POST, GET в один массив
*********************************************************************************************************/
function importVars(){
global $HTTP_GET_VARS;
global $HTTP_POST_VARS;
$EXT_VARS[0] = 0;
while(list($key , $value) = each($HTTP_GET_VARS)){
$EXT_VARS[$key] = $value;
}
reset($HTTP_GET_VARS);
while(list($key , $value) = each($HTTP_POST_VARS)){
$EXT_VARS[$key] = $value;
}
reset($HTTP_POST_VARS);
return $EXT_VARS;
}
?>
Что ж, базовые переменные и функции, которые к слову нам пригодятся и для других
модулей нашего сайта мы определили. Теперь напишем инсталляционный скрипт (который
уже будет использовать наш «файл переменных»).
Инсталляционный файл /news/install.php
Этот файл создает в базе данных нужную нам таблицу. Файл крайне прост, поэтому
не будем останавливаться на его описании подробно – в нем всего лишь присоединяется
файл переменных, затем осуществляется установка соединения с базой данных, затем
создается нужная нам таблица, и потом закрывается соединение с БД – вот и все:
<?
/**************************************************
* Include files
**************************************************/
include "../inc/vars.php";
/**************************************************
* MySQL connect
**************************************************/
$pdb = mysql_connect($DBAdress , $userName ,
$userPass);
mysql_select_db($DBName , $pdb) or die("Can't select DB");
if(!$pdb){
echo "connect is not sucsesfull!\n";
}
/**************************************************
* Create Table tblNews
**************************************************/
$result = mysql_query("CREATE TABLE tblNews
( id integer PRIMARY KEY AUTO_INCREMENT,
date char(15),
subject char(255),
shortCont TEXT,
news TEXT,
photo char(255),
author char(255)
);");
mysql_close($pdb);
?>
Администрирование модуля Новостей /news/administrating.php
В разделе администратора должна быть проверка логина и пароля администратора
(авторизация) а так же возможность добавлять, исправлять или удалять новости
и добавлять к ним фотографии. Рассмотрим это модуль:
adm.zip - размер административного файла более 700 строк
кода, поэтому я вынес его в отдельный файл - скачав его, Вы сможете легко во
всем разобраться, так как в файле присутствуют все необходимые коментарии!
С самым сложным, мы разобрались – мы создали модуль администрирования новостей
для нашего сайта. . Теперь добавим парочку тройку новостей и перейдем к написанию
клиентской части!
Клиентская часть /news/index.php
Наша клиентская часть должна выводить список всех новостей, разбивая его на
страницы, в соответствии с датой новости, а так же в случае выбора конкретной
новости – показывать ее целиком с фотографией. Что ж, приступим:
inxex.zip - размер клиентской чайсти более 400 строк
кода, поэтому я вынес его в отдельный файл - скачав его, Вы сможете легко во
всем разобраться, так как в файле присутствуют все необходимые коментарии!
Заключение
Вот собственно и все! Полторы тысячи строк РНР-кода и профессиональный раздел
новостей готов! Почему я называю его профессиональным? Последние 7 лет мое основное
занятие – разработка и создание сайтов в Новосибирске,
этот модуль новостей был создан 5 лет назад и установлен за это время более
чем на 50 сайтов – жалоб не было!
|