ФорумПрограммированиеPHP для идиотов → своя CMS, правильное прикрепление модулей к системе

своя CMS, правильное прикрепление модулей к системе

  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 13 августа 2008 г. 15:03

    Вообщем решил писать свою cms, собсн как идет подключения модуля?
    $module = $_GET['module'];
    include_once ('modules/'.$module.'/index.php');


    разумеется  $_GET['module'] фильтруется, проверяется на наличие включенности и т.п

    есть какие соображения?


  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 13 августа 2008 г. 15:21, спустя 18 минут 5 секунд


    разумеется  $_GET['module'] фильтруется, проверяется на наличие включенности и т.п


    1. проверить регуляркой на допустимость имени модуля
    2. проверить на существование инклюдящийся файл

    ЗЫ. Ты уверен, что это вопрос в рубрику для "профи"?
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 13 августа 2008 г. 15:33, спустя 11 минут 39 секунд

    AlexB, ты уверен что твой ответ в рубрику "для профи"

    ответ в этой рубрике должен выгядеть так

    из твоего $_GET['module'] ты узнаешь есть ли такой модуль

    $module = $ModuleFactory->isModuleExists($_GET['module'])

    isModuleExists () {
    $res = $db->Exec("SELECT * FROM modules WHERE module = $_GET['module']");
    return $res;
    }


    PS на правах стеба

    проверяешь права пользователя
    $AccessContriller->isUserAllowed($user,$module)


    потом создаешь модуль
    $mod = $ModuleFactory->populate($module)


    и запускаешь
    $mod->init()



    PS на правах стеба
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 13 августа 2008 г. 22:22, спустя 6 часов 49 минут 31 секунду

    У меня так. В админке есть таблица модулей, там юзер выбирает, какие модули включить и т.п. (короче управляет модулями). Включенные модули заносятся в БД. Потом при заходе на сайт, включенные модули инклудятся, а в них уже ставится условие (в модулях). Пример модуля:

    <?php
    if ($kernel->url_segments[0] == 'test') // если url имеет такой вид "test/blah/blah/blah/", то выполняется условие (то есть активируется модуль)
    {
    // действия
    }
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 13 августа 2008 г. 23:31, спустя 1 час 8 минут 30 секунд

    Зачем инклюдить то, что не будет выполняться? =)
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 14 августа 2008 г. 0:12, спустя 41 минуту 3 секунды

    если url имеет такой вид "test/blah/blah/blah/


    ну я так понимаю если у тебя юрл такой… там наверно ты его потом вырезаешь

    ?module=news_and_act_add_news ? :)

    я думаю так… ?module=news&act=add

    потом мы просто ищем $_GET['module'] в таблице и даем доступ\ не даем

    вообще я мавра поддерживаю…

    а как бы sap ты сделал? :)

    я так понимаю тут без инклуда не обойтись…
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 14 августа 2008 г. 0:15, спустя 3 минуты 7 секунд

    ну имею ввиду инклудить не как у Икса в третьей степени :)
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 14 августа 2008 г. 1:06, спустя 50 минут 40 секунд

    Pasha, я в базе проверяю :) Если модуль существут и влючен, то инклюд.
    Ну и тоже Мавра поддержу +)))
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 14 августа 2008 г. 1:13, спустя 7 минут 46 секунд

    Бред какой-то сплошной …
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 14 августа 2008 г. 10:15, спустя 9 часов 1 минуту 37 секунд

    Зачем инклюдить то, что не будет выполняться? =)

    Правда, нужно будет переделать. Еще можно так. Пусть каждый модуль будет классом. Тогда если url имеет такой вид "test/1/2/", то инклудится класс test и в нем вызывается конструктор, которому передаются 2 параметра — 1 и 2, и модуль уже делает с этими параметрами что надо.
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 14 августа 2008 г. 10:59, спустя 43 минуты 59 секунд

    ׳, не неси чушь

    каждый модкль должен быть классом но далеко не одним, тут как раз очень хорошо подошол бы интерфейс с набором экшенов типа init(), make(), show() которые вызываються какимто контроллером
    не факт что конструктору вабще нужны параметры из урла, я бы ему скорее скармливал ему какието конфиги а параметры уже в init пихал бы

    ЗЫ почитай какуюнибудь книгу по проектированию и по паттернам обязательно

  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 14 августа 2008 г. 12:01, спустя 1 час 1 минуту 27 секунд

    ЗЫ почитай какуюнибудь книгу по проектированию и по паттернам обязательно

    Это надо.
    каждый модкль должен быть классом но далеко не одним

    Можно инклудить. Или я не так понял? )
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 14 августа 2008 г. 14:50, спустя 2 часа 49 минут 15 секунд

    можно, инклудь!

Пожалуйста, авторизуйтесь, чтобы написать комментарий!