Несколько вопросов на счет модулей

Решил немного видоизменить свою систему, а именно - разбить на модули.

Соответственно возник ряд вопросов.

  1. Касательно ссылок и маршрутов. Если я правильно понял теперь в конфиге, в urlManager значение /backend/portlets/notes будет обращаться в модулю backend контроллеру portlets и к notesAction?

  2. Файл BackendModule.php создавшийся в корне папки с модулем. Что сюда вообще стоит писать?

  3. Вьюхи - сначало он ищет шаблон в папке modules/backend/views и если там нет - идет в themes? Или как?

  4. Стоит ли разбивать систему на модули? админка и форум - без вопросов. А вот скажем новости вынести в отдельный модуль? На сколько это грамотно?

  5. И маленький ворпос на последок. Можно как-то по другому в контроллере указывать actions? а то с модулем получается очень длинный путь (application.modules.backend.controllers.portlets.NotesAction)

  6. и вопрос не относящийся к модулям. Как настроить правила ссылок чтобы не прописывать туда весь мусор? То есть если есть контроллер TestController и у него скажем 3 actions - act1, act2, act3.

Вот чтобы не прописывать 3 правила (/test/act1 => /test/act1 и т.д.)

а скажем /test/* => /test/*

Забыл добавить, это все при условии что есть вот такое правило

'<category:[a-zA-Z0-9_-]+>'=>'news/category'

Я с модулями еще не работал, они появились позже чем я нача роект и времени переделывать с ними пока нет. Поэтому могу ответить на вопросы 3-7:

  1. Вообще без модулей искал сначала в папке темы, думаю теперь бует так же, но с поправкой на модуль. Не уверен, спроси на общем форуме

  2. Стоит одноначно. Увелививаетс переносимость. Соответсвует принципу LowCouling, ну и вообще именно для этого модули и делались

  3. Вероятнее всего, нельзя… Разве что ввести свойство protected $actPath='application.modules.backed.actions' и указывать через него… Чтобы точно узнать - на общий форум.

  4. Так нельзя. Только каждое действие или использую mod_rewrite. А какая разница, с правилом или без?

Ну а обычный путь site.com/moduleID/contrllerID/actionID/param/value/param2/value2/ делается вообще без правил - только настройки CUrlManager: http://www.yiiframew…uide/topics.url

Такс, вобщем разобрался со всеми вопросами :) отвечаю на них сам))

  1. Так и есть :)

  2. Так и не понял, но похоже по аналогии с файлом контроллера

  3. Сначала в модуле ищет, потом в теме

  4. Если совсем все разносить по модулям - будет ли работать defaultController в конфиге при указании модуль.контроллер

  5. Перекопал все - вариантов нету :(

  6. пошел другим путем - наткнулся на похожую тему на общем форуме. Создал основное приложение, и приложение backend в рамках одного проекта… и забыл про проблему с чпу))

  1. Нет, не будет. Надо указать дефолтный модуль, а в уонйиге моудуля - дефолтный контроллер Qiang так говорил в какой-то теме, точно не помнб где видел :)

  2. А какая разница? Я чет не догоню как сделано. Про создание двух приложений в рамках одного я знаю, обсуждали тут на форуме неделю-две назад. А какэто на ЧПУ влияет? :)

Ну как это как влияет)) прямо и влияет)) в первом (основном приложении) ссылки второго не будут же пересекатся))

соответственно ссылки типа /test/act1 не будут идти в ‘<category:[a-zA-Z0-9_-]+>’=>‘news/category’    если test язвляется другим приложением :)

я ща вообще рву волосы на голове)) т.к. появились модули и весь сайт можно сделать удобнее))) только переписывать много приходится

и так, вопрос до кучи :) когда делаешь registerScriptFile() можно как-то файл вставлять в то место где вызывалось? мне просто не нужно ни в конец, ни в хидер… а четко где вызывается функция

А, я решил аналогичный вопрос по-другому, я просто добавил букву “с” перед именем категории и все проблемы :)

Ну вообще да, зря они модули сразу не сделали, протупили конкретно :)

Нет, нельзя. Она же не выводит, а регистрирует для вывода.

Quote

6. пошел другим путем - наткнулся на похожую тему на общем форуме. Создал основное приложение, и приложение backend в рамках одного проекта.. и забыл про проблему с чпу))

а модели у них (приложений) тоже разные будут???

Quote

2. Файл BackendModule.php создавшийся в корне папки с модулем. Что сюда вообще стоит писать?

Сразу оговорюсь - сам модули пока не использовал, только немного успел подумать как их можно применить.

По моему в файле *Module.php можно реализовать такие методы:

  • init - инициализация модуля

  • install - вызывается при установке модуля (например пишет что-то в БД)

  • uninstall - удаление модуля

  • about - может вернуть массив типа:

  $about['author'] = 'you name';

  $about['version'] = '0.1';

  $about['description'] = 'мой супер модуль для…бла-бла-бла';

 

Конечно реализация всех этих методов имеет смысл если только использующая их (модули) система\цмс имеет соответствующий интерфейс и "знает" какой метод где вызывать.

Кстати очень интересная тема…как организовать вот такой вот менеджер модулей в Yii  (ну что-то типа как в вордпрессе)? Необходимо иметь возможность:

  • установить\удалить модуль

  • активировать\деактивировать модуль

  • модуль может иметь свои настройки доступные из админки и т.д.

Я спрашиваю это потому, что решил написать небольшую цмску\движок для блога на Yii, хотя до вопроса о расширении и модулях еще далеко - я задумываюсь об общей архитектуре уже сейчас…)))) :)

Всем кто хочет присоединиться к разработке - велком на мой блог (см подпись)!

Quote

а модели у них (приложений) тоже разные будут???

Ну мы ж уже обсуждали воз здесь: http://www.yiiframew…opic,924.0.html

Quote

Quote

а модели у них (приложений) тоже разные будут???

Ну мы ж уже обсуждали воз здесь: http://www.yiiframew…opic,924.0.html

да я знаю…просто интересно как поступил в этом случае Digital God

Quote

Всем кто хочет присоединиться к разработке - велком на мой блог (см подпись)!

Я сам пишу сейчас движок на Yii, не совсем блог конечно. Нечто похожее на nnm.ru

Quote

Кстати очень интересная тема...как организовать вот такой вот менеджер модулей в Yii  (ну что-то типа как в вордпрессе)? Необходимо иметь возможность:
  • установить\удалить модуль

  • активировать\деактивировать модуль

  • модуль может иметь свои настройки доступные из админки и т.д.

Отличная идея, но в моем случае есть одно НО. Поскольку у меня админка и основная часть сайта - два разных приложения - нужно модуль при установке как-то разделять на 2 части.

Хотя я щас подумал… в wp установка происходит по протоколу ftp, и собственно ничего не мешает и в Yii это заюзать… такс… начну-ка я опять переписывать свое приложение :))))

Quote

да я знаю....просто интересно как поступил в этом случае Digital God

На данный момент модели решил сделать разные. Поскольку разделяю админку и основную часть на два приложения - в моделях должны быть разные функции/правила. Можно конечно все запихать в одно, но согласись - на кой черт юзеру нужны функции админа, которые полюбак будут подгружаться вместе с моделью. Лишний код, лишний объем, лишнее время на обработку.

Quote

Отличная идея, но в моем случае есть одно НО. Поскольку у меня админка и основная часть сайта - два разных приложения - нужно модуль при установке как-то разделять на 2 части.

В твоем случае мне кажется нужно в рамках одного модуля для твоего движка (назовем его плагин) - делать 2 отдельных модуля - для админки и для паблик части…Может конечно есть еще какие то варианты.

А вот если фронт и бэк разделены просто на уровне каталогов с контроллерами (такой способ я выбрал, имхо, конечно) мне кажется можно поступить двумя способами:

  1. Модули могут быть вложенные (получается что у модуля - будет модуль администрирования  :) :) :) )

  2. Можно сделать проще…в рамках одного модуля создать два каталога для контроллеров (back и front) и использовать их соответственно в админке и публичной части…(я больше склоняюсь к этому варианту)

Quote

Quote

Отличная идея, но в моем случае есть одно НО. Поскольку у меня админка и основная часть сайта - два разных приложения - нужно модуль при установке как-то разделять на 2 части.

В твоем случае мне кажется нужно в рамках одного модуля для твоего движка (назовем его плагин) - делать 2 отдельных модуля - для админки и для паблик части…Может конечно есть еще какие то варианты.

А вот если фронт и бэк разделены просто на уровне каталогов с контроллерами (такой способ я выбрал, имхо, конечно) мне кажется можно поступить двумя способами:

  1. Модули могут быть вложенные (получается что у модуля - будет модуль администрирования  :) :) :) )

  2. Можно сделать проще…в рамках одного модуля создать два каталога для контроллеров (back и front) и использовать их соответственно в админке и публичной части…(я больше склоняюсь к этому варианту)

Ну вот я щас сделал простенький инсталятор модуля. Тут без разницы - разделены админка и сайт на 2 приложения или нет :) (если разделены, то просто лишняя команда на копирование файлов в другую папку).

Оказалось проще чем я думал)))

в файле модуля написал функции - install, update, checkModule. Туда же прописал sql на создание таблиц. Щас вот делаю копирование файлов по ftp, посмотрим что получится :)

Quote

Ну вот я щас сделал простенький инсталятор модуля. Тут без разницы - разделены админка и сайт на 2 приложения или нет :) (если разделены, то просто лишняя команда на копирование файлов в другую папку).

Оказалось проще чем я думал)))

в файле модуля написал функции - install, update, checkModule. Туда же прописал sql на создание таблиц. Щас вот делаю копирование файлов по ftp, посмотрим что получится :)

А как реализована установка модуля??? Т.е. модули же должны быть прописаны в конфиге???

Все просто, по крайней мере другого варианта я пока не придумал :)

ровно как доп. параметры в конфиг



'params'=>require(dirname(__FILE__).'/params.php'),


так и модули



'modules'=>require(dirname(__FILE__).'/modules.php'),


файлы генерятся при изменении конфига в админке. А сами конфиги лежат в базе.

Самая простая система хранения конфигов в базе. А при установке модуля - происходит запись в базу (дополняется таблица модулей и таблица настроек).

Чето какая-то фигня получается с модуляцией админки :)

Сделал модуль News… в нем контроллер… тоже News называется… в нем например actionList

ссылки получаются - /localhost/backend/news/news/list/

чето не катит совсем такое)))

можно как-то обращаться к actions без указания контроллера, если он дефолтовый?