Итак: определимся с тем, что мы хотим от раздела Новостей.
- Раздел «Новости» должен находиться в папке «/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/instal.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); ? >
(P.S. убрать пробел ьужду знаками: < ? и ? > )
Этот файл создает в базе данных нужную нам таблицу. Файл крайне прост, поэтому не будем останавливаться на его описании подробно – в нем всего лишь присоединяется файл переменных, затем осуществляется установка соединения с базой данных, затем создается нужная нам таблица, и потом закрывается соединение с БД – вот и все.
Администрирование модуля Новостей /news/administrating.php
В разделе администратора должна быть проверка логина и пароля администратора (авторизация) а так же возможность добавлять, исправлять или удалять новости и добавлять к ним фотографии. Рассмотрим это модуль:
adm.zip - размер административного файла более 700 строк кода, поэтому я вынес его в отдельный файл - скачав его, Вы сможете легко во всем разобраться, так как в файле присутствуют все необходимые коментарии!
С самым сложным, мы разобрались – мы создали модуль администрирования новостей для нашего сайта. Теперь добавим парочку тройку новостей и перейдем к написанию клиентской части!
Клиентская часть /news/index.php
Наша клиентская часть должна выводить список всех новостей, разбивая его на страницы, в соответствии с датой новости, а так же в случае выбора конкретной новости – показывать ее целиком с фотографией. Что ж, приступим:
index.zip - размер клиентской чайсти более 400 строк кода, поэтому я вынес его в отдельный файл - скачав его, Вы сможете легко во всем разобраться, так как в файле присутствуют все необходимые коментарии!
Заключение
Вот собственно и все! Полторы тысячи строк РНР-кода и профессиональный раздел новостей готов!