Страница 1 из 2

renderPartial 2 шаблона по очереди

Добавлено: 2013.02.14, 18:09
shkarbatov
Всем, добрый вечер.

Есть шаблон, он отправляет ajax submit в контроллер, в контроллере данные подставляются в шаблон через renderPartial, затем в этом же методе происходит renderPartial другого шаблона.

Подскажите пожалуйста, как сделать так, что бы срендерить первый шаблон, вывести его на экран, затем рендерить второй шаблон и его тоже потом выводить при этом, оба шаблона должны появляться по нажатию на одну кнопку?

Или надо делать 2 отдельных запроса?

Всем, спасибо!

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.14, 18:56
anton44eg
два раза вызвать renderPartial?

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.14, 19:10
Dismal
Возвращайте содержимое в 2 разных div, например,

Код: Выделить всё

<div class="data_div1"><?renderPartial($view1, $data);?></div>
<div class="data_div2"><?renderPartial($view2, $data);?></div>
Затем в ajax success разбирайте ответ с помощью jquery.

А если надо просто вывести один шаблон за другим, то просто 2 раза вызываем renderPartial, как anton44eg подсказал выше.

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.15, 09:56
shkarbatov
Так то оно так, вызвать renderPartial однозначно надо будет 2 раза, вопрос в том, возможно ли дергать контроллер только один раз.

То есть дернуть сервер, выполнить renderPartial первый раз, вернуть запрос, затем дернуть renderPartial второй раз.

Просто что бы не дергать лишний раз контроллер. Но как я понял, так сделать не получится, так как 1 запрос, 1 ответ, 1 jquery обработчик.

Так?

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.15, 09:59
shkarbatov
Необходимо по порядку выводить 2 разных шаблона. При том, что контроллер можно дергать только один раз.

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.15, 13:55
anton44eg

Код: Выделить всё

public function actionIndex()
    {
        $this->renderPartial('index');
        $this->renderPartial('index2');
    } 

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.15, 14:31
shkarbatov
А как он будет знать куда ему рендерится?
Так у меня идет запрос, выполняется и javascript уже вставляет его.

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.15, 16:13
anton44eg
всмысле куда?

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.15, 16:18
shkarbatov
У меня генерится шаблон, затем по нажатию на кнопку добавляется новый шаблон внутрь текущего на определенную позицию, затем 3 раза генерится этот же шаблон только уже с другими параметрами и каждый вставляется за последним добавленным.

Надо реализовать поочередную загрузку.

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.15, 16:29
anton44eg
Не понимаю что вам непонятно, вы и так уже все описали

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.15, 16:33
shkarbatov
<body>
Какой-то текст, который есть с самого начала 1
Какой-то текст, который есть с самого начала 2

Сюда надо вставить текст по нажатию
Сюда надо вставить новый текст по 1 нажатию
Сюда надо вставить новый текст по 1 нажатию

Какой-то текст, который есть с самого начала 3
Какой-то текст, который есть с самого начала 4
</body>

Код: Выделить всё

public function actionIndex()
    {
        $this->renderPartial('index');
        $this->renderPartial('index2');
    } 
Куда оно будет вставлять содержимое с учетом вышеописанного кода?

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.15, 16:35
shkarbatov
Можно ли это все сделать по одному запросу (по нажатию кнопки) и сформировать каждый в одном контроллере отдавая результат по частям?

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.15, 16:41
shkarbatov
Понимаете:
renderPartial просто добавляет новый шаблон в конец уже существующего.
А мне надо в середину существующего, а не в конец.

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.15, 16:47
shkarbatov
Да и ко всему прочему ваш код не даст вывод каждого шаблона по порядку, а только оба вместе.

В моем случае должно:
Отрисовался index1 (5 сек)
Отрисовался index2 (5 сек)

Как по вашему коду:
Отрисовался index1 index2 (10 сек)

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.15, 17:15
anton44eg

Код: Выделить всё

public function actionIndex()
    {
        $tpl = $this->renderPartial('index', array(), true);
        $tpl2 = $this->renderPartial('index2', array(), true);
        echo CJSON::encode(array($tpl, $tpl1));
    }  

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.15, 17:27
shkarbatov
1public function actionIndex()
2 {
3 $tpl = $this->renderPartial('index', array(), true);
4 $tpl2 = $this->renderPartial('index2', array(), true);
5 echo CJSON::encode(array($tpl, $tpl1));
6 }

Вы понимаете, что они сгенерятся оба шаблона, и до начала обработки 5 строки у нас будут срендерены 2 шаблона, но при этом пользователь еще не увидет не один, а мне надо что бы до того как начнется обрабатываться 2 шаблон, первый уже был на экране.

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.15, 17:30
anton44eg
у вас так долго рендерятся шаблоны?

Добавлено: 2013.02.15, 17:36
shkarbatov
ДА!!!! Бинго!!!

Дело даже не в том, что они рендерятся так долг.
Мне сейчас важно разобраться с этим и реализовать поочередную загрузку.

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.15, 17:38
anton44eg
блин, вставьте в первый шаблон аякс подгрузку второго

P.S. По-моему вы извращением занимаетесь

Re: renderPartial 2 шаблона по очереди

Добавлено: 2013.02.15, 17:39
shkarbatov
На количество завязываться нельзя. Шаблон используется один и тот же.