• Динамические страницы в PHP. PHP

    Для создания перспективного, расширяемого и эффективного сайта любой сложности следует начинать с простого. Это процесс нелёгкий, требует определённых базовых знаний PHP и MySQL, но если его рассмотреть по пунктам - то можно составить своего рода «рабочий план», который пригодится при создании новых сайтов. Подготовим «ядро» и базу для проекта. Вначале это будет обычный сайт визитка, но потом, добавляя функционал, его можна превратить во что угодно. Итак, приступим.

    1. Подготовка базы данных. Создаём первую таблицу в БД MySQL

    Создаём новую базу данных, например «mysite». Лично я привык работать с кодировкой UTF-8, по-этому сразу оговорюсь: проследите, чтобы все текстовые файлы сайта, сама база, таблицы и поля таблиц были в одной кодировке.
    В новой базе делаем таблицу. Назовём её «pages». В этой таблице будут храниться статические страницы будущего сайта и информация о них. Таблица должна содержать следующие поля:

    • page_id - идентификатор страницы (SMALLINT, primary key, auto_increment);
    • page_alias - псевдоним страницы для строки адреса ЧПУ (VARCHAR, 255);
    • page_title - название страницы в окне браузера (VARCHAR, 255);
    • page_meta_d - мета описание страницы для тега meta description (VARCHAR, 255);
    • page_meta_k - мета ключевые слова для тега meta keywords (VARCHAR, 255);
    • page_h1 - заголовок страницы (VARCHAR, 255);
    • page_s_desc - краткое описание материала, например если материалы сайта будут в виде блога (TEXT);
    • page_content - основной текст страницы, который будет выводиться в центральную колонку сайта (TEXT);
    • page_publish - содержит «Y» - если страница опубликована, или «N» - если она скрыта (CHAR, по умолчанию «Y»).

    Сразу после создания таблицы вставляем в неё значения для главной страницы сайта. В поле «page_alias» для главной страницы предлагаю вставить значение «home». Метатеги - соответственно тематике всего сайта. Таким же образом можно посоздавать другие страницы, например «О компании» с алиасом «about» и своими метатегами, или «Контакты» с алиасом «contacts» и т.д.

    2. Создаём файл конфигурации сайта

    В корневой папке сайта, которая должна быть пуста на данном этапе, создаём папочку «cfg», в ней с помощью.htaccess закрываем доступ директивой «deny from all». Создаём файл core.php следующего содержания:

    // MYSQL
    class MyDB
    {
    var $dblogin = "root"; // ВАШ ЛОГИН К БАЗЕ ДАННЫХ
    var $dbpass = ""; // ВАШ ПАРОЛЬ К БАЗЕ ДАННЫХ
    var $db = "mysite"; // НАЗВАНИЕ БАЗЫ ДЛЯ САЙТА
    var $dbhost="localhost";

    Var $link;
    var $query;
    var $err;
    var $result;
    var $data;
    var $fetch;

    Function connect() {
    $this->link = mysql_connect($this->dbhost, $this->dblogin, $this->dbpass);
    mysql_select_db($this->db);
    mysql_query("SET NAMES utf8");
    }

    Function close() {
    mysql_close($this->link);
    }

    Function run($query) {
    $this->query = $query;
    $this->result = mysql_query($this->query, $this->link);
    $this->err = mysql_error();
    }
    function row() {
    $this->data = mysql_fetch_assoc($this->result);
    }
    function fetch() {
    while ($this->data = mysql_fetch_assoc($this->result)) {
    $this->fetch = $this->data;
    return $this->fetch;
    }
    }
    function stop() {
    unset($this->data);
    unset($this->result);
    unset($this->fetch);
    unset($this->err);
    unset($this->query);
    }
    }

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

    Если Вы работаете в среде Windows, я могу порекоммендовать использовать редактор . В этом редакторе есть нумерация строк, и он легко переводит текст из одной кодировки в другую. ВНИМАНИЕ! Если Вы работаете в кодировке UTF-8 - конвертируйте файлы в UTF-8 without BOM - это поможет избежать проблем в будущем.

    3. Создаём index.php - главный контроллер сайта

    Файл конфигурации создан. Теперь в корневой папке сайта создаём index.php - это и будет основной скрипт сайта, своего рода «главный контроллер». Содержание файла index.php:

    define("INDEX", ""); // УСТАНОВКА КОНСТАНТЫ ГЛАВНОГО КОНТРОЛЛЕРА

    Require_once($_SERVER."/cfg/core.php"); // ПОДКЛЮЧЕНИЕ ЯДРА

    // ПОДКЛЮЧЕНИЕ К БД
    $db = new MyDB();
    $db->connect();

    // ГЛАВНЫЙ КОНТРОЛЛЕР
    switch ($_GET) {
    case "page":
    include($_SERVER."/com/page.php");
    break;
    default:
    include($_SERVER."/com/home.php");
    break;
    }

    Include ($_SERVER."/template.php");
    $db->close();

    Переменная $_GET будет указывать главному контроллеру какой компонент сайта загружать при запросе. Сейчас в нашем сайте предусмотрено только два компонента: «страница» и «главная страница» (в принципе можно обойтись и одним компонентом вывода обычной страницы, но часто вид главной страницы сайта отличается от обычных страниц пунктов меню). Логика работы главного контроллера такова: из URL строки извлекается название нужного компонента (значение переменной $option), в зависимости от его значения подключается файл самого компонента (содержится в папке /com). Файл компонента выполняет все необходимые работы, извлекает из базы данные и записывает их в переменные, для передачи в шаблон дизайна. В самом конце подключается файл дизайна сайта, в который и передаются все переменные и данные, извлечённые в компонентах. Это звучит намного сложнее, чем работает.

    4. Создаём компонент вывода обычной страницы

    В корне сайта создаём папочку «com» - в ней будут храниться файлы компонентов. Компонент сайта, в моём понимании - это файл, в котором происходит обработка данных для разных разделов сайта. Например компонент обычной страницы извлекает из базы данных название, описание и текст материала, и записывает их в переменные $title, $meta_d, $meta_k, $content и др. Эти данные потом передаются в шаблон дизайна (под каждый компонент можно создавать свой шаблон дизайна) и выводятся пользователю в виде HTML-страницы. Например, компонент каталога, который можно создать в будущем, выполнял бы почти то же самое, но с данными про товары - а там своя специфика, другие поля в таблице, итд. По-этому для каждого функционального раздела сайта стоит создавать отдельный компонент. В схеме MVC (Model-View-Controller) компонент выполняет роль модели.

    Создаём в папке «com» файл «page.php». Содержимое файла следущее:

    /* КОМПОНЕНТ СТРАНИЦЫ */
    $alias = $_GET;
    $query = "SELECT * FROM pages WHERE page_alias="".$alias."" AND page_publish="Y" LIMIT 1";
    $db->run($query);
    $db->row();
    // ПЕРЕМЕННЫЕ КОМПОНЕНТА
    $id = $db->data;
    $alias = $db->data;
    $title = $db->data;
    $h1 = $db->data;
    $meta_d = $db->data;
    $meta_k = $db->data;
    $s_desc = $db->data;
    $component = $db->data;
    // ЕСЛИ СТРАНИЦЫ НЕ СУЩЕСТВУЕТ
    if (!$id) {
    header("HTTP/1.1 404 Not Found");
    $component = "ОШИБКА 404! Данной страницы не существует";
    }
    $db->stop();

    5. Создаём компонент вывода главной страницы

    Главная страница у нас в базе данных хранится под псевдонимом «home», и пока по своей структуре не отличается от обычных страниц сайта - это просто статья. Тем не менее создадим для неё отдельный компонент - на перспективу, так сказать.


    Содержимое компонента «home.php» в папке «com» почти совпадает с содержимым компонента обычной страницы, за исключением строки запроса к базе и названия компонента. Строка запроса теперь выглядит так:

    $query = "SELECT * FROM wx_pages WHERE page_alias="home" LIMIT 1";

    6. Создаём шаблон дизайна всего сайта

    В корне сайта создаём файл template.php. По сути это обычный макет web-дизайна в формате HTML+CSS, только с PHP переменными в нужных местах. Между тегами title вставочка , в центральной колонке сайта вставочка и так по всему шаблону расставляем нужные переменные, которые объявлены в компонентах.

    В корневой папке также должны быть папки «css» и «images» для элементов дизайна. В файле /css/style.css - можно настроить стили по своему усмотрению.

    7. Чистые ссылки и файл.htaccess

    Для создания чистых ссылок я использую mod_rewrite с прямыми указаниями правил для каждого компонента отдельно, так как разбор адресной строки средствами самого контроллера считаю излишним функционалом. Содержимое.htaccess на данном этапе такое:


    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f

    # ЗАПРЕЩЁННЫЕ ФАЙЛЫ
    RewriteRule .htaccess - [F]
    RewriteRule template.php - [F]

    # ПРАВИЛА mod_rewrite
    RewriteRule page/(+)([\/]{0,1})\.htm$ index.php?option=page&alias=$1 [L]

    В будущем мы будем дописывать правила для компонентов поиска, каталога, блога статей и т.д. Смысл один: преобразовать ссылки вида «mysite.com/index.php?option=pages&alias=about » в ссылку вида «mysite.com/pages/about.htm » - смотрится довольно красиво. Старайтесь в разработке избегать массива $_GET в целях безопасности и не надеяться на него. Целесообразно хранить в нём только параметры для главного контроллера (переменная $option) и для компонента (переменная $alias).

    Также в каждой папке сайта «на всякий случай» создайте пустой файл index.html - это нужно для того, чтобы при обращении к каталогу через адресную строку ничего не отображалось.

    Теги: php, mysql, движок сайта, контроллер, создание сайта, mvc

    2017-01-10


    Создаем динамический сайт с помощью php

    Здравствуйте уважаемый посетитель!

    Сегодня из главной страницы с помощью языка программирования PHP создадим динамическую страницу, которая в дальнейшем будет формироваться на сервере при каждом запросе пользователей.

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

    • Зачем нужен динамический сайт
    • Как преобразовать статический сайт в динамический
    • Формируем блоки динамического сайта
    • Преобразуем веб-страницу из статической в динамическую
    • Исходные файлы сайта

    Зачем нужен динамический сайт

    О том, зачем нужен динамический сайт говорилось в самом начале пошаговой инструкции в статье Устанавливаем локальный веб-сервер Denwer , где пояснялась необходимость установки локального веб-сервера. Поэтому можно вернуться назад и освежить этот вопрос.

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

    скриншот 12

    К этому можно лишь добавить, что для получения действительно полноценного интерет-ресурса невозможно пропустить этот шаг и остаться с вариантом статического сайта.

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

    Как преобразовать статический сайт в динамический

    Как известно, принципиальное отличие динамического от статического сайта в том, в статическом готовые веб-страницы лежат на сервере и ждут своей очереди для отправки в браузер пользователя. При этом, если страницы будут иметь даже незначительные различия, скажем разница лишь в одной фразе или вообще в одном слове, то все равно это будут отдельные страницы.

    В динамическом же варианте, формирование страниц происходит на сервере при каждом запросе пользователя в зависимости запрашиваемой информации.

    По-простому, это можно сравнить с конструктором, где из ограниченного числа элементов можно составлять большое количество различных фигур. При этом, если внести какое-либо изменение в один из элементов, то оно будет отражаться на всей конструкции, включающей этот элемент.

    Исходя из этого и сделаем из нашей созданной главной страницы подобие конструктора, состоящего из определенных элементов (в нашем случае это будут файлы), из которых в последствии будут собираться веб-страницы по запросам пользователей.

    Для пояснения действий, которые для этого будем выполнять, воспользуемся HTML-кодом каркаса главной страницы, полученным на одном из этапов создания сайта в статье .

    1. "utf-8" >

      <span><b>Заголовок страницы </b> </span>

      "Description" content ="Краткое описание содержания страницы" >

    2. "wrapper" >

      Шапка

      Ротатор

      Основное содержание

      Сайдбар

      Подвал

    Как видно из HTML-кода, контейнер , предназначенный для размещения видимой части веб-страницы содержит следующие основные блоки:

    • Шапка;
    • Ротатор;
    • Основное содержимое;
    • Сайдбар;
    • Подвал.

    При этом нужно обратить внимание на то, что четыре из пяти блоков являются общими, и только один блок "Основное содержание" будет отличным для каждый страницы.

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

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

    Такое построение структуры сайта позволит в дальнейшем не заниматься рутинной работой по изменению HTML-кода всех страниц в случае замены или дополнения какого-либо общего для них фрагмента. В таких случаях достаточно будет внести изменения лишь в какой-то определенный файл, и на этом вся процедура замены будет выполнена. Как видно, преимущество налицо.

    А вот для того, чтобы нам это сделать и потребуется язык PHP, с помощью которого веб-страницы смогут обращаться к этим выделенным блокам и переносить к себе их содержимое.

    Если кому еще не приходилось иметь дело с языком PHP, то желательно с ним познакомиться поближе, так как PHP является одним из важнейших инструментов разработки сайтов. Это можно сделать, воспользовавшись разного рода справочной литературой, которую на просторах рунета можно найти в большом количестве.

    Как вариант, неоднократно уже упомянутый справочник "Puzzleweb.ru", в котором одна из его частей уделена теме PHP. Для более углубленного изучения PHP можно также воспользоваться специализированным справочником, заточенным именно под этот язык, размещенный на сайте "php.ru". По ссылке "https://php.ru/manual/control-structures.intro.html" можно попасть на его страницу "Введение", откуда легко выбрать любой интересующийся раздел справочника.

    Но для того, чтобы сейчас сделать динамический сайт и обеспечить возможность подключения файлов к HTML-сраницам достаточно использовать лишь только одну языковую инструкцию (в PHP любой сценарий состоит из последовательности инструкций). Это может быть одна из четырех возможных вариантов инструкций, предназначенных для подключения файлов:

    • include;
    • require;
    • include_once;
    • require_once.

    Расписывать здесь их особенности нет смысла, так как это подробно пояснено в справочниках, например по ссылке "http://www.puzzleweb.ru/php/26_inc_files.php" можно хорошо с этим разобраться.

    Мы же при создании сайта будем использовать инструкцию "require_once", обычно я использую этот вариант, для меня он наиболее удобен.

    Ну а теперь, когда мы разобрались, что будем делать, дальше перейдем к практическим действиям.

    Формируем блоки динамического сайта

    Для того, чтобы сформировать блоки, которые затем будут участвовать в сборке веб-старниц, в первую очередь необходимо их создать. Делается это в текстовом редакторе Notepad++ аналогично тому, как мы создавали первый файл сайта "index.html" в статье Создаем веб-страницу и размещаем ее на локальном веб-сервере . Только расширение в этом случае нужно указывать не "html", а "php". При этом нужно обязательно обратить внимание на кодировку, чтобы в дальнейшем избежать появления на страницах разного рода непонятных знаков.

    Файлы будем создавать в отдельной, вновь созданной папке "blocks". Для файлов, которые являются общими для всех страниц, присвоим названия с учетом названий соответствующих блоков. А для блока "main" укажем определенное название для каждой страницы сайта.

    Таким образом, для главной страницы к блоку "main" будем подключать файл под названием "block_glavnaya". Для остальных: "header", "section", "aside" и "footer".

    При создании файлов также можно учесть, что для упрощения этой процедуры возможно воспользоваться их копированием с помощью меню "Файл", указав при сохранении "Сохранить как" новое название файла.

    Вообще, создание файлов стандартная процедура, поэтому сложностей возникнуть не должно. В итоге это должно выглядеть следующим образом.


    Затем скопируем содержание каждого блока и перенесем его в соответствующий файл. На примере "header.php" рассмотрим это более подробно.

    1. Открываем в редакторе Notepad++ файл "index.html", выделяем нужную область блока "header" и поочередным нажатием правой и левой кнопки мышки копируем ее в буфер обмена.

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

  • необходимо для каждой страницы классу class присваивать значение "activ" . То же самое относится и к аналогичному фрагменту в блоке "footer".

    В дальнейшем, эти фрагменты меню в блоках "header" и "footer" мы также вынесем в отдельные файлы, но сейчас не будем усложнять и оставим их на прежнем месте.

    Как выделить и скопировать в буфер обмена фрагмент блока "header" показано ниже на скриншоте.



    3. И в завершении, для того, чтобы сдвинуть содержимое файла в Notepad++ в левую сторону нужно при нажатой кнопке "Shift" несколько раз нажать на "Tab". В итоге получим сформированный файл "header.php" в следующем виде.


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


    Рис.6 Файл "section.php"


    Рис.7 Файл "block_glavnaya.php"


    Рис.8 Файл "aside.php"


    Рис.9 Файл "footer.php"

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

    Преобразуем веб-страницу из статической в динамическую

    Для того, чтобы обеспечить для нашей главной страницы загрузку файлов, которые были созданы в предыдущем разделе, необходимо сначала изменить расширение файла "index" с "html" на "php", а затем в редакторе Notepad++ вновь его открыть и внести следующие изменения:

    • Удалить содержимое блоков, которое ранее было перенесено во вновь созданные файлы.
    • На освободившееся место записать на языке PHP инструкции "require_once" с указанием пути к соответствующим файлам.
    • В тегах меню
    • , в которых указывается путь к страницам, для главной страницы заменить расширение с "html" на "php", а для других указать наименования вновь создаваемых страниц.
    • Указать в заголовке "Главная".

    После выполнения этих операций наша главная страница должна приобрести следующий вид.


    Из приведенного скриншота можно заметить, что все инструкции PHP выделены открывающим тегом . Такое обозначение принято для указания когда начинать и заканчивать обработку кода, написанного на языке PHP. Поэтому в дальнейшем все коды PHP будут выделяться этим обозначением.

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

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

    Обновим сейчас браузер и попробуем открыть главную страницу.


    Как видно, в нашем случае главная страница открылась без каких-либо проблем. Но, в отличии от предыдущей работы сайта, страница приобрела такой вид в результате формирования ее на сервере при обработке запроса.

    Таким образом, теперь у нашего сайта появилась первая динамическая страница. И после добавления к нему других подобных страниц этот сайт по праву можно будет назвать динамическим со всеми вытекающими последствиями, т.е. он станет обладать всеми теми преимуществами, присущими динамическим сайтам. И в этом мы сможем убедиться, когда в дальнейшем будем его наполнять разного рода функционалом.

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

    Исходные файлы сайта

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

    Нужно предпринять меры предосторожности. Потому что ресурс может получиться крайне динамичным. Того и гляди, укусит!

    PHP и HTML

    Сейчас эти две дисциплины связаны почти воедино. Их тандем является основой, на которой построена «жизнь » большей части интернета. Конечно, в связке с html применяются и другие серверные языки (Perl, ASP.NET ). Но их распространенность во всемирной паутине по сравнению с PHP , носит чисто эпизодический характер.

    Согласно статистике, архитектура большинства ресурсов в интернете построена на основе php и html.


    Для многих начинающих взаимосвязь между этими технологиями выглядит непонятной. С одной стороны статический html , который интерпретируется браузерами на стороне клиента. А с другой — программный язык, обрабатывающийся на сервере. Поэтому, перед написанием сайта на php с нуля, приведем простой пример взаимодействия этих двух технологий:

    • Создадим новый файл с расширением php ;
    • Поместим туда следующий код:

    Untitled web-page Сколько сейчас времени?

    • Сохраним файл на локальном сервере и откроем его в браузере. Затем нажмем на правую клавишу мыши и в контекстном меню выберем пункт «Просмотр html страницы ».

    Как видно на скриншоте, строка не отображается в html коде страницы. И в браузере, и в коде видны лишь возвращенные дата и время. А это значит, что скрипт был обработан на серверной стороне. Поэтому создание сайта на php кардинально отличается от написания простых html страниц.

    Динамический сайт

    Современные сайты бывают двух основных типов:

    • Статические – созданные лишь на основе html . Такие сайты не меняют свое содержимое в ответ на действия пользователей. Конечно, статический ресурс может реагировать на события и пользовательские действия. Но реализация динамичности страниц на стороне клиента имеет узкий диапазон применения, ограниченный возможностями Java Script .

    Код Java Script выполняется в браузере на стороне клиента.

    • Динамические – способны изменять свое состояние и содержимое — html страницы динамических сайтов формируются налету в момент выполнения кода в ответ на запрос пользователя, посланный им из браузера на сервер. Чаще всего генерация страниц на стороне сервера происходит с помощью кода, написанного на php .

    Динамический сайт на php состоит из следующих файлов:

    • index.php – является основным файлом проекта;
    • Шаблоны – включают в себя структуру той или иной части страницы (шапки, подвала, основной части );
    • Файлы CSS – хранят в себе все стилевые описания ресурса.

    Кроме этого проект сайта может состоять из файлов, хранящих в себе код функций и методов php . А также включать в себя базу данных.

    В большинстве CMS источником контента для наполнения страниц, динамически сгенерированных на стороне сервера, служит база данных. Чаще всего применяется СУБД MySQL.

    Как пишется сайт на PHP

    Чтобы разобраться, как создается сайт на php , рассмотрим практический пример. Конечно, многое в нем упрощено, но весь механизм работы и этапы создания сохранены.

    Имеется html сайт со следующей структурой и дизайном:

    Его код:

    Пример сайта на php

    Шапка

    Контент

    Код файла style.css :

    Header { margin-left:auto; margin-right:auto; margin-bottom:10px; width:1000px; height:100px; border:1px solid #000000; background: #009966; background-image: url(img/1.gif); } .pages { margin-left:auto; margin-right:auto; width:1000px; } .content { margin-right:10px; width:806px; height:450px; border:1px solid #000000; background: #999999; float:left; } .sidebar { width:180px; height:450px; border:1px solid #000000; background: #FF9900; float:left; } .foot { clear:both; } .footer { margin-top:10px; margin-left:auto; margin-right:auto; width:1000px; height:50px; border:1px solid #000000; background: #333399; }

    Перед тем, как написать сайт на php до конца, весь html код нужно раскинуть по нескольким файлам:

    • В header.php войдет весь код с начала и до конца слоя «header »;
    • В footer.php – слой «foot » и «footer »;
    • В content.php – весь код, оставшийся посредине.

    Теперь создаем основную страницу index.php , в которой будут размещены вызовы файлов, содержащие в себе код нужных элементов дизайна. Итого в основном файле оказалось всего 3 строчки скрипта:

    А если просмотреть в браузере html код страницы, то вы увидите код первоначального исходника:

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

    Путь в обход

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

    Они представляют собой определенный набор шаблонов с расширенным диапазоном настроек. Из-за чего они сильно схожи с обычными CMS . Конечно, высокой уникальности дизайна будущего сайта никто не гарантирует, и в дальнейшем могут возникнуть проблемы с переносом и адаптацией ресурса на другой хостинговой площадке или платформе. Вот несколько проверенных вариантов таких онлайн-сервисов.

    Для решения третьей проблемы хорошо подойдет программа Denwer, которую можно бесплатно установить на Ваш компьютер. Если Вы не в курсе, что это за программа, то советую ознакомиться: как установить Denwer , в этой статье пошагово (для новичков) объяснено как его установить и как пользоваться.

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

    Для того, чтобы приступать к разработке сайта на PHP, Вам нужны начальные знания в HTML. Я уже писал о том, как создать простую страницу HTML . Там описаны все html-теги, без которых создать сайт невозможно. Поэтому настоятельно рекомендую начать изучать сайтостроение с той статьи.

    Чем отличается сайт на PHP от голого сайта на HTML?

    Сайт на PHP почти ничем не отличается от голого сайта на HTML. Единственное отличие - более гибкая настройка и управление сайта, а также есть возможность автоматизировать множество функций. Приведу простой пример.

    Допустим в шапке сайта необходимо изменить буквально одно слово. Если сайт сделан на голом HTML, то необходимо будет открыть каждый html-файл, чтобы внести изменение, а это очень неудобно. Если же шапка сайта сделана на PHP в качестве подключаемого компонента, то изменения нужно будет внести только в одном файле и они автоматом изменятся на всем сайте.

    Структура типичного сайта на PHP:

    Теперь приведу код шаблона сайта на PHP. Обратите внимание на то, что страницы сделанные с использованием php рекомендуется делать с расширением .php , хотя это не является обязательным условием. При определенных настройках хостинга файлы с обычным расширением .html также могут обрабатывать PHP-код.

    Код файла index.php :

    <span>Название страницы </span> ... $_SERVER["DOCUMENT_ROOT"]."/head.php" ; ?> ... ...
    $_SERVER["DOCUMENT_ROOT"]."/top.php" ; ?>
    ...
    ...
    ... Основная часть сайта...
    ... ... ...

    Теперь отдельно рассмотрим каждый из подключаемых элементов:

    • head.php
    • top.php
    • sidebar1.php
    • sidebar2.php
    • footer.php

    Обратите внимание, что подключается они через специальную команду PHP:

    require_once <полный путь/имя файла>

    Каждый файл соответственно отвечает за отдельную часть сайта. Я постарался назвать их максимально информативно и понятно. Сайт может состоять из большего множество таких подключаемых файлов. Рассмотрим по порядку каждый элемент сверху вниз.

    Многие читатели в любой книге о компьютерах пролистывают все, что не представляет непосредственного интереса, и переходят к тому, что они действительно хотят знать. Лично я поступаю именно так. Впрочем, в этом нет ничего страшного -- редко встречаются технические книги, которые необходимо читать от корки до корки. А может, вы именно так и поступили -- пропустили восемь начальных глав и взялись за эту главу, потому что у нее было самое интересное название? Да и кому захочется тратить время на подробности, когда на работе «горит» очередной проект?

    К счастью, подобная торопливость не помешает вам нормально усвоить материал второй части книги, посвященной использованию PHP для построения сайтов и взаимодействия с Web. В этой главе вы научитесь легко модифицировать содержимое web-страниц и осуществлять навигацию в Web при помощи ссылок и различных стандартных функций. Следующая глава дополнит изложенный материал - в ней подробно рассматриваются средства взаимодействия с пользователем в формах HTML В главе 11 описана организация интерфейса с базами данных. В остальных главах второй части рассматриваются нетривиальные аспекты web-программирования на PHP.

    Однако следует помнить о том, что материал части 1 абсолютно необходим для нормального владения PHP. Предполагается, что вы все же прочитали первую часть, поэтому в примерах будут использоваться многие из описанных ранее концепций. Итак, если вы пролистали часть книги, вам придется время от времени возвращаться к предыдущим главам и наверстывать упущенное.

    Простые ссылки

    <а href = "date.php">

    $link = "date.php";

    print "<а href = \"$link\">View today"s date
    \n"

    Вероятно, у вас возник вопрос -- почему в коде ссылки перед кавычками (") ставится обратная косая черта (\)? Дело в том, что кавычки в PHP являются специальными символами и используются в качестве ограничителей строк. Следовательно, кавычки-литералы в строках должны экранироваться.

    Если необходимость экранировать кавычки вас раздражает, просто включите режим magic_quotes_gpc в файле php.ini. В результате все апострофы, кавычки, обратные косые черты и нуль-символы. в тексте автоматически экранируются!

    Разовьем приведенный пример. Для быстрого вывода списка ссылок в браузере можно воспользоваться массивом:

    // Создать массив разделов

    $contents - array("tutorials", "articles", "scripts", "contact");

    // Перебрать и последовательно вывести каждый элемент массива

    for ($i = 0; $i < sizeof($contents; $i++)

    print " • ".$contents[$i]."
    \n";

    // • - специальное обозначение точки-маркера endfor;

    Файловые компоненты (шаблоны)

    Мы подошли к одной из моих любимых возможностей PHP. Шаблоном (применительно к web-программированию) называется часть web-документа, которую вы собираетесь использовать в нескольких страницах. Шаблоны, как и функции PHP, избавляют вас от лишнего копирования/вставки фрагментов содержания страницы и программного кода. С увеличением масштабов сайта значение шаблонов возрастает, поскольку они позволяют легко и быстро проводить модификации на уровне целого сайта. В этом разделе будут описаны некоторые возможности, которые открываются при использовании простейших шаблонов.

    Как правило, общие фрагменты содержания/кода (то есть шаблоны) сохраняются в отдельных файлах. При построении web-документа вы просто «включаете» эти файлы в соответствующие места страницы. В PHP для этого существуют две функции: include() и require().

    include() и require()

    Одним из самых выдающихся аспектов PHP является возможность построения шаблонов и программных библиотек и их последующей вставки в новые сценарии. Применение библиотек экономит время и усилия по использованию общих функциональных возможностей на разных web-сайтах. Читатели, обладающие

    опытом программирования на других языках (например, С, C++ или Java), хорошо знакомы с концепцией библиотек функций и их использованием в программах для расширения функциональных возможностей.

    Включение одного или нескольких файлов в сценарий осуществляется стандартными функциями PHP require() и include(). Как будет показано в следующем разделе, каждая из этих функций применяется в определенной ситуации.

    Функции

    В PHP существуют четыре функции для включения файлов в сценарии PHP:

    • include();
    • include_once();
    • require();
    • require_once().

    Несмотря на сходство имен, эти функции решают разные задачи.

    Функция include() включает содержимое файла в сценарий. Синтаксис функции include():

    include (file файл]

    У функции include() есть одна интересная особенность -- ее можно выполнять условно. Например, если вызов функции включен в блок команды if. то файл включается в программу лишь в том случае, если условие i f истинно. Если функция includeO используется в условной команде, то она должна быть заключена в фигурные скобки или в альтернативные ограничители. Сравните различия в синтаксисе листингов 9.1 и 9.2.

    Листинг 9.1. Неправильное использование include()

    if (some_conditional)

    include ("text91a.txt"); else

    include ("text91b.txt");

    Листинг 9.2. Правильное использование include()

    if (some_conditional) :

    include ("text91a.txt");

    include ("text91b.txt");

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

    Вместо этого необходимо заключить команду в соответствующие теги, как показывает следующий пример:

    print "this is an invalid include file";

    Функция include_once() делает то же, что и include(), за одним исключением: прежде чем включать файл в программу, она проверяет, не был ли он включен ранее. Если файл уже был включен, вызов include_once() игнорируется, а если нет -- происходит стандартное включение файла. Во всем остальном include_once() ничем не отличается от include(). Синтаксис функции include_once():

    include_once (file файл)

    В целом функция require() похожа на include() -- она тоже включает шаблон в тот файл, в котором находится вызов require(). Синтаксис функции require():

    require (file файл)

    Тем не менее, между функциями require() и include() существует одно важное различие. Файл, определяемый параметром require(), включается в сценарий независимо от местонахождения require() в сценарии. Например, при вызове requi ге() в блоке if при ложном условии файл все равно будет включен в сценарий!

    Во многих ситуациях бывает удобно создать файл с переменными и другой информацией, которая используется в масштабах сайта, и затем подключать его по мере необходимости. Хотя имя этого файла выбирается произвольно, я обычно называю его init.tpl (сокращение от «initializaion.template»). В листинге 9.3 показано, как выглядит очень простой файл init.tpl. В листинге 9.4 содержимое init.tpl включается в сценарий командой require().

    Листинг 9.3. Пример инициализационного файла

    $site_title = "PHP Recipes";

    $contact_email = "[email protected]";

    $contact_name = "WJ Gilmore";

    Листинг 9.4. Использование файла init.tpl

    <? print $site_title; ?>

    \"mai1 to:$contact_email\">$contact_name."; ?>

    Передача URL при вызове require() допускается лишь при включенном режиме «URL fopen wrappers» (этот режим включен по умолчанию).

    С увеличением размеров сайта может оказаться, что некоторые файлы включаются в сценарий по несколько раз. Иногда это не вызывает проблем, но в некоторых случаях повторное включение файла приводит к сбросу значений изменившихся переменных. Если во включаемом файле определяются функции, могут возникнуть конфликты имен. Учитывая сказанное, мы приходим к следующей функции -- require_once().

    Функция require_once() гарантирует, что файл будет включаться в сценарий всего один раз. После вызова requi rе_оnсе() все дальнейшие попытки включения того же файла игнорируются. Синтаксис функции requiге_оnсе():

    Вероятно, вы станете чаще использовать функции включения файлов по мере того, как ваши web-приложения начнут увеличиваться в размерах. Эти функции часто встречаются в примерах данной книги, чтобы сократить избыточность программного кода. Первые примеры рассматриваются в следующем разделе, посвященном принципам построения базовых шаблонов.

    Построение компонентов

    При определении структуры типичной web-страницы я обычно разбиваю ее на три части: заголовок, основную часть и колонтитул. Как правило, в большинстве правильно организованных web-сайтов присутствует заголовок, который практически не изменяется; в основной части выводится запрашиваемое содержание сайта, поэтому она часто изменяется; наконец, колонтитул содержит информацию об авторских правах и навигационные ссылки. Колонтитул, как и заголовок, обычно остается неизменным. Не поймите меня превратно -- я вовсе не пытаюсь подавлять ваши творческие устремления. Мне встречалось немало великолепных сайтов, не следовавших этим принципам. Я всего лишь пытаюсь выработать общую структуру, которая может послужить отправной точкой для дальнейшей работы.

    Заголовок

    Заголовочный файл (вроде приведенного в листинге 9.5) присутствует практически в каждом из моих web-сайтов с поддержкой PHP. В этом файле содержится

    информация, действующая на уровне всего сайта, -- например, заголовок, контактные данные и некоторые компоненты кода HTML-страницы.

    Листинг 9.5. Пример файла заголовка

    // Файл: header.tpl

    // Назначение: заголовочный файл для сайта PhpRecipes .

    $site_name = "PHPRecipes";

    $site_email= "[email protected]";

    $site_path = "http://localhost/phprecipes";

    <? print $site_name; ?>

    // Вывести текущую дату и время

    print date ("F d, h:i a");

    Довольно часто доступ к включаемым файлам со стороны посетителей ограничивается, особенно если эти файлы содержат конфиденциальную информацию (например, пароли). В Apache можно запретить просмотр некоторых файлов редактированием файлов http.conf или htaccess. Следующий пример показывает, как запретить просмотр всех файлов с расширением.tpl:

    Order allow,deny

    Allow from 127.0.0.1

    PHP и проблемы безопасности сайтов подробно описаны в главе 16.

    Колонтитул

    Колонтитулом (footer) обычно называется информация, расположенная в нижней части страниц сайта, -- контактные данные, ссылки и информация об авторских правах. Эту информацию можно разместить в отдельном файле и включать в качестве шаблона так же, как это делается с заголовком. Допустим, c наступлением нового года вам потребовалось изменить информацию об авторских правах и привести ее к виду «Copyright © 2000-2001». Есть два пути: потратить канун Рождества на лихорадочное редактирование сотен статических страниц или воспользоваться шаблоном наподобие приведенного в листинге 9.6. Одно простое изменение -- и вы можете возвращаться к праздничным хлопотам.

    Листинг 9.6. Пример файла колонтитула (footer.tpl)

    contact |

    your privacy

    Обратите внимание на использование глобальной переменной $site_email в файле колонтитула. Значение этой переменной действует в масштабах всей страницы, а мы предполагаем, что файлы header.tpl и footer.tpl будут включены в одну итоговую страницу. Также обратите внимание на присутствие пути $site_path в ссылке Privacy (Конфиденциальность). Я всегда включаю в шаблоны полные пути ко всем ссылкам -- если бы URL ссылки состоял из одного имени privacy.php, то файл колонтитула был бы жестко привязан к конкретному каталогу.

    Основная часть

    В основной части страницы подключается содержимое заголовка и колонтитула. В сущности, именно основная часть содержит информацию, интересующую посетителей сайта. Заголовок эффектно выглядит, колонтитул содержит полезные сведения, но именно ради основной части страницы пользователи снова и снова возвращаются на сайт. Хотя я не смогу предоставить каких-либо рекомендаций по поводу конкретной структуры страниц, шаблоны, подобные приведенному в листинге 9.7, основательно упрощают администрирование страниц.

    Листинг 9.7. Пример основной части страницы (index_body.tpl)

    /tutorials.php">tutorials

    articles

    scripts

    contact

    Welcome to PHPRecipes. the starting place for PHP scripts, tutorials,

    and information about gourmet cooking!

    Все вместе: заголовок, колонтитул и основная часть

    Вероятно, мое настроение лучше всего выражается фразой полковника «Ганнибала» Смита (Джордж Пеппард) из знаменитого сериала «Команда А»: «Люблю, когда все становится на свои места». Я испытываю нечто подобное, когда разрозненные шаблоны объединяются и образуют полный web-документ. Комбинируя три секции документа: header.tpl, index_body.tpl и footer.tpl, -- можно быстро построить простейшую страницу вроде той, что приведена в листинге 9.8.

    Листинг 9.8. Построение страницы index.php включением нескольких файлов

    // Файл: index.php

    // Назначение: домашняястраница PHPRecipes

    // Вывести заголовок

    include ("header.tpl");

    // Вывести основную часть

    include ("index_body.tpl");

    // Вывести колонтитул

    include ("footer.tpl");

    Ну как? Три простые команды -- и перед вами готовая страница. Текст итоговой страницы приведен в листинге 9.9.

    Листинг 9.9. Страница HTML, построенная в листинге 9.8 (index.php)

    PHPRecipes

    August 23, 03:17 pm

    tutorials

    articles

    scripts

    contact

    Welcome to PHPRecipes, the starting place for PHP scripts, tutorials,

    and gourmet cooking tips and recipes!

    Copyright 2000 PHPRecipes. All rights reserved.

    contact |

    your privacy

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

    Рис. 9.1. Внешний вид страницы, построенной в листинге 9.8

    Оптимизация шаблонов

    Во втором (на мой взгляд, более предпочтительном) варианте шаблоны оформляются в виде функций, находящихся в отдельном файле. Тем самым обеспечивается дополнительное структурирование ваших шаблонов. Я называю этот файл инициализационным файлом и храню в нем другую полезную информацию. Поскольку мы уже рассмотрели относительно длинные примеры заголовка и колонтитула, содержимое листингов 9.10 и 9.11 было слегка сокращено для наглядной демонстрации новой идеи.

    Листинг 9.10. Оптимизированный шаблон сайта (site_init.tpl)

    // Файл: site_init.tpl

    // Назначение: инициализационный файл PhpRecipes

    $site_name = "PHPRecipes";

    $site_email = "[email protected]";

    $site_path = "http://localhost/phprecipes/";

    function show_header($site_name) {

    <? print $site_name: ?>

    This is the header

    function show footer ()

    This Is the footer

    Листинг 9.11. Применение инициализационного файла

    // Включить инициализационный файл

    include("site_init.tpl");

    // Вывести заголовок

    show header ($site_name);

    // Содержимое основной части This is some body information

    // Вывести колонтитул Show_footer();

    Проект: генератор страниц

    Хотя в большинстве созданных мною web-сайтов основное содержимое страниц формировалось на основании информации, прочитанной из базы данных, всегда найдется несколько страниц, которые практически не изменяются. В частности, на них могут выводиться сведения о команде разработчиков, контактные данные, реклама и т. д. Я обычно храню эту «статическую» информацию в отдельной папке и использую сценарий PHP для ее загрузки при поступлении запроса. Конечно, у вас возникает вопрос -- если это статическая информация, для чего нужен сценарий PHP? Почему бы не загружать обычные страницы HTML? Преимущество PHP заключается в том, что вы можете использовать шаблоны и вставлять статические фрагменты по мере необходимости.

    <а href = "/static.php?content=$content">Static Page Name

    Начнем с создания статических страниц. Для простоты я ограничусь тремя страницами, содержащими информацию о сайте (листинг 9.12), рекламу (листинг 9.13) и контактные данные (листинг 9.14).

    Листинг 9.12. Информация о сайте (about.html)

    About PHPRecipes

    What programmer doesn"t mix all night programming with gourmet cookies. Here at PHPRecipes. hardly a night goes by without one of our coders mixing a little bit of HTML with a tasty plate of Portobello Mushrooms or even Fondue. So we decided to bring you the best of what we love most: PHP and food!

    That"s right, readers. Tutorials, scripts, souffles and more. 0nly at PHPRecipes.

    Advertising Information

    Regardless of whether they come to learn the latest PHP techniques or for brushing up on how

    to bake chicken, you can bet our readers are decision makers. They are the Industry

    professionals who make decisions about what their company purchases.

    For advertising information, contact

    ">[email protected].

    Листинг 9.14. Контактные данные (contact.html)

    Contact Us

    Have a coding tip?

    Know the perfect topping for candied yams?

    Let us know! Contact the team at [email protected].

    Переходим к построению страницы static.php, которая выводит запрашиваемую статическую информацию. В этот файл (см. листинг 9.15) включаются компоненты страниц нашего сайта и инициализационный файл site_init.tpl.

    Листинг 9.15. Общий вывод статических страниц (static.php)

    // Файл: static.php

    // Назначение: отображение запрашиваемых статических страниц.

    // ВНИМАНИЕ: предполагается, что файл "site_init.tpl" и все

    // статические файлы находятся в том же каталоге.

    // Загрузить функции и переменные include("site_init.tpl"):

    // Вывести заголовок show_header($site_name);

    // Вывести запрашиваемое содержание include("$content.html"):

    // Вывести колонтитул show footer();

    Теперь все готово к построению основного сценария. Просто включите в страницу

    <а href = "static.php?content=about">Static Page Name

    Advertising Information

    Contact Us

    Если щелкнуть на любой из этих ссылок, в браузере загружается соответствующая статическая страница, внедренная в static.php!

    Итоги

    В этой главе вы познакомились с первоочередной задачей, для решения которой и создавался PHP, -- динамическим построением web-страниц. Были рассмотрены следующие вопросы:

    • обработка URL;
    • построение динамического содержания;
    • включение и построение базовых шаблонов.

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

    Следующая глава посвящена использованию PHP в сочетании с формами HTML, заметно повышающими степень интерактивности вашего сайта. А потом -- взаимодействие с базами данных! Вам предстоит узнать много интересного.