Создание модульной системы в рамках - PullRequest
5 голосов
/ 13 мая 2011

Я ищу способы внедрения системы модулей в мою прикладную среду. Модули - это файлы классов, которые каким-то образом изменяют дизайн, так что они автоматически интегрируются с вмешательством пользователя.

Моя структураспециально созданный фреймворк, но очень похожий на codeigniter, только немного светлее1006 *

Чтобы были вызваны следующие модули и содержимое там было:

/system/applications/admin/modules/header/a.php
/system/applications/admin/modules/header/b.php
/system/applications/admin/modules/sidebar/a.php
/system/applications/admin/modules/sidebar/b.php

Мне кажется, что это будет работать нормально, но проблема в том, что я никогдаЯ построил систему модулей раньше, и я чувствую, что они более классифицируются как ловушки.

В моей голове я в основном хочу простую систему, которая состоит из 1 файла класса и шаблонов, если требуется, файл calss, вероятно, будет выглядетькак это:

class Module_HelloWorld extends Module
{
     public static function info()
     {
         return array(
             'name' => 'Hello Word',
             'version' => '1.0.0',
             'description' => 'Dispalys "hello World"',
             'author' => 'Robert Pitt',
         );
     }

     public function execute($context,$action)
     {
          //$context would be the current view at the point of execution for the view

          //$action would be header / sidebar
     }
}

Итак, мой вопрос в двух словах, что было бы лучшим способом создать модсистема для моей платформы, позволяющая удалять сторонние модули внутри каталога, а затем устанавливать их от администратора без особого вмешательства пользователя?

Ответы [ 2 ]

3 голосов
/ 13 мая 2011

удачи с вашими mvc и cms. Я реализовал то же самое некоторое время назад, мой подход был прост, первый пришёл мне в голову.

  1. База вашей системы на страницах и модулях (виджетах).
  2. Информация о страницах сохраняется в таблице базы данных, например, "pages".
  3. Модуль (виджеты) - это класс, содержащий метаданные (определение) и бизнес-логику.
  4. Если вы добавляете модуль на страницу, его конкретная информация сохраняется в базе данных.
  5. В следующий раз, если вы хотите иметь его экземпляр, просто передайте связанные параметры его классу, и он у вас есть.
  6. Таким образом, вы можете использовать одно определение модуля в разных местах и ​​для разных экземпляров.
  7. Вы можете добавить столько страниц в базу данных.
  8. Пользователь может добавить столько виджетов на одной странице.
1 голос
/ 24 июля 2011

Я не уверен, поможет ли это, но для меня мне потребовалась среда, которую я мог бы расширить с помощью функциональности с точки зрения модулей, когда это необходимо, но с минимальным объемом взаимодействия с базой данных с точки зрения хранения информации о модуле.Поэтому у меня есть установка, в которой у меня есть модули в папках с файлами настроек, css, js и реального класса, которые должны следовать очень специфическим соглашениям об именах.При добавлении модуля мне нужно добавить папку, а затем обновить список модулей в базовых настройках фреймворков.

Одна из настроек указывает, для каких страниц должен быть загружен модуль.Если модуль требуется на каждой странице, то это (*).Базовый контроллер моего фреймворка проверяет список модулей и затем проверяет настройки страницы для модуля, чтобы определить, должен ли он быть загружен.

Моя фреймворк отображает страницу, загружая шаблон в выходной буфер и сохраняя его в публичной переменной.который затем может быть доступен любому коду в рамках фреймворка.Тогда я могу просто использовать str_replace для определения разделов, которые необходимо загрузить (например, в шаблоне есть тег интерфейса, который обозначает основное содержимое страницы), а затем заменить его содержимым модуля.Таким образом, модуль галереи заменит тег интерфейса на галерее на странице галереи, тогда как модуль статьи создаст статью с тегом интерфейса на странице статей.

Хотя я не думаю, что большинство людейиспользуйте smarty теги для замены.

Я думаю, что это прекрасно работает, когда вам нужна среда, которую вы используете лично для доставки сайтов клиентам.Это, вероятно, не сработает, если разные люди будут иметь возможность использовать ваш фреймворк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...