В этой статье я хочу рассказать вам как создать на 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
В разделе администратора должна быть проверка логина и пароля администратора (авторизация) а так же возможность добавлять, исправлять или удалять новости и добавлять к ним фотографии. Рассмотрим это модуль:
<?
/*
Written by FiLLiN(c) 2004
All rights reserve
FiLLiN@netman.ru
*/
/**************************************************
* Function authForm() - return authorization form
**************************************************/
function authForm(){
$main = "
<form name='auth' method='post' action='administrating.php'>
<p>
Введите имя пользователя и пароль.
</p>
Login: <br>
<input type=text class='smalltext' name='login' value=''>
<br>
<br>
Пароль: <br>
<input type=password class='smalltext' name='passwd' value=''>
<br>
<br>
<input type=hidden name='type' value='send'>
<input type=submit class='button' name='submit' value='Войти'>
</form>
";
return $main;
}
/**************************************************
* Function newsForm() - return news form
**************************************************/
function newsForm($vars){
@$id = $vars["id"];
@$type = $vars["type"];
@$author = $vars["author"];
@$subject = $vars["subject"];
@$shortCont = $vars["shortCont"];
@$news = $vars["news"];
$form = "
<form name='$type' method='post' action='administrating.php' enctype='multipart/form-data'>
<p>
Тема
</p>
<textarea name='subject' cols='60' rows='2' class=textarea>$subject</textarea>
<p>
Краткое содержание новости
</p>
<textarea name='shortCont' cols='60' rows='4' class=textarea>$shortCont</textarea>
<p>
Новость
</p>
<textarea name='news' cols='60' rows='8' class=textarea>$news</textarea>
<p>
Автор(источник)
</p>
<input type='text' class='text' name='author' value='$author'>
<br>
<br>
<input type=hidden name='type' value='$type'>
<input type=hidden name='id' value='$id'>
<input type=submit class='button' name='submit' value=' Ok '>
</form>
";
return $form;
}
/**************************************************
* Function newsErrors() - test news-data
**************************************************/
function newsErrors($vars){
@$id = $vars["id"];
@$type = $vars["type"];
@$author = $vars["author"];
@$subject = $vars["subject"];
@$shortCont = $vars["shortCont"];
@$news = $vars["news"];
$errorCode = "";
if(strlen($author) > 255){
$errorCode .= "
<p> * Длинна поля АВТОР(ИСТОЧНИК) не должна превышать 255 символов<p>
";
}
if(strlen($subject) > 255){
$errorCode .= "
<p> * Длинна поля ТЕМА не должна превышать 255 символов<p>
";
}
return $errorCode;
}
/**************************************************
* Include files
**************************************************/
include("../inc/template.inc");
include("../inc/vars.php");
/**************************************************
* Import external variables
**************************************************/
$EXT_VARS = importVars();
/**************************************************
* 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";
}
/**************************************************
* MAIN PROGRAMM BODY
**************************************************/
/* COMON ACTIONS */
comonActions();
$t = new Template("./template", "remove");
$t->set_file(array("file" => "template.html"));
// in template define several variables:
// - {MAIN} - основная колонка, содержит осн. контент
// - {ADDITIONAL} - дополнительная колонка с новостями и прочее
// - {KEYWORDS} - ключевые слова
// - {DESCRIPTIONS} - описание
// - {TITLE} - заголовок страницы
/* fill content */
/* TITLE */
$title = "";
$title .= comonTitle();
/* KEYWORDS */
$keywords = "";
$keywords .= comonKeywords();
/* DESCRIPTION */
$description = "";
$description .= comonDescriptions();
/* MAIN */
$main = "";
$main .= "
<a href='administrating.php?type=main'>Список новостей</a>
|
<a href='administrating.php?type=add_form'>Добавить новую</a>
|
<a href='administrating.php?type=exit'>Выход</a>
<hr>
";
/* ADDITIONAL */
$additional = "";
$additional .= additionalInfoComon();
/**************************************************
* Authorization
**************************************************/
if($authPrice = @testAuth()){ // если пользователь уже авторизовался
@$type = $HTTP_POST_VARS["type"];
if($type == ''){
@$type = $HTTP_GET_VARS["type"];
}
if($type == ''){
$type = "main";
//echo "$type";
}
//$main .= "auth";
}else{ // if user don't authorize else
//$main .= "not auth";
@$type = $HTTP_POST_VARS["type"]; // test if login and pass already send
if($type == "send"){
$type = "send";
}else{
$type = "";
}
}
/**************************************************
* DEFINE TYPE OF WORK
**************************************************/
switch($type){
case "send":
/* if user tray to authorize (send login and password) */
@$login = $HTTP_POST_VARS["login"];
@$passwd = $HTTP_POST_VARS["passwd"];
/* test login and password */
if(($login == $LOGIN and $passwd == $PASSWD) OR ($login == $U_LOGIN and $passwd == $U_PASSWD)){
$auth = setAuth();
if($authPrice = testAuth()){
//echo"111";
}else{
//echo"000";
}
//$auth = setAuth();
//$main .= $auth;
@header("LOCATION:administrating.php");
}else{
$main .= "
<p>
<font color = 'red'>
Вы ввели неправильное имя пользователя или пароль, попробуйте
снова!
</font>
</p>
";
$main .= authForm();
}
break;
case "main":
/* main auth page */
$main .= "
<h3 align='center'>
Администрирование ленты новостей.
</h3>
";
@$page = (int)$EXT_VARS["page"];
$query = "
SELECT
id , date , subject , shortCont , news , author
FROM tblNews ORDER BY id DESC
";
$result = mysql_query($query);
$newsCount = mysql_num_rows($result);
$startNew = $page * $NUM_NEWS;
$endNew = $startNew + $NUM_NEWS;
if($newsCount < $endNew){
$endNew = $newsCount;
}
for($i = $startNew ; $i < $endNew; $i++){
$id = mysql_result($result , $i , 0);
$date = mysql_result($result , $i , 1);
$subject = mysql_result($result , $i , 2);
$shortCont = mysql_result($result , $i , 3);
$news = mysql_result($result , $i , 4);
$author = mysql_result($result , $i , 5);
$main .= "
<a href = 'administrating.php?type=options&id=$id'>
<b>[$date] - $subject</b>
<br>
$shortCont
</a>
<br><br>
";
}
/* define number of pages */
$pagesCount = (int)($newsCount / $NUM_NEWS) + 1;
if(($newsCount % $NUM_NEWS) > 0){
$pagesCount += 1;
}
/* Печатаем если есть возможность стр. "Назад" */
$main .= "
<p> <b>Страницы: </b>
";
if($page > 0){
$pageBefore = $page-1;
$main .= "
<a href = 'administrating.php?type=main&page=$pageBefore'>...Назад</a>
";
}
/* Ссылка на текущую страницу */
$curPageText = $page + 1;
$main .= "
| <a href='administrating.php?type=main&page=$page'><b>$curPageText</b></a>
";
/* Ссылки на 10 страниц вперед */
$startPageLink = $page + 1;
$endPageLink = $startPageLink + 10;
if($endPageLink > ($pagesCount - 1)){
$endPageLink = $pagesCount - 1;
}
for($i = $startPageLink; $i < $endPageLink; $i++){
$pageText = $i + 1;
$main .= "
| <a href='administrating.php?type=main&page=$i'>$pageText</a>
";
}
/* Ссылка на следующую страницу */
if($page < ($pagesCount - 2)){
$pageNext = $page + 1;
$main .= "
| <a href = 'administrating.php?type=main&page=$pageNext'>Вперед...</a>
";
}
$main .="
</p>
";
break;
case "exit":
/* destroy authorization */
destroyAuth();
@header("LOCATION: administrating.php");
break;
case "add_form": // Форма для добавления новой новости
$main .= "
<h3>Добавление новостей</h3>
";
$vars["type"] = "add";
$main .= newsForm($vars);
break;
case "add": // Добавление новости
@$id = $EXT_VARS["id"];
@$type = $EXT_VARS["type"];
@$author = $EXT_VARS["author"];
@$subject = $EXT_VARS["subject"];
@$shortCont = $EXT_VARS["shortCont"];
@$news = $EXT_VARS["news"];
$vars["id"] = $id;
$vars["type"] = $type;
$vars["author"] = $author;
$vars["subject"] = $subject;
$vars["shortCont"] = $shortCont;
$vars["news"] = $news;
/* Test errors */
$errorCode = newsErrors($vars);
if($errorCode != ""){
$main .= $errorCode;
$main .= newsForm($vars);
break;
}
/* Add new */
$date = date("Y-m-d");
$query = "
INSERT INTO tblNews
(date , author , subject , shortCont , news)
VALUES ('$date' , '$author' , '$subject' , '$shortCont' , '$news')
";
$result = mysql_query($query);
$main .= "
<h3>Новость добавлена</h3>
<a href = 'administrating.php?type=add_form'>Добавить еще</a>
";
break;
case "options": // Настройки тукущей новости
@$id = (int)$EXT_VARS["id"];
$query = "
SELECT
id , date , subject , shortCont , news , author, photo
FROM tblNews WHERE id = $id
";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0){
$id = mysql_result($result , 0 , 0);
$date = mysql_result($result , 0 , 1);
$subject = mysql_result($result , 0 , 2);
$shortCont = mysql_result($result , 0 , 3);
$news = mysql_result($result , 0 , 4);
$author = mysql_result($result , 0 , 5);
$photo = mysql_result($result , 0 , 6);
$vars["id"] = $id;
$vars["type"] = "update";
$vars["author"] = $author;
$vars["shortCont"] = $shortCont;
$vars["news"] = $news;
$vars["subject"] = $subject;
$main .= newsForm($vars);
$main .= "
<p>
<a href = 'administrating.php?type=delete&id=$id'>Удалить новость</a>
</p>
";
if($photo != ""){
$main .= "
<h1>Фотография новости:</h1>
<p>
<b>
<a href='/news/photos/$photo'>$photo</a>
<a href='administrating.php?type=delete_photo&id=$id'>Удалить</a>
</b>
</p>
";
}
$main .= "
<p><b>Добавить (изменить) фотографию:</b></p>
<form name=\"addPhoto\" method=\"post\" action=\"administrating.php\" enctype=\"multipart/form-data\">
<input type=\"hidden\" name=\"id\" value='$id'>
<input type=\"hidden\" name=\"type\" value='add_photo'>
<input type=\"file\" name=\"fileName\" class='text'>
<br><br>
<input type=\"submit\" name=\"submit\" value=\"Добавить фотографию\" class=\"button\">
</form>
<hr>
";
}
break;
case "update": // Обновление
@$id = $EXT_VARS["id"];
@$type = $EXT_VARS["type"];
@$author = $EXT_VARS["author"];
@$subject = $EXT_VARS["subject"];
@$shortCont = $EXT_VARS["shortCont"];
@$news = $EXT_VARS["news"];
$vars["id"] = $id;
$vars["type"] = $type;
$vars["author"] = $author;
$vars["subject"] = $subject;
$vars["shortCont"] = $shortCont;
$vars["news"] = $news;
/* Test errors */
$errorCode = newsErrors($vars);
if($errorCode != ""){
$main .= $errorCode;
$main .= newsForm($vars);
break;
}
/* Update new */
$query = "
UPDATE tblNews SET
author = '$author' ,
subject = '$subject' ,
shortCont = '$shortCont' ,
news = '$news'
WHERE id = $id
";
$result = mysql_query($query);
$main .= "
<h3>Изменения приняты</h3>
<p><a href='administrating.php?type=options&id=$id'>Просмотреть новость</a></p>
<p><a href='administrating.php?type=main'>Вернуться к списку новостей</a></p>
";
break;
case "delete": // Удаление
@$id = $EXT_VARS["id"];
$result = mysql_query("
SELECT photo FROM tblNews WHERE id = $id
");
$photo = mysql_result($result , 0 , 0);
if($photo != ""){
unlink("photos/$photo");
}
$query = "
DELETE FROM tblNews WHERE id = $id
";
$result = mysql_query($query);
$main .= "
<h3>Новость удалена</h3>
<p><a href='administrating.php?type=main'>Вернуться к списку новостей</a></p>
";
break;
case "delete_photo": // Удаление
@$id = $EXT_VARS["id"];
$result = mysql_query("
SELECT photo FROM tblNews WHERE id = $id
");
$photo = mysql_result($result , 0 , 0);
if($photo != ""){
unlink("photos/$photo");
}
$result = mysql_query("
UPDATE tblNews SET photo='' WHERE id=$id
");
$main .= "
<h3>Фотография удалена!</h3>
<a href=# onClick=\"history.go(-1)\"><b>Вернуться назад</b></a>
";
break;
case "add_photo":
$id = $EXT_VARS["id"];
$fileName = $HTTP_POST_FILES["fileName"];
/* if photo exist - delete it */
$result = mysql_query("
SELECT photo FROM tblNews WHERE id = $id
");
$photo = mysql_result($result , 0 , 0);
if($photo != ""){
unlink("photos/$photo");
}
/* COPY FILE */
$partsFileName = split("\." , $fileName["name"]);
$endPart = $partsFileName[count($partsFileName) - 1];
$realFileName = "$id.$endPart";
$tmpFileName = $fileName["tmp_name"];
// this is for localHost
//copy($tmpFileName , "http://www.rustikal.nsk.su/".$realFileName);
if (is_uploaded_file($HTTP_POST_FILES['fileName']['tmp_name'])){
move_uploaded_file($HTTP_POST_FILES['fileName']['tmp_name'] , "photos/".$realFileName);
chmod("photos/$realFileName", 0755);
}else{
$main .= "По непонятным причинам фотография не может быть добавлена...";
}
/* ADD INFO TO DB */
$result = mysql_query("
UPDATE tblNews
SET photo = '$realFileName'
WHERE id = $id
");
$main .= "
Фотография добавлена
<a href=# onClick=\"history.go(-1)\"><b>Вернуться назад</b></a>
";
break;
default:
/* return authorize form */
$main .= authForm();
break;
};
/* end fill content */
$t->set_var(array("MAIN" => $main , "ADDITIONAL" => $additional ,
"KEYWORDS" => $keywords , "DESCRIPTIONS" => $description ,
"TITLE" => $title
));
$t->pparse("out" , "file");
?>
Вы сможете легко во всем разобраться, так как в файле присутствуют все необходимые коментарии!
С самым сложным, мы разобрались – мы создали модуль администрирования новостей для нашего сайта. Теперь добавим парочку тройку новостей и перейдем к написанию клиентской части!
Клиентская часть /news/index.php
Наша клиентская часть должна выводить список всех новостей, разбивая его на страницы, в соответствии с датой новости, а так же в случае выбора конкретной новости – показывать ее целиком с фотографией. Что ж, приступим:
<?
/*
Written by FiLLiN(c) 2004
All rights reserve
FiLLiN@netman.ru
*/
include("../inc/template.inc");
include("../inc/vars.php");
/**************************************************
* Import external variables
**************************************************/
$EXT_VARS = importVars();
/**************************************************
* 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";
}
/**************************************************
* Main Program body
****************************************************/
/* COMON ACTIONS */
comonActions();
$t = new Template("./template", "remove");
$t->set_file(array("file" => "template.html"));
// in template define several variables:
// - {MAIN} - основная колонка, содержит осн. контент
// - {ADDITIONAL} - дополнительная колонка с новостями и прочее
// - {KEYWORDS} - ключевые слова
// - {DESCRIPTIONS} - описание
// - {TITLE} - заголовок страницы
/* fill content */
/* TITLE */
$title = "Новости - ";
$title .= comonTitle();
/* KEYWORDS */
$keywords = "Лента новостей. ";
$keywords .= comonKeywords();
/* DESCRIPTION */
$description = "Лента новостей компании - ";
$description .= comonDescriptions();
/* MAIN */
$main = "
<table width=100% height=71 border=0 cellpadding=00 cellspacing=0 background='img/main_head.gif'><tr>
<td width=30></td>
<td>
<b style='font-size:16px; color:444444;'>Новости:</b>
</td></tr></table>
<table width='100%' border='0' cellspacing='0' cellpadding='0'>
<tr>
<td width='30'> </td>
<td><br>
";
/* ADDITIONAL */
$additional = "";
$additional .= additionalInfoComon();
/**************************************************
* DEFINE TYPE OF WORK
**************************************************/
@$type = $EXT_VARS["type"];
switch($type){
case "show": // Print new
@$id = (int)$EXT_VARS["id"];
$query = "
SELECT
id , date , subject , shortCont , news , author , photo
FROM tblNews WHERE id = $id
";
$result = mysql_query($query);
/* Печатаем новость */
if(mysql_num_rows($result) > 0){
$id = mysql_result($result , 0 , 0);
$date = mysql_result($result , 0 , 1);
$subject = mysql_result($result , 0 , 2);
$shortCont = mysql_result($result , 0 , 3);
$news = mysql_result($result , 0 , 4);
$author = mysql_result($result , 0 , 5);
$photo = mysql_result($result , 0 , 6);
$keywords = $title = $subject;
$description = $shortCont;
if($photo != ""){
@$size = getimagesize("photos/$photo");
/**/
@$height = $size[1];
@$width = $size[0];
if($width > 400){
$height = ($height*400/$width);
$width = 400;
}
@$photoStr = "
<p align=center>
<table border=1 bordercolor=9999ff>
<tr>
<td bordercolor=ffffff>
<img src='photos/$photo' border=0 height=$height width=$width alt=\"$subject\">
</td>
</tr>
</table>
</p>
";
}else {
$photoStr = "";
}
$main .= "
<h1> $subject </h1>
<p align = 'justify'>
<b>
[$date]
</b>
<i>
- $shortCont
</i>
</p>
$photoStr
<p align = 'justify'>
$news
</p>
<p>
Автор(источник): <b>$author</b>
</p>
";
}
$main .= "
<br>
<br>
<br>
<p>
";
/* Ссылка на предыдущую новость */
$prevId = $id - 1;
$result = mysql_query("SELECT * FROM tblNews WHERE id = $prevId");
if(mysql_num_rows($result) > 0){
$main .= "
<a href = 'index.php?type=show&id=$prevId'> << </a>
";
}
/* Ссылка возврата в новости */
$main .= "
|
<a href = 'index.php'>список</a>
|
";
/* Ссылка на следующую новость */
$nextId = $id + 1;
$result = mysql_query("SELECT * FROM tblNews WHERE id = $nextId");
if(mysql_num_rows($result) > 0){
$main .= "
<a href = 'index.php?type=show&id=$nextId'> >> </a>
";
}
$main .= "
</p>
";
break;
default: // Output list of news
@$page = (int)$EXT_VARS["page"];
$query = "
SELECT id , date , subject , shortCont , news , author
FROM tblNews ORDER BY id DESC
";
$result = mysql_query($query);
$newsCount = mysql_num_rows($result);
$startNew = $page * $NUM_NEWS;
$endNew = $startNew + $NUM_NEWS;
if($newsCount < $endNew){
$endNew = $newsCount;
}
for($i = $startNew ; $i < $endNew; $i++){
$id = mysql_result($result , $i , 0);
$date = mysql_result($result , $i , 1);
$subject = mysql_result($result , $i , 2);
$shortCont = mysql_result($result , $i , 3);
$news = mysql_result($result , $i , 4);
$author = mysql_result($result , $i , 5);
$main .= "
<b>[$date]</b> <i>- $subject</i>
<br>
$shortCont
<br>
<a href = 'index.php?type=show&id=$id' title='$subject'>
подробнее...
</a>
<br><br>
";
}
/* define number of pages */
$pagesCount = (int)($newsCount / $NUM_NEWS) + 1;
if(($newsCount % $NUM_NEWS) > 0){
$pagesCount += 1;
}
/* Печатаем если есть возможность стр. "Назад" */
$main .= "
<p> <b>Страницы: </b>
";
if($page > 0){
$pageBefore = $page-1;
$main .= "
<a href = 'index.php?page=$pageBefore'>...Назад</a>
";
}
/* Ссылка на текущую страницу */
$curPageText = $page + 1;
$main .= "
| <a href='index.php?page=$page'><b>$curPageText</b></a>
";
/* Ссылки на 10 страниц вперед */
$startPageLink = $page + 1;
$endPageLink = $startPageLink + 10;
if($endPageLink > ($pagesCount - 1)){
$endPageLink = $pagesCount - 1;
}
for($i = $startPageLink; $i < $endPageLink; $i++){
$pageText = $i + 1;
$main .= "
| <a href='index.php?page=$i'>$pageText</a>
";
}
/* Ссылка на следующую страницу */
if($page < ($pagesCount - 2)){
$pageNext = $page + 1;
$main .= "
| <a href = 'index.php?page=$pageNext'>Вперед...</a>
";
}
$main .="
</p>
";
break;
}
$main .="
</td>
<td width='30'> </td>
</tr>
</table>
";
/* end fill content */
$t->set_var(array("MAIN" => $main , "ADDITIONAL" => $additional ,
"KEYWORDS" => $keywords , "DESCRIPTION" => $description ,
"TITLE" => $title
));
$t->pparse("out" , "file");
?>
Вы сможете легко во всем разобраться, так как в файле присутствуют все необходимые Коментарии!
Заключение
Вот собственно и все! Полторы тысячи строк РНР-кода и профессиональный раздел новостей готов!