Помогите пожалуйста разобраться с реализации MVC в joomla.

Тема в разделе "Создание расширений для Joomla", создана пользователем Kravcneger, 08.02.2010.

  1. Offline

    Kravcneger Недавно здесь

    Регистрация:
    29.10.2009
    Сообщения:
    28
    Симпатии:
    0
    Пол:
    Мужской
    Здравствуйте , уважаемые специалисты . Ввиду того что современные 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 потерну когда метод модели вызывают из вида .

    СПАСИБО ЗА ВНИМАНИЕ !
     
    Последнее редактирование: 08.02.2010
  2.  
  3. Offline

    botanist специалист

    Регистрация:
    15.02.2009
    Сообщения:
    461
    Симпатии:
    49
    Пол:
    Мужской
    1 и 3 вопросы чисто риторические. Практического значения не имеют. Можно долго обсуждать, но сделать ничего нельзя. Как сделано так сделано.
    2.
    Код (PHP):
    1. //В контроллере
    2.  $view = $this->getView('viewName','html');/*вызываем обьект представления*/
    3.  $model = $this->getModel();/*вызываем обьект модели по умолчанию*/
    4.  $data = $model->getData();/*в переменную $data получаем данные с помощью
    5.  функции  getData() модели.*/
    6.  /*.... Здесь с данными можно чего-нибудь сделать .....*/    
    7.  $view->assignRef('templatedata',  $data);/*передаем данные в шаблон tmpl/default.php
    8.  перый параметр ('templatedata') - имя переменной из которой можно получить данные в шаблоне,
    9.  второй параметр собственно данные определенные строкой выше*/
    10. //В шаблоне
    11. $data = $this->templatedata; /*получаем данные в шаблоне*/
     
  4. Offline

    Kravcneger Недавно здесь

    Регистрация:
    29.10.2009
    Сообщения:
    28
    Симпатии:
    0
    Пол:
    Мужской
    botanist , спасибо большее за помощь .Но вот у меня проблема всё такая .Контроллер не может вид найти $view = $this->getView('hello');
    Однако в менеджере меню , вид компонента распознаётся и ссылку на него создать можно .В чём дело не пойму .
     
  5. Offline

    botanist специалист

    Регистрация:
    15.02.2009
    Сообщения:
    461
    Симпатии:
    49
    Пол:
    Мужской
    Код (PHP):
    1. $this->getView('hello', 'html');

    Но возможно не верно пространство имен
    Вид должен находится по пути (от корня компонента)
    views/имя_контроллера/view.html.php
     
  6. Greck
    Offline

    Greck Недавно здесь

    Регистрация:
    08.11.2008
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    Опечатка:
    views/имя_вьювера/view.html.php
     
  7. Greck
    Offline

    Greck Недавно здесь

    Регистрация:
    08.11.2008
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    По теме:
    В Joomla немного другая философия. Контроллер выполняет конкретные действия: сохранение, изменение и по результату, при необходимости перенаправляет на нужный вьювер. Не нужно делать проверки, получение данных в контролере, это все должен делать вьювер с моделью. Конечно у всех правил есть исключения, но для 99% задач такой подход правильный и логичный. Не знаю смог ли объяснить, сам поначалу все пихал в контроллер.
     
  8. Offline

    botanist специалист

    Регистрация:
    15.02.2009
    Сообщения:
    461
    Симпатии:
    49
    Пол:
    Мужской
    Нет не опечатка, контроллер определяет свое представление по умолчанию по собственному имени
     
  9. Offline

    Kravcneger Недавно здесь

    Регистрация:
    29.10.2009
    Сообщения:
    28
    Симпатии:
    0
    Пол:
    Мужской
    Greck , спасибо большое , я уже тоже разобрался с этой философией . И могу сказать что она очень удобная и интересная . Но не совсем удобна для написания небольших приложений .
    Кстати посмотрел стандартные расширения , разработчиков joomla , примерно только в трети всё сделано с соблюдением данного потерна . А в компонентах templates и modules дак вообще большую часть с основной логикой , берёт на себя контроллер . Там же запросы и с базами данных там же проверка данных и Т.Д .(что сделало контроллеры по 25 кб) складывается впечатление что расширения писали совершенно другие люди , которые плевали на mvc .
     

Поделиться этой страницей

Загрузка...