PHP

Создаем раздел «Новости»

В этой статье я хочу рассказать вам как создать на 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&apos;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=&apos;auth&apos; method=&apos;post&apos; action=&apos;administrating.php&apos;>
          <p>
            Введите имя пользователя и пароль.
          </p>

          Login: <br>
          <input type=text class=&apos;smalltext&apos; name=&apos;login&apos; value=&apos;&apos;>
          <br>
          <br>
          Пароль: <br>
          <input type=password class=&apos;smalltext&apos; name=&apos;passwd&apos; value=&apos;&apos;>
          <br>
          <br>
          <input type=hidden  name=&apos;type&apos; value=&apos;send&apos;>
          <input type=submit class=&apos;button&apos; name=&apos;submit&apos; value=&apos;Войти&apos;>
       </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=&apos;$type&apos; method=&apos;post&apos; action=&apos;administrating.php&apos; enctype=&apos;multipart/form-data&apos;>
          <p>
            Тема
          </p>
          <textarea name=&apos;subject&apos; cols=&apos;60&apos; rows=&apos;2&apos; class=textarea>$subject</textarea>

          <p>
            Краткое содержание новости
          </p>
          <textarea name=&apos;shortCont&apos; cols=&apos;60&apos; rows=&apos;4&apos; class=textarea>$shortCont</textarea>

          <p>
            Новость
          </p>
          <textarea name=&apos;news&apos; cols=&apos;60&apos; rows=&apos;8&apos; class=textarea>$news</textarea>

          <p>
            Автор(источник)
          </p>
          <input type=&apos;text&apos; class=&apos;text&apos; name=&apos;author&apos; value=&apos;$author&apos;>
          <br>
          <br>
          <input type=hidden  name=&apos;type&apos; value=&apos;$type&apos;>
          <input type=hidden  name=&apos;id&apos; value=&apos;$id&apos;>
          <input type=submit class=&apos;button&apos; name=&apos;submit&apos; value=&apos;      Ok      &apos;>
       </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&apos;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=&apos;administrating.php?type=main&apos;>Список новостей</a>
       |
      <a href=&apos;administrating.php?type=add_form&apos;>Добавить новую</a>
       |
      <a href=&apos;administrating.php?type=exit&apos;>Выход</a>
    <hr>
 ";

 /*   ADDITIONAL   */


 $additional = "";
 $additional .= additionalInfoComon();





 /**************************************************
  *   Authorization
  **************************************************/



  if($authPrice = @testAuth()){ // если пользователь уже авторизовался
      @$type = $HTTP_POST_VARS["type"];
      if($type == &apos;&apos;){
         @$type = $HTTP_GET_VARS["type"];
      }
      if($type == &apos;&apos;){
         $type = "main";
         //echo "$type";
      }

      //$main .= "auth";


  }else{             // if user don&apos;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 = &apos;red&apos;>
                  Вы ввели неправильное имя пользователя или пароль, попробуйте
                  снова!
                 </font>
                </p>
              ";
              $main .= authForm();
         }

         break;


      case "main":

         /*   main auth page   */

         $main .= "
           <h3 align=&apos;center&apos;>
             Администрирование ленты новостей.
           </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 = &apos;administrating.php?type=options&id=$id&apos;>
                   <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 = &apos;administrating.php?type=main&page=$pageBefore&apos;>...Назад</a>
            ";
         }

         /*   Ссылка на текущую страницу   */

         $curPageText = $page + 1;
         $main .= "
               | <a href=&apos;administrating.php?type=main&page=$page&apos;><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=&apos;administrating.php?type=main&page=$i&apos;>$pageText</a>
             ";
         }

         /*   Ссылка на следующую страницу   */


         if($page < ($pagesCount - 2)){
            $pageNext = $page + 1;
            $main .= "
              | <a href = &apos;administrating.php?type=main&page=$pageNext&apos;>Вперед...</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 (&apos;$date&apos; , &apos;$author&apos; , &apos;$subject&apos; , &apos;$shortCont&apos; , &apos;$news&apos;)
         ";

         $result = mysql_query($query);

         $main .= "
           <h3>Новость добавлена</h3>

           <a href = &apos;administrating.php?type=add_form&apos;>Добавить еще</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 = &apos;administrating.php?type=delete&id=$id&apos;>Удалить новость</a>
                  </p>
              ";

              if($photo != ""){

                 $main .= "

                 <h1>Фотография новости:</h1>
                 <p>
                   <b>
                     <a href=&apos;/news/photos/$photo&apos;>$photo</a>
                           
                     <a href=&apos;administrating.php?type=delete_photo&id=$id&apos;>Удалить</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=&apos;$id&apos;>
               <input type=\"hidden\" name=\"type\" value=&apos;add_photo&apos;>
               <input type=\"file\" name=\"fileName\" class=&apos;text&apos;>
               <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 = &apos;$author&apos; ,
              subject = &apos;$subject&apos; ,
              shortCont = &apos;$shortCont&apos; ,
              news = &apos;$news&apos;
             WHERE id = $id

         ";

         $result = mysql_query($query);

         $main .= "
           <h3>Изменения приняты</h3>
           <p><a href=&apos;administrating.php?type=options&id=$id&apos;>Просмотреть новость</a></p>
           <p><a href=&apos;administrating.php?type=main&apos;>Вернуться к списку новостей</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=&apos;administrating.php?type=main&apos;>Вернуться к списку новостей</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=&apos;&apos; 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[&apos;fileName&apos;][&apos;tmp_name&apos;])){

             move_uploaded_file($HTTP_POST_FILES[&apos;fileName&apos;][&apos;tmp_name&apos;] , "photos/".$realFileName);
             chmod("photos/$realFileName", 0755);

         }else{

             $main .= "По непонятным причинам фотография не может быть добавлена...";

         }

         /*   ADD INFO TO DB   */

         $result = mysql_query("
                  UPDATE tblNews
                  SET photo = &apos;$realFileName&apos;
                  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&apos;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=&apos;img/main_head.gif&apos;><tr>
    <td width=30></td>
    <td>
    <b style=&apos;font-size:16px; color:444444;&apos;>Новости:</b>
    </td></tr></table>
    <table width=&apos;100%&apos; border=&apos;0&apos; cellspacing=&apos;0&apos; cellpadding=&apos;0&apos;>
                      <tr>
                        <td width=&apos;30&apos;> </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=&apos;photos/$photo&apos;   border=0 height=$height width=$width alt=\"$subject\">
                        </td>
                        </tr>
                       </table>
                    </p>
                   ";


              }else {
                  $photoStr = "";
              }

              $main .= "
                <h1> $subject </h1>
                <p align = &apos;justify&apos;>
                  <b>
                    [$date]
                  </b>
                  <i>
                    - $shortCont
                  </i>
                </p>
                       $photoStr

                <p align = &apos;justify&apos;>
                  $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 = &apos;index.php?type=show&id=$prevId&apos;> << </a>
             ";
         }

         /*   Ссылка возврата в новости   */

         $main .= "
                |
                <a href = &apos;index.php&apos;>список</a>
                |
         ";

         /*   Ссылка на следующую новость   */

         $nextId = $id + 1;

         $result = mysql_query("SELECT * FROM tblNews WHERE id = $nextId");

         if(mysql_num_rows($result) > 0){
             $main .= "
                <a href = &apos;index.php?type=show&id=$nextId&apos;> >> </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 = &apos;index.php?type=show&id=$id&apos; title=&apos;$subject&apos;>
                     подробнее...
                   </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 = &apos;index.php?page=$pageBefore&apos;>...Назад</a>
            ";
         }

         /*   Ссылка на текущую страницу   */

         $curPageText = $page + 1;
         $main .= "
               | <a href=&apos;index.php?page=$page&apos;><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=&apos;index.php?page=$i&apos;>$pageText</a>
             ";
         }

         /*   Ссылка на следующую страницу   */


         if($page < ($pagesCount - 2)){
            $pageNext = $page + 1;
            $main .= "
              | <a href = &apos;index.php?page=$pageNext&apos;>Вперед...</a>
            ";
         }


         $main .="
           </p>
         ";

         break;

  }

  $main .="
     </td>
                        <td width=&apos;30&apos;> </td>
                      </tr>
                    </table>
  ";


 /*   end fill content   */



 $t->set_var(array("MAIN" => $main , "ADDITIONAL" => $additional ,
   "KEYWORDS" => $keywords , "DESCRIPTION" => $description ,
   "TITLE" => $title
 ));
 $t->pparse("out" , "file");

?>

Вы сможете легко во всем разобраться, так как в файле присутствуют все необходимые Коментарии!

Заключение

Вот собственно и все! Полторы тысячи строк РНР-кода и профессиональный раздел новостей готов!
Добавлено: 01 Января 2015 15:28:55 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...