Здравствуйте , уважаемые специалисты . Ввиду того что современные web приложения всё чаще проектируются по потерну MVC , решил ознакомиться на практике . Впервые я попробовал это на фрэймворке codeigniter . Теперь перейдя на joomla , я нахожусь В ПОЛНОМ НЕДОУМЕНИИ как это всё делать .Точнее я нашёл инф. даже с примерами http://blog.contra.lv/2010/01/25/pishem-svoj-mvc-komponent-praktika-chast-4/ http://webflasher.net/ru/webmasteru/joomla-1-5.html . Дорогие господа , но я не могу понять одной единственной вещи ! Почему во всех этих примерах если мы хотим получить какие ли бо данные из метода принадлежащего модели , то мы вызываем его во view части .Что противоречит потерну . Пример тому "Поэтому, мы можем легко объявить функцию класса модели, используя метод JView:: в строке JView:: getModel (). В код файла view.html.php вносим изменения заменяем строку: $greeting = "Hello World!"; На этот код: $model = $this->getModel(); $greeting = $model->getGreeting(); " Это встречается в одном из 2 ух источников . Покопался в компонентах и там такая же ситуация . раньше я думал MVC это модель вид(шаблон) контроллер Но тут на деле получается что есть ВИД и есть ШАБЛОН в который вид передаёт то что нужно . Вообщем для меня всё жутко и напутанно . Раньше я думал что контроллер сразу должен передавать данные в шаблон а тот их и выводить .Ведь шаблон по сути видом то и является . А как передавать данные из контроллера в вид Я ВООБЩЕ не понял . Разъясните пожалуйста мне ... 1)Нафига вообще нужен это view когда данные должны передавать из контроллера в шаблон 2)Как передаются данные из контроллера в вид (в codeigniter так $this->view("view1",$data) всё просто , а сколько я не копался в компонентах везде где надо что то получить из метода модели , этот метод вызывается из вида) 3)И противоречит ли это MVC потерну когда метод модели вызывают из вида . СПАСИБО ЗА ВНИМАНИЕ !
1 и 3 вопросы чисто риторические. Практического значения не имеют. Можно долго обсуждать, но сделать ничего нельзя. Как сделано так сделано. 2. Код (PHP): //В контроллере $view = $this->getView('viewName','html');/*вызываем обьект представления*/ $model = $this->getModel();/*вызываем обьект модели по умолчанию*/ $data = $model->getData();/*в переменную $data получаем данные с помощью функции getData() модели.*/ /*.... Здесь с данными можно чего-нибудь сделать .....*/ $view->assignRef('templatedata', $data);/*передаем данные в шаблон tmpl/default.php перый параметр ('templatedata') - имя переменной из которой можно получить данные в шаблоне, второй параметр собственно данные определенные строкой выше*/ //В шаблоне $data = $this->templatedata; /*получаем данные в шаблоне*/
botanist , спасибо большее за помощь .Но вот у меня проблема всё такая .Контроллер не может вид найти $view = $this->getView('hello'); Однако в менеджере меню , вид компонента распознаётся и ссылку на него создать можно .В чём дело не пойму .
Код (PHP): $this->getView('hello', 'html'); Но возможно не верно пространство имен Вид должен находится по пути (от корня компонента) views/имя_контроллера/view.html.php
По теме: В Joomla немного другая философия. Контроллер выполняет конкретные действия: сохранение, изменение и по результату, при необходимости перенаправляет на нужный вьювер. Не нужно делать проверки, получение данных в контролере, это все должен делать вьювер с моделью. Конечно у всех правил есть исключения, но для 99% задач такой подход правильный и логичный. Не знаю смог ли объяснить, сам поначалу все пихал в контроллер.
Greck , спасибо большое , я уже тоже разобрался с этой философией . И могу сказать что она очень удобная и интересная . Но не совсем удобна для написания небольших приложений . Кстати посмотрел стандартные расширения , разработчиков joomla , примерно только в трети всё сделано с соблюдением данного потерна . А в компонентах templates и modules дак вообще большую часть с основной логикой , берёт на себя контроллер . Там же запросы и с базами данных там же проверка данных и Т.Д .(что сделало контроллеры по 25 кб) складывается впечатление что расширения писали совершенно другие люди , которые плевали на mvc .