Фронтенд парень говорит о бэкенде — имейте в виду.
У нас есть модуль под названием Ideas
который имеет какую-то временную шкалу с различными записями идей для проекта.
Первоначальный рендер, на IdeasProjectController.php
проходит через actionView
метод для отображения представления на экране, но я хотел повторно использовать это действие, чтобы вместо этого я мог запросить какое-то содержимое с разбивкой по страницам из этого метода действия.
Вот как это выглядит сейчас:
$data = array(
'user' => $user,
'project' => $project,
'ideas' => $ideas,
'myIdeas' => false,
'offset' => isset($offset) ? $offset : 0,
'isAjaxRequest' => $isAjaxRequest,
'isVotingActive' => $project->isVotingActive(),
'userHasIdeas' => count($userIdeas) > 0,
'teamInviteParams' => $teamInviteParams,
);
// renderPartial only if an ajax request
if ($isAjaxRequest) {
$this->renderPartial('view', $data, null, true);
} else {
$this->render('view', $data);
}
в view.php
связанный файл мы используем isAjaxRequest
параметр, чтобы, наконец, запустить рендеринг другого файла ветки, с аналогичным набором данных, зная, что файл запрашивается полной render
содержит файл ветки, который я использую для renderPartial
, В этом случае:
if( $isAjaxRequest ) {
Yii::app()->twig->render('blocks/l-ideas/b-ideas-list/b-ideas-list.twig', array(..)
} else {
Yii::app()->twig->render('blocks/l-ideas/l-ideas-project/l-ideas-project.twig', array(..)
Пока все хорошо. Но мне нужно b-ideas-list
для использования в файле макета ветки, как это: {% use '/blocks/l-ideas/b-ideas-list/b-ideas-list.twig' %}
с совершенно разными результатами, так что это как b-ideas-list.twig
выглядит как внутри:
{% block bIdeasList %}
{% if not isAjaxRequest %}
<div class="b-ideas-list__wrap b-ideas-list__wrap_no-margin">
.. lots of boilerplate ..
</div>
<div class="b-ideas-list b-ideas-list_covers clearfix">
<div class="b-ideas-list__wrap">
<div class="clearfix b-ideas-list__wraper-fixed-box">
<div class="b-ideas-list__left"> </div>
<div class="b-ideas-list__center">
{{ block('bIdeasList_') }}
{{ block('bIdeasMore_') }}
</div>
{{ block('bIdeasListPartners_') }}
</div>
{{ block('bIdeasListActiveIdeas_') }}
</div>
</div>
{% else %}
{{ block('bIdeasList_') }}
{{ block('bIdeasMore_') }}
{% endif %}
{% endblock %}
Таким образом, по запросу AJAX я просто получаю минимальный список идей и More
кнопка, чтобы загрузить больше при следующем запросе AJAX. С некоторым смещением и т. Д.
Сейчас. Если я получу http доступ к полученному URL, что-то вроде /ideas/ideasProject/view/1?offset=5
имея всего 7 записей в базе данных, я получаю две новые идеи и полный макет. Но делая такой же доступ через AJAX-вызов к одному и тому же URL-адресу, я получаю две карты идей, лишенные макета, и ТОГДА шаблонный код, окружающий bIdeasList
заблокировать, как будто я не получил доступ с isAjaxRequest
правда, всего за один звонок.
Если вы все еще читаете это. Как вы думаете, вы можете помочь?
Задача ещё не решена.
Других решений пока нет …