ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра

Пишем свой портал php
  #1  
Старый 31.07.2007, 10:15
Аватар для .::Sim[B]ioZ::.
.::Sim[B]ioZ::.
Banned
Регистрация: 30.07.2007
Сообщений: 3
Провел на форуме:
18301

Репутация: -19
По умолчанию Пишем свой портал php

Хай челы))))
С вами опять я а то есть .::Sim[B]ioZ::.
Пишем портал на php

Я попытаюсь тут разъяснить то, как я подхожу к написанию сайтов, где могут применять подключаемые модули. Пример тому известный скрипт 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 "& lt;/td>
</tr>
<tr>
<td width='100%' align='left' valign='top' colspan='2'
  bgcolor='#DDFFFF'> </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");
?>
 

  #2  
Старый 31.07.2007, 10:41
Аватар для gibson
gibson
Moderator - Level 7
Регистрация: 24.02.2006
Сообщений: 447
Провел на форуме:
2872049

Репутация: 705
Отправить сообщение для gibson с помощью ICQ
По умолчанию

Скопипащено с какого-то известного ресурса=) модульная система не визде применяется восновном в phpnuke поэтому видимо это от туда. Вообще, статей подобных никто по моему не писал (:
 

  #3  
Старый 31.07.2007, 11:10
Аватар для groundhog
groundhog
Познавший АНТИЧАТ
Регистрация: 12.05.2007
Сообщений: 1,235
Провел на форуме:
2238549

Репутация: 1318


Отправить сообщение для groundhog с помощью ICQ
По умолчанию

Отстрелите ему руки...
 

  #4  
Старый 31.07.2007, 11:12
Аватар для x-demon
x-demon
Постоянный
Регистрация: 10.06.2007
Сообщений: 476
Провел на форуме:
924649

Репутация: 299
Отправить сообщение для x-demon с помощью ICQ Отправить сообщение для x-demon с помощью AIM Отправить сообщение для x-demon с помощью MSN Отправить сообщение для x-demon с помощью Yahoo
По умолчанию

Кажется парнишка добьется бана =) почему нельзя создать одну тему и в ней все свои наработки кидать?
 

  #5  
Старый 31.07.2007, 11:25
Аватар для Raz0r
Raz0r
Участник форума
Регистрация: 07.01.2007
Сообщений: 259
Провел на форуме:
309455

Репутация: 41
По умолчанию

Цитата:
модульная система не визде применяется восновном в phpnuke
Товарищ, это Вас отстрелить надо =\
 

  #6  
Старый 31.07.2007, 11:26
Аватар для n1†R0x
n1†R0x
Постоянный
Регистрация: 20.01.2007
Сообщений: 787
Провел на форуме:
2924346

Репутация: 1719


Отправить сообщение для n1†R0x с помощью ICQ
По умолчанию

мде
http://www.codenet.ru/webmast/php/modules.php

Автор: Ray Adams
 

  #7  
Старый 31.07.2007, 11:27
Аватар для Inluck
Inluck
Banned
Регистрация: 26.07.2007
Сообщений: 8
Провел на форуме:
183508

Репутация: -18
По умолчанию

n1†R0x))))
форбидден линк

http://www.codenet.ru/webmast/php/modules.php
не успел я=\
 

  #8  
Старый 31.07.2007, 11:35
Аватар для nerezus
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

Автору оторвать руки. До жопы.
Закрыто.
 
Закрытая тема



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Books PHP FRAGNATIC PHP, PERL, MySQL, JavaScript 186 21.02.2010 02:41
На PHP, как на "Новые ворота"... Mertvii-Listopad Чужие Статьи 7 18.09.2006 12:42
Безопасность в Php, Часть Iii k00p3r Чужие Статьи 0 11.07.2005 19:02
Пишем Php код, устойчивый к ошибкам k00p3r Чужие Статьи 0 10.07.2005 22:34
Защищаем Php. Шаг за шагом. k00p3r Чужие Статьи 0 13.06.2005 11:31



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ