[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]







kritik2011
Ответов: 0
04-01-12 11:23



   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные



Web - программирование / PHP /

Создаем движок для сайта на PHP

Argon
http://argon.com.ru/

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

Статья рассчитана на людей, хоть чуть-чуть знающих PHP, поэтому я не буду зря стучать по клаве для разъяснения «что такое движок для сайта» или преподавания «основ PHP».

Цель

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

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

Приступим к созданию

Создаем стандартный PHP-файл с таким содержанием (далее все, что выделено в рамочки, является рабочим PHP-кодом):<?php

# Argon PHP-SiteEngine 0.5
# Copyright 2003-2004 Argon
# http://argon.com.ru/

Для совместимости с большинством конфигураций PHP, вставляем следующую строку:

extract($HTTP_GET_VARS);

PHP в безопасной конфигурации хранит все данные, переданные скрипту методом GET (то есть в адресной сроке), в специальном массиве $HTTP_GET_VARS. Эта команда извлекает ключи и соответствующие им значения из этого массива в обычные переменные.

С этого момента, если строка запроса к скрипту выглядит так:

http://argon.com.ru/engine.php?p=/windows/winxp/

то нашему скрипту движка становится доступна переменная «$p» со значением «/windows/winxp/».

$cntext='.txt';
$cntdir='cnt';

Здесь мы задаем в переменной «$cntext», какое расширение будут иметь файлы, содержащие текстовое наполнение сайта. А в переменной «$cntdir» — директорию на сервере, в которой будут храниться все эти файлы.

Договоримся, что в переменной «$p» мы будем передавать скрипту относительный путь к текстовому файлу, который будем вставлять в скелет страницы.

Если к скрипту нашего движка обратиться без параметра «$p», то мы будем выводить главную страницу сайта:

if(!$p)$p='/';

Считается хорошим тоном, если адрес главной страницы какого-нибудь раздела на сайте представлен как путь к директории. Но ведь мы не можем вставлять в каркас страницы директорию… Поэтому, если относительный путь заканчивается слешем («/»), то мы этот слеш заменяем на «/index»:

$p=ereg_replace('/$','/index',$p);

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

$l=$cntdir.$p.$cntext;

Поясню на примере два предыдущих абзаца. При запросе

http://argon.com.ru/engine.php?p=/windows/winxp/

переменная «$p» (относительный путь) будет иметь значение «/windows/winxp/», а переменная «$l» — значение «cnt/windows/winxp/index.txt».

Делаем уникальные заголовки страниц

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

Пример: <!-- Заголовок страницы -->

А следующая команда будет выдирать из файлов с контентом названия страниц в переменную «$title»:

$file=fopen($l,'r');$title=substr(substr(fgets($file,512),5),0,-6);fclose($file);

Теперь все готово для генерирования конечного документа.

Генерируем конечный документ

echo('<html><head><title>');

Тут, надеюсь, все понятно.

Теперь вставляем сам заголовок:

echo($title);

Если нужно, то к этому заголовку можно приписать и название сайта, вот так:

echo(' / Название сайта</title>');

Здесь можно вписать все необходимые теги в секцию «head»:

echo('<meta name="keywords" content="argon, hardware, software, windows, internet, humor, other">
<link rel="stylesheet" type="text/css" href="default.css">');

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

echo('</head><body>[дизайн шапки]');

Если необходимо в каком-нибудь месте вывести заголовок страницы, то смело используем переменную «$title»:

echo('[дизайн заголовка1]'.$title.'[дизайн заголовка2]');

Вставляем код, который нужно добавить до вставки основного контента:

echo('[дизайн контента1]');

И самый ответственный момент — вставляем сам контент

:include($l);

Дальше все просто: заканчиваем страницу:

echo('[дизайн контента2][дизайн подвала]</body></html>');
?>

Готово

Осталось только проставлять в ссылках относительный путь к нужному включению, например, так:

/index.php?p=/internet/webmastering/phpoptim

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

Теперь приведем скрипт в более легкий для сервера вид, руководствуясь советами статьи «Оптимизация PHP-скриптов».

<?php

# Argon PHP-SiteEngine 0.5
# Copyright 2003-2004 Argon
# http://argon.com.ru/

extract($HTTP_GET_VARS);
$cntext='.txt';
$cntdir='cnt';
if(!$p)$p='/';
$l=$cntdir.ereg_replace('/$','/index',$p).$cntext;
$file=fopen($l,'r');$title=substr(substr(fgets($file,512),5),0,-6);fclose($file);
echo('<html><head><title>' . $title . ' / Название сайта</title><meta name="keywords" content="argon, hardware, software, windows, internet, humor, other"><link rel="stylesheet" type="text/css" href="default.css"></head><body>[дизайн шапки][дизайн заголовка1]'.$title.'[дизайн заголовка2][дизайн контента1]');
include($l);
echo('[дизайн контента2][дизайн подвала]</body></html>');
?>

Как работает этот скрипт «вживую» и пример организации контентных файлов можно посмотреть здесь.

Все только начинается…

Просто? Просто! Такой же движок можно реализовать и на SSI, и даже на JavaScript… Но я привел лишь основы. Я не стал бы писать эту статью, если бы этот движок не был универсален и масштабируем. К нему можно прикрутить фичи практически любой сложности, например:

  • свой дизайн для каждого раздела сайта или типа страниц (статья, список статей, главная)
  • вставка своего описания и ключевых слов для каждого документа
  • дополнительные динамические вставки (например, случайный анекдот)
  • вывод определенных служебных страниц (например, в случае ошибки)
  • автоматическая переадресация
  • отсутствие знака «?» в строке адреса (используя технологию mod_rewrite)
  • подсчет времени генерации страницы

Реальную работу всего вышеперечисленного можно увидеть, побродив по сайту, на котором вы читаете статью…

Если у вас возникли вопросы или предложения, обращайтесь на mail@argon.com.ru .

Неглохнущего вам движка!



Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - программирование / PHP /

GTK+: перспективы развития
02-03-2010   

Библиотека GTK+ прошла долгий путь развития и сейчас очень популярна. GNOME, одна из ведущих оконных сред, использует GTK+ почти исключительно, GIMP построен на GTK+, множество коммерческих разработчиков ПО, таких как Abobe, NVidia и VMware, решили использовать эту библиотеку в качестве графической основы для своих продуктов... подробнее

Кол. просмотров: общее - 1794 сегодня - 3

Новостной портал
13-11-2009   

Slashdot.org – популярный новостной портал с посещаемостью 50 млн. человек в месяц. Авторы проекта добились такого успеха, предоставляя пользователям свежие и интересные новости из мира IT... подробнее

Кол. просмотров: общее - 2081 сегодня - 3

Параллельное выполнение скриптов может нарушить целостность информации в файлах
13-11-2009   

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

Кол. просмотров: общее - 1900 сегодня - 3

No spam.php
10-11-2009   

...и снова о спаме. Кто о нем только не писал, и все писали, что это плохо и ай-яй-яй. Я не буду оригинальничать, и тоже скажу – это плохо. Это ай-яй-яй. Как бороться со спамерами со своей стороны... подробнее

Кол. просмотров: общее - 1704 сегодня - 2

Начинаем работу с рисунками в php для Windows
10-11-2009   

Эта статья даст вам общее представление о том, как создавать, обрабатывать и выводить рисунки в PHP4 для Windows... подробнее

Кол. просмотров: общее - 2068 сегодня - 1



  © WWW.COMPROG.RU ® Все о программировании - 2009 | Designed and Powered by Zaipov Renat | Разное