HTML шаблон сайта на PHP

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

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

				$template =  new Template( 'sub.php' );
				$template->display();
				

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

				class  Template {
					const  DIRECTORY = './templates';
					protected  $path;
					public  function __construct( $name ) {
						$this->path  = sprintf( '%s/%s', self::DIRECTORY, $name );
					}
					public  function build();
					public  function display() {
						echo  $this->build();
					}
				}
				

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

				protected  $extendedTemplate = null;
					public  function extend( $name ) {
						$this->extendedTemplate  = newTemplate( $name );
					}
				

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

				protected  $sections = array();
				protected  $currentSection = null;
				public  function begin( $sectionName ) {
					ob_start();  // начать буферизацию вывода
					$this->currentSection  = $sectionName;
				}
				

Мы должны различать два случая: если $this->extendedTemplate имеет действительное значение, то выбранный нами метод должен сохранить содержимое в массиве, который отображается в начале раздела. В противном случае может произойти ошибка. Затем должен быть вывод содержимого разделов.

				public  function end() {
					if ( !is_null( $this->extendedTemplate )  ) { // текущая  подгруппа шаблона.
						// Читать  содержимое буфера и сбрасывает их
						$this->sections[ $this->currentSection  ] = ob_get_clean();
					} else { // текущий мастер шаблонов
						if ( isset( $this->sections[  $this->currentSection ] ) ) {
							ob_end_clean(); // drop default  content
							echo $this->sections[ $this->currentSection  ];
						} else {
							// Вывод  данных из буфера
							echo ob_get_clean();
						}
					}
				}
				// вызов следующего действия
				public  function setSections( $sections ) {
					$this->sections = $sections;
				}
				

Теперь самая важная часть урока. Метод Создание. Обратите внимание, что мы загрузим PHP шаблон только тогда, когда создадим метод build.

				public function build() {
					// начало буферизации
					ob_start();
					
					// подключаем файлы шаблона
					include $this->path;
					// получаем буфер данных
					$output = ob_get_clean();
					
					// проверяем, что мы имеем.
					if ( !is_null( $this->extendedTemplate )  ) {  
						$this->extendedTemplate->setSections( $this->sections );
					
						// отображаем шаблон.
						return  $this->extendedTemplate->display();
					} else { // мы отобразили  наш шаблон, больше ничего не нужно делать
						return $output;
					}
				}
				

Вот так происходит все волшебство. Файлы шаблона выглядят так:

main.php:

				<html>
					<head>
						<title><? $this->begin(  'title' ) ?>Заголовок<?  $this->end() ?></title>
					</head>
					<body>
						<? $this->begin( 'content' )  ?>
						Какой-то контент
						<? $this->end() ?>
					</body>
				</html>
				

sub.php:

				<?  $this->extend( 'main.php' ) ?>
				<?  $this->begin( 'title' ) ?>Мой  шаблон<?  $this->end() ?>
				<?  $this->begin( 'content' ) ?>
				<p>
					Мой контент
				</p>
				<? $this->end() ?>
				

Вот и все.

Просмотров: 7087      Опубликовал: Евгений Фединчик      Дата: 07.04.2010 14:26:52
  • Понравился урок? Добавьте его к себе в закладки.

    Последние уроки категории:

    Сокращение PHP кода

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

    Видимость переменных в PHP

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

    Как читать Rss ленты?

    Читалки и агрегаторы RSS используются для доступа, чтения и управления периодически-обновляемыми лентами RSS (или Atom), которые генерируются веб-сайтами. Эти ленты предоставляют доступ к последним материалам с этих сайтов.

    Установка и настройка PHP+Apache

    В этом уроке хотелось бы поднять очень интересную тему – Установка и настройка веб сервера PHP5 + Apache. В интернете довольно много различных инструкций по данной теме, но только вот в основном это копипаст, а не инструкция для человека, я же постараюсь объяснить все намного проще – на пальцах. Причина для установки локального вебсервера довольно много, например скорость выполнения и отладки скриптов, простота загрузки и модернизации контента и еще много чего.

    Как выбрать фреймворк

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

    Комментарии:

    • Денис 10.08.2010 17:15:45
      Очень бы не помешал полный листинг, а не по кускам.
      Ответить
    • Александр 03.08.2011 07:52:39
      Согласен с предъидущим коментарием. Лучше описание в листинг вставлять и код целиком выводить. Путает такая раздробленность. Сам сейчас осваиваю ООП в PHP. Тема интересная и полезная. Считаю приведённый пример реализвции шаблона перегруженым. Зачем нужно было указывать начало и конец, когда можно одной строчкой обойтись?! Типа {%content}? Сайт в закладке:) Спасибо!
      Ответить
    • Осталось: 1000 символов.
      Сохранить комментарий Отправка комментария
    lessons
    downloads
    search
    hosting

    Ищите хороший и не дорогой хостинг?

    Хостинг avahost.ua
    VPS VDS - виртуальный выделенный сервер
    sistems
    RBK Money

    Обменник.ws
    Статистика HitUa