|
|
|
| В общем, быдлокодю в свободное время сайт. И столкнулся с одной проблемкой. Что должен представлять из себя сайт с подключаемыми модулями? Как это реализовать?
В нете статей на этот счет не нашел (хотя и не искал особо :) ), так что изобретал велосипед.
Файл 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
Вопрос: оптимально это или нет? | |
|
|
|
|
|
|
|
для: BobiKK
(18.07.2006 в 10:28)
| | Таблица жёстко связывает модули - вам их устанавливать и удалять придётся специальным инструментом, человек без подготовки может не поятнуть эту операцию. Модуль будет идеальным, если вдруг появилась директориия на сайте - он автоматически подключился, удалили директорию - он автоматически с сайта исчезает. | |
|
|
|
|
|
|
|
для: cheops
(18.07.2006 в 12:14)
| | Т.е. просто прописывать стандартные флаги, ключи, переменные в каждом модуле и потом уже их анализировать? | |
|
|
|
|
|
|
|
для: BobiKK
(18.07.2006 в 12:47)
| | Почитайте про phpNuke или другие подобные проекты.
Информации очень много. | |
|
|
|
|
|
|
|
для: cheops
(18.07.2006 в 12:14)
| | Как раз над этим же размышляю... а как определить место модуля в структуре сайта? Все равно же придется настраивать. | |
|
|
|
|
|
|
|
для: Loki
(18.07.2006 в 16:38)
| | Да, к сожалению, при таком подходе про креативный дизайн придётся вероятно забыть, он будет иметь, как говорят дизайнеры, квадратно-гнездовой дизайн. | |
|
|
|
|
|
|
|
для: cheops
(19.07.2006 в 00:08)
| | Ну а если делать по-простому.
В админ. панели добавить функцию, которая читает католог ./modules, потом вытаскивает данные из таблицы modules, сравнивает их, говорит, который модуль не подключен и предлагает пользователю его подключить (занести запись в БД) вот с такими-то дефолными настройками. | |
|
|
|
|
|
|
|
для: BobiKK
(26.07.2006 в 11:30)
| | Ну представьте что у вас навигационное дерево с уровнем вложенности, например, три. в какой уровень должен автоматом попасть новый модуль?
Усложним задачу: а что если навигация сама по себе является модулем? и модет быть чем угодно: каким-нибудь деревом, какой-нибудь другой сложной иерархией, зависеть от выбранного языка или, например, зарегистрированности пользователя... тут вообще не угадаешь куда модуль должен подцепиться по дефолту... К сожалению, более умного варианта чем "ручками" я так и не придумал. | |
|
|
|