Рубрика:
Веб /
Веб
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
Андрей Уваров, Дмитрий Горяинов
Fusebox в помощь веб-программисту
Любой действующий сайт нуждается в обновлении. От корпоративного «интернет-представительства» до частного фотоальбома. А значит перед любым разработчиком возникает проблема адаптации готовой или создания собственной системы управления сайтом.
Такие системы существуют в виде коммерческих и свободно распространяемых «движков», такие системы создаются и будут создаваться веб-разработчиками на самых различных языках программирования. Практически никогда такие системы не создаются «за раз». Их совершенствуют, дорабатывают, наделяют новыми возможностями.
Говоря другими словами, проблема управления сайтом рождает проблему обновления и сопровождения программного обеспечения. Не важно, на каком языке программирования вы пишете. Вы вынуждены переделывать свой или чужой код. Вы нарабатываете повторно используемые решения в виде модулей, классов, интерфейсов. Вы так или иначе приходите к использованию технологии в разработке своих проектов. Вот о технологии мы и поговорим.
Fusebox – это технология создания веб-приложений, начавшаяся с небольших модулей и развившаяся до применимости в средних и больших информационных системах. Изначально Fusebox создавалась для платформы Coldfusion. Сейчас существуют реализации для PHP, J2EE, MS ASP и Lasso. Т.е. для её применения вам скорее всего не придется усаживаться за изучение нового языка программирования.
Основные цели, преследуемые Fusebox:
- Читаемость кода;
- Структурность и законченность приложений (Applications);
- Наглядность кода программ;
- Упрощение проектного менеджмента;
- Защищённость кодов и проекта в целом;
- Утилизация кода;
- Создание портативных «Partapplications».
Fusebox задумывалась как модульная технология создания веб-приложений. Пространство приложения определяется (задается) каталогом на веб-сервере.
Fusebox-приложение состоит из трех основных компонентов: оператор выбора (switch), обработчик события (fuseaction) и подключаемые модули (fuse).
Оператор выбора (switch) – это своеобразный менеджер задач – вся работа приложения ведется через него. Обращения к той или иной функции приложения (выбор) осуществляется в зависимости от переданного оператору значения параметра «fuseaction». Метод передачи параметра определяется Fusebox автоматически. Вы можете передать эту переменную методом POST или в строке запроса и быть уверенным, что ваша программа получит передаваемое значение.
Таким образом, внутри оператора выбора описываются возможные значения параметра «fuseaction» и обработка (fuseaction) этого значения приложением: запуск соответствующего кода или подключение нужного модуля (fuse). Модуль может быть выполнимым сценарием или просто набором страниц.
Теперь посмотрим все это на конкретном примере. В качестве платформы для реализации используем PHP. Предполагается, что у читателя установлен интерпретатор PHP.
Создайте для примера подкаталог «fuse_sample» внутри корневой директории веб-сервера. Для пользователей веб-сервера Apache (http://httpd.apache.org) это по умолчанию каталог /usr/local/apache/htdocs или /var/www (этот параметр хранится в файле настроек httpd.conf и называется ServerRoot), а для пользователей MS-IIS (http://www.microsoft.com/iis), скорее всего каталог C:\inetpub\wwwroot.
Файлы Fusebox 3.0 for PHP: http://www.fusebox.org/index.cfm?&fuseaction=phpframework.default (а так же для других реализаций) можно получить по интернет-адресу: http://www.fusebox.org/index.cfm?&fuseaction= framework.languages. Выбираем нужную нам ссылку («Fusebox 3.0 for PHP»: http://www.fusebox.org/index.cfm?& fuseaction=phpframework.default). На следующей странице выбираем ссылку «Download Core Files».
В индексном файле index.php описывается только одно действие – выбирается ядро Fusebox для использования. Нужное значение зависит от того, какую версию PHP вы используете. Если этого не происходит, то можно выбрать вручную, закомментировав соответствующие строки, или переименовать файл fbx_Fusebox3.0_PHP4.0.6.php или fbx_Fusebox3.0_PHP4.1.x.php в index.php.
Мы создадим крайне простое приложение. Оно будет иметь нижнее навигационное меню для перемещения по страницам. На страницах мы будем выводить идентифицирующий страницу текст.
Первым делом (помните основные компоненты приложения?) посмотрим на оператор-переключатель. Он описан в файле fbx_Switch.php. Изменим его первые две ветви («mainpage» и «Fuse-box.defaultFuseaction») на:
switch($Fusebox["fuseaction"]) {
case "mainpage":
case "Fusebox.defaultFuseaction":
include( "out_simple.php" );
break;
default: //остальное содержимое оставим без изменений
Создадим в том же каталоге (fuse_sample) скрипт out_simple.php следующего содержания:
<?php echo"This is main page"; ?>
Замечание: никогда не ленитесь писать «<?php» при оформлении PHP-кода.
И скрипт out_main.php, который будет отрабатывать по умолчанию:
<html>
<body>
<table width="50%" border="1" cellpaddin="3" cellspacing="0" align="center">
<tr>
<td colspan="0" align="center">
<h2>Sample application</h2>
</td>
</tr>
<tr>
<td width="100%" valign="top">
<?php echo $Fusebox[ "layout" ]; ?>
</td>
</tr>
<tr>
<td colspan="2">
<?php
Module( "index.php", array( "fuseaction"=>"bar.menu", "stoplayout"=>"true" ) );
?>
</td>
</tr>
</table>
</body>
</html>
Этот пример – простая и надуманная демонстрация работы технологии Fusebox. В реальном программировании не стоит вот так совмещать HTML- и PHP-коды. Да, язык PHP (и не только он) это позволяет и часто это преподносится как возможность быстро научиться писать простые сценарии.
В начале статьи мы говорили о том, что одна из наших задач – обновление и сопровождение программного обеспечения. Так вот, подобная «мешанина» крайне сложно читается даже через пару месяцев. А использовать такое смешанное кодирование при групповой работе – непростительная потеря времени.
Ну и еще один довод: разделив HTML- и PHP-коды с помощью любой системы шаблонов, мы заранее позаботимся о более легкой возможности сменить дизайн сайта. HTML-верстальщик сможет работать именно с HTML-частью. А от программиста не потребуется переносить все изменения в верстке в код PHP-скриптов.
В файле fbx_Settings.php изменим первое условие на:
//In case no fuseaction was given, I'll set up one to use
//by default
if( !isset( $attributes[ "fuseaction" ] ) ) {
$attributes["fuseaction"] = "home.mainpage";
}
Этим мы определим новое значение «по умолчанию» для параметра «fusecation».
Далее мы пропишем в файле fbx_Circuits.php (описывает состав приложения) следующее:
$Fusebox["circuits"]["home"] = "fuse_sample";
$Fusebox["circuits"]["bar"] = "fuse_sample/bar";
Так мы создаём привязку к структуре каталогов нашего приложения. Основное приложение располагается в каталоге «fuse_sample», а его подприложение – «fuse_sample/bar».
В файл fbx_Layouts.php пропишем:
if ( $attributes["stoplayout"] ) {
$Fusebox["layoutFile"] = "";
$Fusebox["layoutDir"] = "";
}
else {
$Fusebox["layoutFile"] = "out_main.php";
$Fusebox["layoutDir"] = "";
}
Займемся подприложением. В каталоге «fuse_sample» создадим подкаталог «bar» и скопируем в него файлы fbx_Settings.php, fbx_Layouts.php, fbx_Switch.php.
Сейчас наша цель – создать горизонтальное меню. Изменим содержимое файла fbx_Switch.php на следующее:
switch($Fusebox["fuseaction"]) {
case "mainpage":
case "Fusebox.defaultFuseaction":
echo "Bar's main page";
break;
case "menu":
$XFA[ "main" ] = "home.mainpage";
$XFA[ "bar1" ] = $Fusebox[ "thisCircuit" ] . ".bar1";
$XFA[ "bar2" ] = $Fusebox[ "thisCircuit" ] . ".bar2";
$XFA[ "bar3" ] = $Fusebox[ "thisCircuit" ] . ".bar3";
include( "out_barmenu.php" );
break;
case "bar1":
echo "this is content of bar1";
break;
case "bar2":
echo "this is content of bar2";
break;
case "bar3":
echo "this is content of bar3";
break;
default: //остальное содержимое оставим без изменений
Содержимое файла fbx_Layouts.php изменим на:
$Fusebox["layoutFile"] = "";
$Fusebox["layoutDir"] = "";
И наконец, создадим сам скрипт-меню out_barmenu.php:
<?php
echo '<center><strong>';
echo '<a href="index.php?fuseaction=home.mainpage">Main</a> | ';
echo '<a href="index.php?fuseaction='.$XFA[ "bar1" ].'">Bar 1</a> | ';
echo '<a href="index.php?fuseaction='.$XFA[ "bar2" ].'">Bar 2</a> | ';
echo '<a href="index.php?fuseaction='.$XFA[ "bar3" ].'">Bar 3</a>';
echo '</strong></center>';
?>
И наше простейшее приложение готово.
В реальности все несколько сложнее, но принцип тот же. Fusebox и его компоненты – это каркас разработки, в него можно включать сколько угодно подчиненных приложений, работающих независимо.
Так как все запросы к приложению в Fusebox совершаются через один-единственный файл, то целесообразно организовать перенаправление любых запросов пользователя на него. Это нужно для предотвращения попыток излишне любопытного пользователя обратиться к какому-то элементу нашего приложения напрямую (например, ввести в адресной строке браузера http://our_site/fuse_sample/out_main.php).
Для этого есть несколько способов. Если вы используете веб-сервер Apache, имеете возможность работы с файлами конфигурации доступа к директории (файлы .htaccess) и у вас установлен модуль Rewrite, это можно сделать следующим образом. Создайте в каталоге вашего приложения (fuse_sample) файл .htaccess следующего вида:
RewriteEngine on
Options +FollowSymlinks
DirectoryIndex index.php
RewriteBase /fuse_sample/
RewriteCond %{REQUEST_FILENAME} !(index.php)
RewriteRule ^(.*)$ index.php [QSA,R]
Таким образом мы перенаправим все HTTP-запросы к подкаталогу fuse_sample на файл /fuse_sample/index.php. Подробности о модуле Rewrite и использовании директив перенаправления можно найти в документации к веб-серверу Apache.
Подведем некоторые итоги. Применение технологии Fusebox позволяет разработчикам вести параллельную работу над программным продуктом, не мешая друг другу. А выделенные и наработанные в процессе модули-подзадачи легко встраиваются в новые проекты с той же архитектурой, облегчая повторное использование кода.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|