Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Архитектура CMS 
:(
    Опции темы
gvozd
Дата 23.8.2007, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 25.7.2006

Репутация: нет
Всего: нет



Здравствуйте.
Помогите, пожалуйста, составить грамотно архитектуру CMS. А именно подключение модулей. Я задумал так:
- modules
--page (название модуля)
---admin.page.php (для админки)
---page.php (сам модуль)

Модули представлены в виде классов. Нужно динамически загрузить все модули и получить от них результат работы (HTML). Проблема заключается в динамическом создании экземпляра класса. Подскажите, как это грамотно сделать?
PM MAIL ICQ   Вверх
Vaulter
Дата 24.8.2007, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 6
Всего: 22



[code=php]
/** Функция вызова ЛЮБОГО метода практически любого класса системы
*
* Используется index.php, другими молями для вызова методов других модулей
* 
* @param string $modname имя модуля для вызова (имя класса)
* @param string $func - имя метода этого класса для вызова
* @param mixed $params - массив или список (много) аргументов этого метода
* @return mixed значение возвращаемое вызываемым методом
*/
function call($modname,$func,& $params = null, $innercall = false)
{//realize!
    //check for modules? TODO
    if(empty($GLOBALS[$modname]) || !is_object($GLOBALS[$modname]))
        $mod = new $modname();//quick init
    else
        $mod = & $GLOBALS[$modname];
    if($func) return $mod->$func($params);
    else return $mod->index($params);
}
/** Функция автозапуска классов. может представлять собой какойнибудь factory 
* в дальнейшем
*
* @see php.net/__autolo

Это сообщение отредактировал(а) Vaulter - 25.8.2007, 12:14
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 24.8.2007, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



gvozd, поиск. Уже обсуждений полфорума по данной теме!


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
gvozd
Дата 25.8.2007, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 25.7.2006

Репутация: нет
Всего: нет



Обсуждений полфорума, а конкретного ничего нет.
PM MAIL ICQ   Вверх
Master_
Дата 25.8.2007, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 31.1.2007

Репутация: нет
Всего: нет



Я делаю так:
./sources/modules/название_модуля.php

Для админки например ./sources/action_admin/модуль.php
PM   Вверх
-=Ustas=-
Дата 25.8.2007, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Цитата(gvozd @  25.8.2007,  09:12 Найти цитируемый пост)
Обсуждений полфорума, а конкретного ничего нет. 

Да что ты говоришь!!! А пол интернета завалено всякими CMS-ками... что, неохота ковыряться и разбираться в реализации, а???
Разбери одну, затем вторую, затем третью, смотри в каждой реализацию и ищи все минусы и плюсы в каждой, а затем собери все плюсы в одно и пожалуста, собирай свою cms-ку. Вот тебе конкретика!


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
gvozd
Дата 27.8.2007, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 25.7.2006

Репутация: нет
Всего: нет



Вот какой класс у меня получился:
Код

<?php
    defined('Page_Protect') or die('Access denied');
    
    class ModuleManager {
        var $RegisteredModules;
        var $Modules;
        var $AdminModules;

        function ModuleManager() {
            $this->RegisterModules();
            $this->LoadModules();
        }

        function RegisterModules() {
            $ModDir = 'modules';
            
            $Dir = opendir($ModDir);
            while($Res = readdir($Dir)) {
                if($Res != "." and $Res != ".." and $Res != ".htaccess") {
                    $this->RegisteredModules[] = $Res;
                }
            }
        }

        function LoadModules() {
            global $Core;
            $ModDir = 'modules';
            
            foreach($this->RegisteredModules as $k => $v) {
                if($Core->CoreMode == 0) {
                    if(file_exists($ModDir.'/'.$v.'/class.'.$v.'.php')) {
                        include_once($ModDir.'/'.$v.'/class.'.$v.'.php');
                        $this->Modules[$v] = new $v;
                    }
                } elseif($Core->CoreMode == 1) {
                    if(file_exists($ModDir.'/'.$v.'/admin.'.$v.'.php')) {
                        include_once($ModDir.'/'.$v.'/admin.'.$v.'.php');
                        $this->AdminModules[$v] = new $v;
                    }
                }
            }
        }

        function Test() {
            global $Core;
        
            if($Core->CoreMode == 0) {
                foreach ($this->Modules as $k => $V) {
                    $this->Modules[$k]->test();
                }
            } elseif($Core->CoreMode == 1) {
                foreach ($this->AdminModules as $k => $V) {
                    $this->AdminModules[$k]->test();
                }
            }
        }
    }
?>


Структура файлов:

-modules
--module1
---admin.module1.php
---class.module1.php
--module2
---admin.module2.php
---class.module2.php


Что скажете?
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0485 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.