Это то, что я делал в прошлом.
Сначала настройте помощник действий AjaxContext , чтобы включить контекст html
в действии вашего контроллера.
Добавьте .ajax.phtml
представление, которое содержит только раздел разметки, который может быть заменен через AJAX, а также ссылки управления разбиением на страницы. Вы можете, вероятно, просто скопировать это из вашего обычного представления. Замените этот раздел в обычном представлении на что-то вроде
<div id="reloadable-content">
<?php echo $this->render('controller/action.ajax.phtml') ?>
</div>
Это будет гарантировать, что ваши первоначальные и любые запросы, не относящиеся к AJAX, будут по-прежнему содержать правильное содержимое. Идентификатор <div>
предназначен исключительно для ссылки на загружаемый блок в JavaScript.
Также убедитесь, что вы включили ваш файл JS (используя headScript
) только в обычный вид.
Теперь в вашем JS-файле незаметно добавьте соответствующую привязку события к ссылкам на страницы. Поскольку вы замените раздел управления разбиением на страницы, чтобы отобразить правильную текущую страницу и другие ссылки, вероятно, лучше всего сделать это с помощью привязки jQuery live
. Я также предполагаю, что вы оберните элемент управления нумерацией страниц каким-нибудь идентифицируемым элементом (например, <div class="pagination-control">
)
$('.pagination-control').find('a').live('click', function(e) {
var link = $(this);
$('#reloadable-content').load(link.attr('href'), { format: 'html' });
return false;
});
Имейте в виду, что при использовании этого метода вы потеряете возможность навигации по постраничным запросам с помощью обычных кнопок браузера «назад / вперед». Вы также потеряете возможность напрямую создавать закладки для страниц (хотя вы всегда можете предоставить постоянную ссылку на текущую страницу как часть загруженного содержимого AJAX).
Вы можете использовать что-то вроде jQuery плагин истории , если вы действительно заинтересованы, но это потребует больше работы на стороне клиента.
Еще одна оговорка: вышеописанное будет работать только со ссылками на нумерацию страниц. Если вы хотите использовать форму с выбором выпадающего списка, вам нужно добавить другой обработчик событий для отправки.