Модульное программирование на PHP или как написать маленький портал.

www.karman.com.ua
портал о хостинге в Украине
Хостинг + Украина = Karman.com.ua

Сайт от А до Б

/

Основы сайта

/

Интересные скрипты

/

Изучаем PHP

/

Как заработать на сайте

/

Раскрутка сайта

/

CMS


Модульное программирование на PHP или как написать маленький портал. 

Еще по теме:
  "1C-Битрикс" выпустила решение для корпоративных порталов
  Код PHP в html и закачка на хостинг
  Написание автоматических тестов и среда PHPUnit
  Посетителям портала karman.com.ua
  Хостинг с PHP и MySQL. Аренда VPS
  портал, который работает на выделенном сервере компании HostPro
  Тех. поддержка Hvostingа ЛУЧШАЯ!!! Не верите? А кому ещё хостер правил PHP скрипты?!
  Где посмотреть настройки PHP.ini

Я попытаюсь тут разъяснить то, как я подхожу к написанию сайтов, где могут применять подключаемые модули. Пример тому известный скрипт PHPNuke. Как бы не ругали его, подход, примененный в нем, к модульному программированию очень удобен. Но из-за корявости общего кода применять такой скрипт на серьезных сайтах, точнее скажем порталах, с большим количеством посетителей, не рекомендуется. Почему? Скрипт работает медленно, очень большая нагрузка на базу данных. Можно еще очень много чего описать, но это уже материал для другой статьи. Если кому интересно , то в интернете полно описаний этого движка. В «неудобоваримости» PHPNuke я убедился сам. Мой основной проект NVIDIA BIOS Collection в начала базировался на PHPNuke, но постоянные проблемы с хостингом заставили меня начать разработку своей система портала с нуля. Из PHPNuke я взять только суть модулей, все остальное же делал сам. И так для начала. Прежде всего, надо продумать систему каталогов, что и где будет лежать. Вот примерный вариант.

/
/mods/ - каталог для хранения модулей
/img/ - картинки
/include/ - каталог вспомогательных файлов
это что нам сейчас пока надо. Применять блоки и скины мы пока не будем. В моем портале также были другие каталоги
/blocks/ - Тоже своего рода модули, но не выводящие сами информацию, а возвращающие заполненную переменную.
/js/ - каталог для Java скриптов
/theme/ - каталог выбора тем или, грубо говоря, набор скинов для сайта.
/files/ - файлы для скачивания
ну и другие каталоги.

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

top.php
<?php
echo "<html>

<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>
<title>$PAGE_TITLE</title>
</head>

<body>

<table border='0' cellpadding='0' cellspacing='0' style='border-collapse: collapse' bordercolor='#111111'
width='100%' id='AutoNumber1'>
<tr>
<td width='100%' colspan='2' bgcolor='#DDFFFF'>
<p align='center'>здесь выводится шапка</td>
</tr>
<tr>
<td width='17%' align='left' valign='top' bgcolor='#FFDFFF'><b>Меню сайта</b><p>
<b>- </b><a href='index.php?mod=mod1'>Модуль1</a><br>
- <a href='index.php?mod=mod2'>Модуль2</a></td>
<td width='83%' align='left' valign='top'>";
?>

Предвижу комментарии, где скажут, почему я не вывожу HTML код отдельно, а php отдельно. Я приучил себя к написанию 100% PHP кода, с одной стороны не очень и красиво может выглядеть, но мне так удобнее. Если кто-то хочет писать по- другому, то тут я не советчик. Заметьте переменную $PAGE_TITLE в top.php. В моей реализации вся информация о модулях храниться в базе данных, где помимо имени файла модуля храниться также и его название, которое потом и кладется в $PAGE_TITLE, для вывода его в головок браузера.

bottom.php
<php
echo "</td>
</tr>
<tr>
<td width='100%' align='left' valign='top' colspan='2' bgcolor='#DDFFFF'>&nbsp;</td>
</tr>
</table>

</body>

</html>";
?>

Также создадим файл конфигурации config.php и положим его в каталог include.

config.php
<?php
#Модуль по умолчанию
$sys_def_mod="mod1";

?>

Вот примерная схема работы index.php

<?php
include("inc/config.php");
if (!isset($mod) || ($mod=="") || (!file_exists ("mods/$mod.php"))) {
$mod=$sys_def_mod;
#Проверка на существование переменной $mod, и существования такого модуля
# если неверное условие то присваиваем ему значением модуля по умолчанию
}
$PAGE_TITLE="Модуль $mod";
include("inc/top.php");
include("inc/$mod.php");
include("inc/bottom.php");
?>
Теперь создадим два файла mod1.php и mod2.php и положим их в каталог mods.
mod1.php
<?php
if (!eregi("index.php", $PHP_SELF)) { die ("Access denied"); }
echo "Это модуль номер 1!<br>";
echo "А <a href='index.php?mod=mod2'>здесь</a> можно посмотреть на модуль номер 2";
?>
mod2.php
<?php
if (!eregi("index.php", $PHP_SELF)) { die ("Access denied"); }
echo "Это модуль номер 2!<br>";
echo "А <a href='index.php?mod=mod1'>здесь</a> можно посмотреть на модуль номер 1";
?>

Поясню немного вот эту строку

if (!eregi("index.php", $PHP_SELF)) { die ("Access denied"); }

В каждый модуль желательно включать такую проверку во избежании вызова файла модуля вне самого index.php. На примере моего портала до вызова модуля у меня идет подключение в базе данных, считывание некоторых глобальных переменных и без них, ни один модуль сам по себе работать не сможет. Так что лучше всего просто запретить вызов модуля напрямую. Вызов модулей в данном случае производится через строку в виде index.php?mod=имя модуля, но тут можно применить и систему ЧПУ. Тогда URL примет вид index.php/имя модуля/

Вот в принципе очень грубая схема реализации модулей. Можно добавить любой модуль, просто положив его в каталог mods/ и придерживаясь общей концепции работы, построить очень сложный сайт. В чем удобства работы? По сути вы отодвигаете от себя основную заботу по натягиванию кода на дизайн. Это делает один раз в index.php. Сам же модуль должен только работать и приносить пользу. Централизация сбора основной информации из базы или конфигурационного файла, глобальные переменные сайта, информация о пользователе и т.д. С другой стороны есть недостатки (хотя при определенном взгляде они не кажутся недостатками), скажем надо четко следить за тем какие имена переменных используются до модуля, чтобы не перезаписать, случайно, их внутри модуля. Один раз у меня такое случилось. После такого случая, я взял для себя за правило называть системные переменные в таком виде $sys_имя переменной. Другой очевидный недостаток это трудность реализации разных вариантов дизайна для разных модулей. Но! Тут есть выход тоже.

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

К примеру, наши простые модули можно модифицировать в таком варианте.

<?php
if (!eregi("index.php", $PHP_SELF)) { die ("Access denied"); }
$PAGE_TITLE="Это Я, модуль номер 1!!!";
include("inc/top.php");
echo "Это модуль номер 1!<br>";
echo "А <a href='index.php?mod=mod2'>здесь</a> можно посмотреть на модуль номер 2";
include("inc/bottom.php");
?>


Чтобы обсудить это в форуме, нажмите здесь.


Хостинг-источник: http://karman.com.ua, http://www.dmsdesign.ru/php8.html
  Что PHP означает?
  Права доступа к PHP-скриптам.


Есть вопросы о хостинге и о сайтах?
и получи ответ от профессионалов, которые обожают помогать людям :).
Еще по теме:
  PHP и HTML
  10-страничная бяка зарабатывает в разы больше, чем портал
  После установки поддержки разделения в MySQL, Apache выдаёт дампы сразу после загрузки libPHP4.so. Можно ли это исправить?
  Клиентские библиотеки MySQL больше не включены в PHP 5, как это отразится на мне? Могу ли я всё так же использовать MySQL c PHP? Я пытаюсь работать с MySQL и получаю ошибки "function undefined"
  Я обновился до PHP 4 и теперь mysql постоянно выдает "Warning: MySQL: Unable to save result set in ..." (Предупреждение: MySQL: Не могу сохранить результат в ...). Что это?
  Я слышал, что можно получить доступ к Microsoft SQL серверу из PHP. Как?
  Где можно найти старые версии PHP?
  Я получил последнюю версию исходного кода PHP из CVS. Что нужно для компиляции его под Windows?
  Как подключить библиотеки PHP?
  Доступны ли прекомпилированные бинарники PHP?
  Где я могу взять PHP?
  Какие отличия между PHP 3 и PHP 4?
  Какая связь между версиями PHP?
© СПД Праведно-Счастливый Аладдин Ярославович, 2004-2008. Все права защищены. При цитировании материалов ссылка на www.karman.com.ua обязательна. Редакция "Кармана" может не разделять точку зрения авторов статей, сообщений и ответственности за их содержание не несет.

Быстрый переход к содержимому сайта Karman.com.ua:
Новости, советы, углубленные знания, знания для новичков, законодательство, интересные скрипты, фотогалереи, отчеты, статьи о хостинге: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24
Часто задаваемые общие вопросы о хостинге, про FTP, PHPMyAdmin и MySQL, CPanel, Предустановленные скрипты, WHM, Cron, .htaccess, SSH, Паролирование директорий, О доменах, о работе с сайтом, о Раскрутке сайта, об Электронной почте, про Основы web-программирования: 0, 1
Энциклопедия основных терминов хостинга, программного обеспечения, железной стороны хостинга, технологий, электронной почты и доменов: 0, 1, 2, 3, 4, 5, 6
Сайты о хостинге (форумы, хостинг-провайдеры, студии веб-дизайна, домен-регистраторы, инструментарии в помощь вебмастеру): 0, 1, 2

Rambler's Top100