Заставить работать какую-либо вьюху с ajax не сложно. Достаточно зайти в настройки и установить параметр Use Ajax: Yes.
К сожалению, модуль Views не предоставляет JS API для программного обновления этой вьюхи. Поэтому, пишем свою функцию (комментарии в коде):
function refreshView(view_id, display_id) {
var instances = Drupal.views.instances,
views = Drupal.settings.views.ajaxViews;
// Просматриваем все существующие в JS ajax вьюхи.
for (var viewDomId in views) {
// Удостоверяемся, что такое свойство существует и
// ищем вьюху по переданным view_id и display_id
if (views.hasOwnProperty(viewDomId)
&& views[viewDomId].view_name == view_id
&& views[viewDomId].view_display_id == display_id) {
// Получаем JS настройки вьюхи.
var viewSettings = views[viewDomId],
// Выясняем dom id вьюхи. Это хэш, который автоматически
// генерируется на каждое обновление страницы.
dom_id = viewSettings.view_dom_id,
// Получаем JS настройки инстанции вьюхи.
instance = instances['views_dom_id:' + dom_id];
// Можно раскомментировать и посмотреть в консоли браузера логи.
// console.log(views[viewDomId]);
// console.log(instance);
// Вообще у вьюхи нет понятия "обновить".
// При запуске триггера на обновление, вьюха загружает следующую страницу.
// Поэтому мы предварительно делаем текущую страницу-1,
// а вьюха, загружая следующусю страницу, загрузит текущую.
instance.refreshViewAjax.options.data.page--;
// Можно установить какие-либо параметры для контекстного фильтра.
// К примеру, id пользователя.
// viewSettings.view_args = 1;
// Инициируем триггер обновления вьюхи.
jQuery('.view-dom-id-' + dom_id).triggerHandler('RefreshView');
}
}
}
Пример использования:
refreshView('view_system_name', 'block');
P.S.
Функция не предусматривает моменты, когда не существует объекта Drupal.views или Drupal.settings.views. Думаю, ничего страшного не произойдет, но в консоли будут сыпаться ошибки типа TypeError: Drupal.views is undefined.
Функция также не будет работать при Use ajax: No, о котором написано в начале поста.