#php #ооп #mvc
Начну с того, что я новичок, сделал всего один небольшой проектик на php "процедурным" способом и теперь ищу способ, чтобы перепрыгнуть огромную пропасть, отделяющую процедурное программирование от ООП. Большая часть инфы по MVC предусматривает, что я уже перебрался через эту пропасть, и оттого практически бесполезна. Нашёл пока единственную статью, которая максимально примитивно объясняет, начиная с основ, и пытаюсь по аналогии свой проектик переделать под MVC. Возникла проблема - в моём проекте логика чуть посложнее, чем в "сайте-визитке", и статья не даёт ответа на вопрос, где и как это "посложнее" реализовать. В упомянутой статье класс View крайне прост: метод View->Generate($view_content, $view_template) делает require $view_template.'.php', внутри шаблона в свою очередь в единственном месте стоит require $view_content.'.php'. У меня, в зависимости от контроллера/метода, необходимо делать вставки в шаблон в нескольких местах. Вопрос - как реализовать это правильно? Предполагаемый мной вариант решения: в главный шаблон напихать конструкции вида include $block[0].'.php' (не require, чтобы не ругался при отсутствии файла), потом этот массив заполнять именами файлов в соотв. модели... Сразу возникают вопросы: если мне в данном view не нужно вставлять скажем $block[0] - как будет выполняться директива include? Будет ли она пытаться обращаться в файлу (в данном случае NULL)? Да и вообще, правильно ли так поступать? (upd: вариант конечно if (isset($block[0])) { include $block[0].'.php'; } - но это получается часть логики переносится в вид :/ ) как быть с блоками, которые хочется задействовать несколько раз? Например, у меня там простенькая формочка для фильтрации вывода с базы, но на одной странице она должна фильтровать поставщиков, а на другой - товар на складе? Реализовывать формочку через класс?
Ответы
Ответ 1
Почитайте что такое виджеты и зачем они. Если вкратце то это независимое обращение к любому модулю вашего сайта, допустим модуль отзывов. Вы вызываете виджет данного модуля, и все инкампсулировано внутри него, он сам определяет на какой он странице (или в параметре передаете), знает к какой модели обратится, и как вывести данные в шаблон. Очень удобны и незаменимы. Издалека ваш подход правильный, но я бы реализовывал массив по типу $content = array( 'header' => 'Hellow world', 'short_description' => 'short description of page', 'footer_links' => array( 0 => array('name' => 'main page', 'link' => 'http://...'), .... ), ); и этот контент передаю непосредственно шаблону, темплейту. Где использую его так:
Комментариев нет:
Отправить комментарий