Форум → Программирование → PHP для идиотов → Подмена шаблона при асинхронном запросе
Подмена шаблона при асинхронном запросе
Страницы: ← Следующая страница →
-
Такой вопрос. Не могу сообразить как красиво подменить шаблон при запросе ajax.
Если кто знает Зенд, там есть слой - это основной шаблоно, в который инжектируются представления другие.
При аджакс обращении он как то там убирается, то есть как я понимаю, благодря наличию сущьности лайер его можно задизейблить и всё как бы, ну не всё, там происходит куча всякой хуйни, которая меня напрягает.
Так вот у меня есть объект Respose - обычный массив с гетом и сетом, представляющий данные представления. ))
При аджаксе я могу сделать такие действия, чтобы убить основной шаблон:
1. Так как основной шаблон - это самый первый массив в Respose, то я могу просто выдрать его от туда а остальное оставить, распарсить и отправить как json или еще что то там, но там могут остаться левые подмасиивы котрые были в главном шаблоне, тобишь меню и всякая херня. То есть мне этот метод не нравиться особо.
2. Могу тупо по условию $request->isAjax() не вставлять главный шаблон, а брать данные отдельного экшена, но так теряется гибкость и возможно надо будет делать шаблон как при простом запросе, тобишь главный, но немного другой без всяких меню, чтобы возвращать результат нескольких экшенов.
3. Может вы что то посоветуете, если поймете эту хрень, что я написал? -
16 июня 2010 г. 17:14, спустя 2 минуты 18 секунд
неприлично много написал)
http://www.twig-project.org/book/02-Twig-for-Template-DesignersDynamic Inheritance (as of Twig 0.9.7)
-
16 июня 2010 г. 17:31, спустя 17 минут 11 секунд
Абырвалг, предлагаешь подмену в шаблонизаторе самом сделать?
Скорее всего надо сделать просто:
1. Подменить шаблон
2. Подменить тип ответа с заголовками -
16 июня 2010 г. 17:49, спустя 18 минут 15 секунд
Ну вообще я начинал писать BL задолго до того, как появилась эта фича. А она буквально на прошлой неделе появилась.
у меня в BL_Response естьpublic function ajaxResponse($body, $type = 'json', $cache = false)
body - строка/массив/объект+ArrayAccess
тип - json/html/в планах XML
cache - отправлять заголовки "не кешируй" или нет.
То есть, в контроллере:$tpl = template('modulename/form')->assign('data', $data);
if ($this->app->getRequest()->isAjax()) {
$this->app->getResponse()->ajaxResponse($tpl->render(), 'html'); // тупо посылаю этот кусочек
}
$this->app->getPage()->setData('main', $tpl->render()); // это я беру шаблон главной основной страницы и ассигню кусочек на блок `main`Спустя 199 сек.а, и этот ajaxResponse сам ставит нужные заголовки (app/json, xml, html) -
16 июня 2010 г. 17:55, спустя 5 минут 50 секунд
имхо ajax + !json = !ajax. другими словами аякс и хтмл ответы - дерьмо а не аяксСапожник без сапог -
16 июня 2010 г. 18:00, спустя 4 минуты 39 секунд
хз, ajax прямого отношения не имеет к json и не надоhttps://smappi.org/ - платформа по созданию API на все случаи жизни -
-
16 июня 2010 г. 18:09, спустя 5 минут 16 секунд
ага, ну ты отобразил мне вариант 2 из трёх, а если там надо результат двух модулей вернуть?Спустя 88 сек.phpdude, нафиг делать евал если можно изменить контент зону, заменив хтмл?
Это не всегда так, но всё же? -
16 июня 2010 г. 18:15, спустя 5 минут 49 секунд
что знач двух модулей?
публикуешь коммент - модуль комментарии отработал -
16 июня 2010 г. 18:41, спустя 26 минут 9 секунд
Абырвалг, не у меня может сразу обновится несколько контент зон, добавил коммент - добавился коммент, и где нить вверху обновилось число комментов. Ну это туповатый пример, но вообще так. -
16 июня 2010 г. 18:44, спустя 2 минуты 19 секунд
другими словами аякс и хтмл ответы - дерьмо а не аякс
вот давай на примере комментариев рассмотрим. Пусть у нас есть блок с комментами и постраничная навигация в них осуществляется аяксово.
html:
мы на сервере через шаблон формируем этот список и отдает аштээмло
json:
мы возвращаем json и на стороне клиента формируем аштээмло (тут нужен какой-то свой шаблонизатор клиентский наверно).
И тут мы решили поменять дизайн… В твоем случае придется лезть в 2 шаблона, в моем правки вносятся только в один. -
16 июня 2010 г. 18:50, спустя 5 минут 55 секунд
kostyl, используй json а внутри него html + какие-то данныеconsole.log(response);
{
commentsCount : 100500,
commentsText : '<div class="comments" ……'
} -
16 июня 2010 г. 18:58, спустя 8 минут 51 секунду
+1 дуду
стоит вкрастся какой нибудь хуйне типа отображения ошибок и весь вывод летит к чертям
только JSON -
16 июня 2010 г. 19:07, спустя 8 минут 59 секунд
Абырвалг, я так и делаю
Кстати бля дуд, я так и делаю, шлю джсоном хтмл, да точно, ты прав в некотором смысле… но можно и хмл, хотя по простому можно и просто хтмл -
16 июня 2010 г. 20:43, спустя 1 час 35 минут 9 секунд
как я уже говорил, сайт - это чёрный ящик, преобразующий заданные url в html или json, xml, etc. на выбор.
например
$routes = array(
'/foo/' => array(
'type' => 'html',
'template' => 'templates/main.tpl',
'action' => 'Foo::foo1',
),
'/foo_jload/' => array(
'type' => 'json',
'action' => 'Foo::foo_get_json_blablabla',
),
);
т.е. тип отдаваемого документа и шаблон (в случае html) - свойство роутане всё полезно, что в swap полезло
Страницы: ← Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!