Модули

Решил реализовать админку через модули.

Из-за серверных настроек не смог собрать структуру автоматически. Сделал все вручную.

Сейчас у меня админка выглядит примерно так:

AdminModule.php вот такой




<?


class admin extends CWebModule {


}



в конфиге приложения прописал инклюды и сам модуль:




	'import'=>array(

		'application.modules.*',

                 .....

	),




    'modules'=>array(

        array('admin'),

    ),



создал тестовый контроллер

с простым выводом текста при запросе /admin/test/[index]

выпадает эта ошибка

PHP Error

Description

Illegal offset type

вообще без понятия куда копать. ошибка не информатива. Описания по работе с модулями ноль. Просто сказано что есть такая структурная единица, а как ей пользоваться не сказано. Может бросьте в меня код с примером или ссылкой где о модулях рассказывается больше чем в оф. мануале ?

Спасибо за помощь.

Вот как генерится модуль через yiic:




class Admin extends CWebModule

{

    public function init()

    {

        // this method is called when the module is being created

        // you may place code here to customize the module or the application


        // import the module-level models and components

        $this->setImport(array(

            'Admin.models.*',

            'Admin.components.*',

        ));

    }


    public function beforeControllerAction($controller, $action)

    {

        if (parent::beforeControllerAction($controller, $action))

        {

            // this method is called before any module controller action is performed

            // you may place customized code here

            return true;

        }

        else

            return false;

    }

}



В конфиге нужно сделать так:




'modules'=>array(

    'Admin'=>array(

        // тут могут находиться настройки для инициализации модуля.

    ),

),


// или просто:


'modules'=>array('Admin'),



В общем-то, ничего особо сложного в работе с модулем больше нет.

Черт, я знал что мне чего-то нехватает (

У меня просто на одном апаче пхп4 и 5 работают, а в CLI только пзп4 (

Так что собирал вручную.

А может модуль модуль иметь свой layout, отличный от layout’а приложения ?

Папка views/layouts для того и создана в папке с модулем :)

я тоже сразу обрадовался.

но весь контент из модуля выводится внутри protected/views/layouts/main.php

В вашем наследнике CWebModule напишите:




public $layout = 'name';



спасибо )

а свой urlManager модуль может иметь ?

К сожалению, нет, что привело к активному обсуждению вопроса на общем форуме, как подключить url правила в модуле.

Делается это с помощью прикрепления своего обработчика события приложения onBeginRequest (начало обработки запроса), который должен вытащить нужные правила из модуля. В самом модуле это делать поздно по понятным причинам.

Можно начать читать с этой темы: http://www.yiiframework.com/forum/index.php?/topic/6637-add-url-rules-with-modular-site/page__hl__onBeginRequest__fromsearch__1

В конце есть ссылка на продолжение) Самому пока не приходилось сталкиваться.

подскажите, вот создал я модуль news в которой присутствует поддиректория messages

вот полный путь к ней

\protected\modules\news\messages\

внутри которой создал директорию ru/ и внутри неё news.php как можно получить доступ к этому файлу переводу?

полный путь к файлу

\protected\modules\news\messages\news.php

вывожу так

echo Yii::t("news", "title");

но выводит только title. Видимо ссылается на эту директорию

\protected\messages\ru\news.php

соответственно не может найти файл news.php

Подскажите, что я не так делаю?

http://www.yiiframework.com/doc/guide/ru/topics.i18n




Yii::t('NewsModule.news', 'title');



И не забудьте, что исходный язык приложения не должен быть ru.

спасибо, сейчас проверю

насчёт исходного языка приложения, не совсем понял, или имеется введу про это sourceLanguage ?

я у себя прописал так

    'sourceLanguage' =&gt; 'en_US',


    'language' =&gt; 'ru',

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

для свойства language указал значение не как ru_RU а просто так ru

и ещё, выше вы привели пример, там указали NewsModule я как понял название берётся от самого файла модуля NewsModule.php ?

оно регистро-зависимо или можно написать к примеру так newsModule ?

sourceLanguage - это исходный язык приложения, с КОТОРОГО сообщения будут переводиться на текущий язык language.

en_us - просто кодовое обозначение английского языка (США), и мне кажется, что тут без разницы, в каком регистре. Для русского это просто ru.

Если вам так принципиален регистр в newsModule, то попробуйте потестить различные варианты, но в любом случае лучше писать так, как называется класс модуля новостей (NewsModule).

спасибо за разъяснение. А насчёт регистра, это так для будущего, вдруг верстальщик перепутает. Под них делаю плагин для Smarty

Чтобы верстальщик не перепутал, удобно сделать статический метод t класса NewsModule, который будет отвечать только за перевод сообщений модуля. И вызов упрощается:




echo NewsModule::t('title');