Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Модульная структура сайта
 
 автор: BobiKK   (18.07.2006 в 10:28)   письмо автору
 
 

В общем, быдлокодю в свободное время сайт. И столкнулся с одной проблемкой. Что должен представлять из себя сайт с подключаемыми модулями? Как это реализовать?
В нете статей на этот счет не нашел (хотя и не искал особо :) ), так что изобретал велосипед.
Файл index.php представляет из себя что-то следующее

$v = new Show();
$menu = new ShowBody();

if (isset($_GET['mod']))
{
    $query = "SELECT * FROM ".PREFIX."modules WHERE name='".mysql_escape_string($_GET['mod'])."'";
    $res = mysql_query($query);
    if (!$res) exit(mysql_error());
    while ($result = mysql_fetch_assoc($res)) {
        if ($result['showheader'])
            $v->showHeader();
         if ($result['showcategory'])
             $menu->showHorizontalMenu($result['cat_name']);
        if ($result['showvermenu'])
            $menu->showVerticalMenu();
            
            include("modules/".$result['name'].".php");
            
        if ($result['showfooter'])
            $v->showFooter();
    }

}

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

   
 
 автор: cheops   (18.07.2006 в 12:14)   письмо автору
 
   для: BobiKK   (18.07.2006 в 10:28)
 

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

   
 
 автор: BobiKK   (18.07.2006 в 12:47)   письмо автору
 
   для: cheops   (18.07.2006 в 12:14)
 

Т.е. просто прописывать стандартные флаги, ключи, переменные в каждом модуле и потом уже их анализировать?

   
 
 автор: Snorri   (18.07.2006 в 14:49)   письмо автору
 
   для: BobiKK   (18.07.2006 в 12:47)
 

Почитайте про phpNuke или другие подобные проекты.
Информации очень много.

   
 
 автор: Loki   (18.07.2006 в 16:38)   письмо автору
 
   для: cheops   (18.07.2006 в 12:14)
 

Как раз над этим же размышляю... а как определить место модуля в структуре сайта? Все равно же придется настраивать.

   
 
 автор: cheops   (19.07.2006 в 00:08)   письмо автору
 
   для: Loki   (18.07.2006 в 16:38)
 

Да, к сожалению, при таком подходе про креативный дизайн придётся вероятно забыть, он будет иметь, как говорят дизайнеры, квадратно-гнездовой дизайн.

   
 
 автор: BobiKK   (26.07.2006 в 11:30)   письмо автору
 
   для: cheops   (19.07.2006 в 00:08)
 

Ну а если делать по-простому.
В админ. панели добавить функцию, которая читает католог ./modules, потом вытаскивает данные из таблицы modules, сравнивает их, говорит, который модуль не подключен и предлагает пользователю его подключить (занести запись в БД) вот с такими-то дефолными настройками.

   
 
 автор: Loki   (28.07.2006 в 22:33)   письмо автору
 
   для: BobiKK   (26.07.2006 в 11:30)
 

Ну представьте что у вас навигационное дерево с уровнем вложенности, например, три. в какой уровень должен автоматом попасть новый модуль?
Усложним задачу: а что если навигация сама по себе является модулем? и модет быть чем угодно: каким-нибудь деревом, какой-нибудь другой сложной иерархией, зависеть от выбранного языка или, например, зарегистрированности пользователя... тут вообще не угадаешь куда модуль должен подцепиться по дефолту... К сожалению, более умного варианта чем "ручками" я так и не придумал.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования