вопрос по View

Yuriy_S

-=PHP-Club=-
вопрос по View

Решил написать новый проект с применением MVC.

Model, View, Controller - разные файлы (классы).
View используется как обертка для работы со Smarty (стандартный набор методов - assign, set, get, render, display, etc..)
Так же используется класс Router - разбирает URL, загружает нужный контроллер и инициализирует указанное действие.

Каждое действие, в котором требуется отображение (возврат) каких-либо результатов клиенту использует отдельный шаблон (подшаблон).

Суть вопроса: как должна правильным образом выглядеть схема обработки результатов, полученных методами View::render('any_template.tpl') в контроллере? Т.е. задача сводится к тому, что существует некий базовый шаблон сайта - index.tpl, в переменные которого должны асигниться результаты от вызовов типа View::render('tpl') в экшенах контроллера.

Пока в голову приходит мысль, запихивать результаты обработки "подшаблонов" в что-то наподобие Registry в виде ассоциативного массива (переменная_шаблона => значение), затем в объекте Router после инициализации контроллера и выполнения экшена обрабатывать этот массив (асигнить переменные в шаблон index.tpl) и вызывать метод View::display('index.tpl'). Таким образом можно полностью избавиться от обработки "лишних" частей шаблона в конкретном экшене контроллера. Можно асигнить и сразу в Smarty, но тогда нужно будет постоянно помнить о возможности конфликта имен переменных.

Может написал несколько запутанно, но смысл вроде бы правильный.
 

x-yuri

Новичок
а почему бы в шаблоне не указывать, что "в этом месте надо вставить подшаблон"?
 

Yuriy_S

-=PHP-Club=-
в таком случае, часть логики контроллера переносится в представление (шаблонизатор), что по-моему не есть хорошо..
 

x-yuri

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

-~{}~ 21.01.09 19:24:

даже можно, наверное, не результаты, а просто шаблон. А при рендеринге шаблона, он будет сам рендерить в нужных местах подшаблоны

-~{}~ 21.01.09 20:00:

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

возможно, тебе будет интересна статья http://ctrl-shift-b.blogspot.com/2007/08/interactive-application-architecture.html (сам правда еще не читал)
 

HraKK

Мудак
Команда форума
Логику которая относиться к отображению. Что отобразить - относиться? Конечно. Какие данные отобразить? конечно и т. д.
 

x-yuri

Новичок
в таком случае, часть логики контроллера переносится в представление (шаблонизатор), что по-моему не есть хорошо..
автор, видимо, имеет в виду, что при этом в шаблон попадет код, который будет получать информацию из модели

можно передавать такую информацию через параметры внешнего шаблона. Т.е. в контроллере ассигним переменные для шаблона и подшаблонов, а в шаблоне передаем подшаблонам нужную информацию. Навреное, так лучше будет
 

Yuriy_S

-=PHP-Club=-
x-yuri

Получается, если использовать основной шаблон и ассигнить из экшенов контроллеров результаты в некие переменные, то кем в данном случае должен вызываться метод display('index.tpl') ?

-~{}~ 22.01.09 01:17:

автор, видимо, имеет в виду, что при этом в шаблон попадет код, который будет получать информацию из модели
Для решения подобного рода задачи я думаю можно из шаблона вызывать некий Loader, который будет вызывать необходимый контроллер и экшен, возвращающий результат (рендеринг или отображение).
 

HraKK

Мудак
Команда форума
У меня так есть основной View который создается вначале, есть хелпера которые вызываются из шаблонов, которые могут или добавлять информацию в основной View или создавать новый View ( пересечение имен - решаю ) + рендрить с этими View( основным или новым) новый шаблон. Примерно так:
/* Main.tpl / Main view */
PHP:
<body>
{include( header.tpl )}
            /* Header.tpl / Main view */
            лялляля фа
{menu( menu.tpl )}
           /* Menu.tpl / Menu view */
           бла бла бла
</body>
 

Yuriy_S

-=PHP-Club=-
HraKK
создавая новый view ты решаешь проблему пересечения имен?
не вижу смысла рендерить основной шаблон, новый - да, для получения результата и его последующим ассигном в основной.
 

HraKK

Мудак
Команда форума
Смотри внимательно, я не ренжу основной шаблон, я ренжу новый шаблон передвая туда основной view.
Считай include и namespace.

Да создавая решаю.
 
Сверху