На днях наткнулся на эту чудную вещь, именуемую Yii.
Вопрос вот в чём. Необходимо показывать форму логина (или, если юзер залогинен - пользовательское меню) на всех страницах сайта. С меню пользователя, думаю, не проблема разрулить. Вопрос в форме.
Форма сама создана изначально, и показывается на странице Login. При попытке впихнуть html формы в main.php из папки view/layouts мне выдаёт ошибку, связаную с тем что не определена переменная $form. Данная переменная определяется в контроллере SiteController.php , в экшне страницы логина - actionLogin().
Представление о MVC я имею, но пока что не очень тесно сдружился с данным концептом.
Твоя задача должна решаться установкой виджета формы, который и показывает форму и обрабатывает ее. По ссылке выше как раз такой виджет. Только он завиит от виджета Portlet
а вот такой вопрос. на каждой странице есть поиск. кто должен обрабатывать запрос формы и выводить результат в контенте страницы
Форма - это виджет, а обрабатывать должен какой-то контроллер. Ты ж не в виджете результаты поиска показываешь. В случае с логином можно чтобы виджет обрабатывал логин. потому что он же и показывает панель юзера потом.
Так вот в чём вопрос, тады… То что касается контента (новости, статьи, и куча всей динамич инфы на сайте) создаётся путём создания CRUD, так?
Всё-же остальное, где не нужны эти операции CRUD, нужно юзать виджеты и компоненты. я правильно понял?
Не совсем. Если работал с джумлой, то можно провести такую аналогию. Компонен джумлы - то контроллер. А модуль джумлы - это виджет. Компонент - это общее название и контроллера и видета и еще дофигищи всего, все это наследуется от компонента.
Если не работал с джумлой, тогда так. Все, что выводится в страничках, в основном контенте - это модули (Yii) и контроллеры. Все что по бокам и сверху, панельки всякие - это целесообразно делать виджетами. Если есть какие-то часть повторяющиеся части. Например, картинка продукта с подписью и ценой - встречается и в результатах поиска и в "бестселлерах" и в "популярное", то это тоже хорошо сделать виджетом, который ты потом везде просто вызываешь.
Вообще виджет - это цельный часто повторяющийся кусок кода, который служит, в соновном, для вывода инфы.
Так-с. ну насчёт виджета я понял. оч доходчиво объяснил, за что и спасибо =)
Возвращаясь к вопросам модулей… Получается что Новости (news) это по сути модуль? Однако тут получается что модуль работает немного по другому принципу нежели виджет, так ведь?
Т.е. если я виджет вызываю "руками" в определённом месте, то для новостей я сначала создаю модель и потом crud, и потом просто переделываю под свои нужды его views и всё. правильно я понял?
Есть модуль в абстрактом смысле - модель, контроллер, представления (виды). А есть модуль в понятии фреймворка - это несколько контроллеров, моделей, представлений, объединенных некоторым общим смыслом. Например блог в ккорпоративной системе может быть таким модулем.
А если мы пишем сайт-блог, то там будут только "абстрактные" модули - несколько контроллеров, моделей, представлений.
В твоем простом случае, новости будут состоять из модели.ю контроллера и нескольких представлений. Это можно назвать модулем, но в Yii это та не называется Просто модель-контроллер-представление.