Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_Inet.doc
Скачиваний:
13
Добавлен:
13.04.2015
Размер:
1.05 Mб
Скачать
    1. Открытие сессии

Самый простой способ открытия сессии заключается в использовании функции session_start, которая вызывается в начале PHP-сценария:

  1. session_start

Синтаксис:

session_start();

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

    1. Регистрация переменных сессии

После инициализации сессии появляется возможность сохранять информацию в су-перглобальном массиве $_SESSION. Пусть имеется файл index.php в котором в массив $_SESSION сохраняется переменная и массив.

<?php

  // Инициируем сессию

  session_start();

  // Помещаем значение в сессию

  $_SESSION['name'] = "value";

  // Помещаем массив в сессию

  $arr = array("first", "second", "third");

  $_SESSION['arr'] = $arr;

  // Выводим ссылку на другую страницу

  echo "<a href='other.php'>другая страница</a>";

?>

На страницах, где происходит вызов функции session_start(), значения данных переменных можно извлечь из суперглобального массива $_SESSION. В следующем листинге приводится содержимое страницы other.php, где извлекаются данные, ранее помещенные на странице index.php.

<?php

  // Инициируем сессию

  session_start();

  // Выводим содержимое суперглобального массива $_SESSION

  echo "<pre>";

  print_r($_SESSION);

  echo "</pre>";

?>

Результат работы скрипта выглядит следующим образом:

Array

(

    [name] => value

    [arr] => Array

        (

            [0] => first

            [1] => second

            [2] => third

        )

)

    1. Закрытие сессии

После завершения работы с сессией сначала нужно разрегистрировать все переменные сессии, а затем вызвать функцию unset():

Синтаксис:

unset($_SESSION["username"]);

    1. Пример простой сессии

Рассмотрим пример простой сессии, работающей с тремя страницами. При посещении пользователем первой страницы открывается сессия и регистрируется переменная $username. Соответствующий код реализации приведен в листинге:

<?

  session_start();

  $_SESSION['username'] = "maksim";

  echo 'Привет, '.$_SESSION['username']."<br>";

?>

  <a href="page2.php">На следующую страницу </a>

  1. Понятие шаблона. Шаблонизация в PHP. Шаблонизаторы.

Шаблонизатор (в web) — это программное обеспечение, позволяющее использовать html-шаблоны для генерации конечных html-страниц. Основная цель использования шаблонизаторов — это отделение представления данных от исполняемого кода. Часто это необходимо для обеспечения возможности параллельной работы программиста и дизайнера-верстальщика. Использование шаблонизаторов часто улучшает читаемость кода и внесение изменений во внешний вид, когда проект целиком выполняет один человек.

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

Шаблон для примера выше может выглядеть следующим образом:

<div class="post_entry">

<h2>{TITLE}</h2>

<div class="date">{CREATED} • Категория: <a href="{CATEGORY_LINK}">{CATEGORY}</a></div>

{CONTENT}

</div>

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

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

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

<?php

 

class QTemplate

{

private $content = NULL;

private $res_content = NULL;

 

function QTemplate($tpl_dir, $tpl_name)

{

if ( ! file_exists($tpl_dir . $tpl_name . '.tpl') ) return;

$this->content = file_get_contents($tpl_dir . $tpl_name . '.tpl');

}

 

function assign_vars($vars)

{

$this->res_content = $this->content;

 

foreach( $vars as $blockname => $value )

{

$this->res_content = preg_replace('/{' . $blockname . '}/i', $value, $this->res_content);

}

}

 

function render()

{

if ( $this->res_content == '' ) $this->res_content = $this->content;

 

return $this->res_content;

}

}

 

?>

Шаблонизатор представляет из себя PHP-класс QTemplate. При создании экземпляра класса предается путь к папке с шаблонами и имя шаблона. Метод assign_vars "натягивает" данные на шаблон, то есть заменяет псевдопеременные в шаблоне на соответствующие им данные. Соответствия передаются в аргументе vars, который должен представлять из себя массив со следующей структурой:

array(

'ИМЯ_ПСЕВДОПЕРЕМЕННОЙ' => 'ДАННЫЕ',

'ИМЯ_ПСЕВДОПЕРЕМЕННОЙ' => 'ДАННЫЕ',

'ИМЯ_ПСЕВДОПЕРЕМЕННОЙ' => 'ДАННЫЕ'

);

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

Метод render возвращает готовый HTML-код. Вызывается, соответственно, после замены псевдопеременных методомassign_vars.

А теперь давайте рассмотрим пример использования шаблонизатора:

<?php

 

$tpl_dir = 'templates/default/'; //--Путь к папке с шаблонами

 

require 'qtemplate.php'; //--Подключаем шаблонизатор

 

//--Тут должен находиться код получения статей из базы данных в массив $articles

 

$main_tpl = new QTemplate($tpl_dir, 'main'); //--Загружаем шаблон main

$article_tpl = new QTemplate($tpl_dir, 'article'); //--Загружаем шаблон article

 

$content = '';

 

//--"Пробегаемся" по всем статьям

foreach ( $articles as $article )

{

//--"Натягиваем" данные на шаблон

$article_tpl->assign_vars( array(

'TITLE' => $article['title'],

'CREATED' => $article['date'],

'CATEGORY_LINK' => '/' . $article['category_alias'] . '/' . $article['article_alias'],

'CATEGORY' => $article['category'],

'CONTENT' => $article['text']

) );

//--Генерируем HTML-код статьи

$content .= $article_tpl->render();

}

 

//--"Натягиваем" контент на главный шаблон

$main_tpl->assign_vars( array(

'TITLE' => 'Новости',

'CONTENT' => $content

) );

//--Генерируем HTML-код всей страницы и выводим его

echo $main_tpl->render();

 

?>

PHP-скрипт загружает два шаблона: main, содержащий структуру HTML-страницы (DOCTYPE, метатеги и т. д.) иarticle, содержащий структуру статьи. Код прокомментирован и, я надеюсь, предельно понятен. В цикле данные каждой статьи "натягиваются" на шаблон article, далее готовый HTML-код накопительно добавляется в переменнуюcontent. Полученный контент помещается в шаблон main. Это очень важная возможность — возможность заменять псевдопеременную одного шаблона результатом обработки другого шаблона (или нескольких шаблонов). В результате генерируется страница-категория со списком статей. Для более детального рассмотрения предлагаюскачать архив проекта, где вы найдете код шаблонизатора, тестовой страницы, а также необходимые шаблоны.

Преимущества, дающие использование шаблонов при генерировании кода HTML-страниц:

  • Во-первых, чистота кода. Программный код не содержит HTML-кода, поэтому легко читается. В то же время, шаблон содержит только HTML-код, в котором видно где и какие данные вставляются (для этого давайте осмысленные имена псевдопеременным).

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

  • Сайт может иметь несколько дизайнов. Чтобы полностью изменить дизайн сайта достаточно просто изменить путь к папке с шаблонами.

  1. Совместная интеграция PHP, MySQL и Apache.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]