web-dev-qa-db-ja.com

プログラムでビューページャーを変更する

プログラムでビューにノードを追加し、fooking_views_pre_renderに次のように設定して、ページャーの「xからyへ」を変更しています。

$view->query->pager->total_items = $count;
$view->query->pager->current_page = isset($params['page']) ? $params['page'] : 0;
$view->query->pager->options['total_pages'] = ceil( $count / $lim );
$view->total_rows = (string) $count;
$view->items_per_page = (string) $view->query->pager->options['items_per_page'];
$view->current_page =isset($params['page']) ? $params['page'] : 0;

10ページあるとしますが、このコードを使用しても何も起こらないようで、何も変更されません。 2ページ目にある場合、次のボタンは表示されません。コードでこれをどのように達成できますか?この結果を得るには、どのオブジェクト、配列を変更する必要がありますか?任意の助けいただければ幸いです。

ありがとう

4
adevms

このようなことを試して、それが役立つかどうかを確認してください

function views_pag_views_pre_build(&$view) {
    if ($view->name == "pagination") {
            $view->init_pager();
            $view->set_items_per_page('10');

    }
}
9
Ali Nouman

すべての大きな助けをありがとう。 hook_views_pre_renderでは、次の2行のコードを使用しました。

if($view->name=='myview'){ ...
   $view->query->pager->total_items = $count;       
   $view->query->pager->update_page_info();
...
}

そして今、ポケットベルは魅力のように働いています。 :D 1ページあたりの項目の値はビューのUIで設定したため、プログラムで変更/設定する必要はありませんでした。

3
adevms

Drupal 8を使用している場合:あなたが私と同じで、 'hook_views_query_pre_render'フックでビューを変更した場合、ページを更新するために必要なことは次のとおりです。

$view->result = $new_results; // Where $new_results is an array of new rows
$view->total_rows = count($new_results);
$view->pager->total_items = count($new_results);
$view->pager->updatePageInfo(); // After updating page variables then it's important to run this method!

ページャーは変数「total_items」を使用し、ビューオブジェクトは変数「total_rows」を使用することに注意してください...

それが誰かを助けることを願っています!

2
ph08n1x