Практическая работа № 20

Тема: Работа с базами данных MySQL. Создание новостного сайта

Цель работы: получить практические навыки по отображению данных из таблиц БД для организации простого новостного сайта

 

Ход работы

 

Пусть имеется БД "news" для хранения данных о новостях. В БД имеется две таблицы:

 

- razdel - для хранения названий разделов новостей (id_razdel, nazv_razdel);

- articles - для хранения статей новостей (id_article, id_razdel, data, author, title, intro, fulltext).

 

Необходимо создать страницу, которая в левой части в виде пунктов меню отображает названия разделов, а в правой перечень статей с указанием названия, даты и автора статьи; краткого содержания статьи и ссылки для чтения полного текста статьи.

 

Указания: вначале создадим PHP файл для подключения к БД. Для этого в новом файле введите текст:

 

<?  //подключаемся к серверу

    mysql_connect ('localhost','root','111') or die (mysql_error());

    //выбираем базу данных

    mysql_selectdb('news');

    //устанавливаем кодировку символов

    mysql_query('SET character_set_database = utf8');

    mysql_query('SET NAMES utf8'); ?>

 

В папке localhost/www создайте папку news и сохраните созданный файл в эту папку под именем connect.php

 

Создание главной страницы

 

Теперь создадим главный файл, который будет отображать структуру новостей на сайте.

Создайте новый HTML файл, в который введите код формирования содержимого:

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html lang="ru">

<head>

    <meta http-equiv="Content-Language" content="ru">

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <title>Новостной сайт</title>

</head>

<body>

    <div id="wrapper">

        <!--Блок заголовка сайта-->       

        <div id="title">Пример новостного сайта на PHP + MySQL</div>

        <!--Блок меню со списком разделов новостей-->       

        <div id="menu"><?include ('menu.php');?></div>

        <!--Основной блок со списком новостей-->     

        <div id="content">

        <?

            //подключаемся к БД

            include ('connect.php');

            //отбираем новости из таблицы

            $rez = mysql_query('select * from articles where id_razdel='.($_GET['idr']?$_GET['idr']:1));

            //в цикле построчно считываем записи из отобранного набора

            while ($row=mysql_fetch_assoc($rez))

            {

                //печатаем очередную строку таблицы с данными

                //поля помещаем в отдельный блок div с классом

                //для форматирования содержимого с помощью css

                echo '<div class="article">';

                echo '<div class="nazv">'.$row['title'].'</div>';

                echo '<div class="author">'.$row['author'].'&nbsp;'.$row['data'].'</div>';

                echo '<div class="text">'.$row['intro'].'</div>';

                //формируем ссылку для чтения полного текста новости

                //ссылка передает методом $_GET номер новости (id_article)

                echo '<div class="href"><a href="read.php?id='.$row['id_article'].'">Полный текст</a></div>';

                echo '</div>';

            }

        ?>

        </div>

        <!--Блок подвала сайта-->       

        <div id="footer">Практическая работа № 11 (новостной сайт)</div>

    </div>

</body>

</html>

 

Сохраните файл под именем index.php.

 

Создание блока с названием разделов

 

Как видно из текста страницы в блоке div#left подключается PHP файл для отображения списка разделов документа. Создайте новый документ и введите в него текст:

 

<?  //подключаемся к БД

    include ('connect.php');

    $rez = mysql_query('select * from razdel');

    //в цикле построчно считываем записи из отобранного набора

    while ($row=mysql_fetch_assoc($rez))

        //печатаем очередную строку таблицы с данными

        //при этом каждый раздел - этотгиперссылка,

        //которая через метод GET передает номер раздела (id_razdel)

        echo '<a href = "index.php?idr='.$row['id_razdel'].'">'.$row['nazv_razdel'].'</a></br>'; ?>

 

Сохраните файл под именем menu.php

 

Задание оформления страницы

 

Для оформления внешнего вида сайта добавьте в раздел head созданной страницы команду подключения таблицы стилей:

 

<link rel="stylesheet" href="css/style.css" />

 

В папке с сайтом создайте папку css, а в ней создайте файл style.css с текстом форматирования страницы:

 

/*отступы для всех блоков*/

*{

    margin: 0;

    padding: 0;

}

 

/*общие параметры для тела документа*/

body {

    background-color: lightgray;

    font-family: calibri;

    font-size: 18px;

}

 

/*параметры общего блока страницы*/

#wrapper {

    width:950px;

    margin:0 auto;

}

 

/*параметры блока заголовка*/

#title {

    text-align: center;

    font-size: 35px;

    color: brown;

    height:65px;

    background-color: darkorange;

    padding-top:25px;

    margin-bottom: 10px;

}

 

/*параметры блока с перечнем разделов*/

#menu {

    width: 200px;

    background-color: violet;

    float: left;

    text-align: center;

    line-height: 35px;

    margin-bottom: 10px;

    margin-right: 10px;

}

 

/*параметры блока для отображения текста новостей*/

#content {

    width: 740px;

    margin-left: 210px;

    margin-bottom: 10px;

}

 

/*стиль отображения всей новости*/

.article {

    border: 1px solid violet;

    margin-top:10px;

    background-color: #B5E7C2;

    padding: 10px;

    border-radius: 10px;

}

 

/*стиль отображения названия новости*/

.nazv {

    font-size: 24px;

    font-weight: bold;

    color: blue;

    padding-left: 40px;

}

 

/*стиль отображения автора и даты новости*/

.author {

    font-size: 12px;

    font-style: italic;

    padding-left: 20px;

}

 

/*стиль отображения текста новости*/

.text{

    font-size: 16px;

    text-indent: 40px;

}

 

/*стиль отображения гиперссылки новости*/

.href {

    font-size: 14px;

    text-align: right;

    color: green;

}

 

/*стиль блока подвала страницы*/

#footer {

    clear: both;

    background-color: violet;

    text-align: center;

    height: 22px;

    font-size: 14px;

    background-color: darkgray;

    color: white;

    padding-top: 8px;

}

 

Создание страницы для просмотра полной новости

 

Данная страница имеют ту же структуру, что и главная страница, только в разделе div#content отображается текст статьи, номер которой был передан странице с помощью параметра $_GET['id']

Сохраните страницу index.php под именем read.php. Откройте созданный файл и в блоке div#content удалите весь текст и добавьте команды:

 

<?  //подключаемся к БД

    include ('connect.php');

    //отбираем статью по ее номеру

    $rez = mysql_query('select * from articles where id_article='.$_GET['id']);

   

    //считываем найденную запись в переменную $rez

    $row=mysql_fetch_assoc($rez);

   

    //печатаем статью и другие параметры (название, дату и автора),

    //помещая их в блоки div для форматирования

    echo '<div class="article">';

    echo '<div class="nazv">'.$row['title'].'</div>';

    echo '<div class="author">'.$row['author'].'&nbsp;'.$row['data'].'</div>';

    echo '<div class="text">'.$row['fulltext'].'</div>';

    echo '</div>';

?>

 

Сохраните изменения на странице.

 

Создание колонок одинаковой высоты

 

Если просмотреть сайт, то видно, что высота колонок с меню и новостями разная. Для задания одинаковой высоты колонок воспользуемся возможностями JQuery. На сайте создайте папку script и поместите в нее файл JQuery.js (см. содержимое архива).

Откройте файл index.php. В раздел head добавьте текст вида:

 

<script src="script/jquery.js"></script>

<script type="text/javascript">

    $(function()

    {

        //если высота меню больше высоты контента   

        if ($('#menu').height()>$('#content').height())

            //контенту присваиваем высоту меню       

            $('#content').css('height',$('#menu').height())

        //иначе, делаем наоборот   

        else

            $('#menu').css('height',$('#content').height());

    })

</script>

 

Внесите аналогичные изменения в файл read.php.