Программная установка offset во вьюсах

Главные вкладки

Аватар пользователя goodboy goodboy 28 мая 2014 в 12:17

Понадобилось динамически назначать offset для views.

Вызываю вьюв /articles?page1=3, хочу перейти на 4-ю страницу.

function MYMODULE_views_pre_execute(&$view)
{

if ($view->name == 'articles' ) {

  $currpage = 0;
  if ( isset($_GET['page1'])) { $currpage = $_GET['page1']; }
  print "currpage=$currpage";

  if ($currpage > 0) {

      $items_per_page = $view->display[$view->current_display]->handler->view->get_items_per_page();
      $offset = $view->display[$view->current_display]->handler->view->get_offset();
      print "items_per_page=$items_per_page offset=$offset";
      if ($items_per_page>0) {
         $new_offset =  $currpage*$items_per_page;
         print "new_offset=$new_offset";
         $view->display[$view->current_display]->handler->view->set_offset($new_offset);
         $view->set_offset($new_offset);
         $view->display[$view->current_display]->handler->view->query->pager->offset = $new_offset;

         $offset2 = $view->display[$view->current_display]->handler->view->get_offset();
         print "offset2=$offset2";
         $offset3 = $view->get_offset();
         print "offset3=$offset3";

         $view->display[$view->current_display]->handler->view->query->pager->update_page_info();
      }
  }
 }
}

На выходе получаю: "currpage=3items_per_page=10 offset=0new_offset=30offset2=30offset3=30"

Казалось бы, offset установлен, но все равно показывает первую страницу вьюва. Пробовал с вьювами с установленным pager и без него.

Views 7.x-3.8

Возможно, использую не тот hook, буду раз любым советам.