web-dev-qa-db-ja.com

プログラムでビューページャーをレンダリングする方法は?

ビューのページャーをプログラムでレンダリングする方法を理解しようとしています。次のようにプログラムでビューをレンダリングしています。

$viewname = 'example_view';
$viewdisplay = 'block';

// get the view machine id
$view = Views::getView($viewname);
// set the display machine id
$view->setDisplay($viewdisplay);
$view->render();

$renderer = $view->rowPlugin;
foreach ($view->result as $index => $row) {
  $view->row_index = $index;
  $vars['content']['view_results'][$index] = $renderer->render($row);
}

だから今私はページャーをレンダリングする必要がありますが、運がありません。私は次のようなことを試しました:

$pagerrenderer = $view->pager;
$vars['content']['view_pager'] = $pagerrenderer->render($view->pager);

しかし、次のエラーが発生します。

回復可能な致命的なエラー:pager_query_add_page()に渡される引数1は、配列のタイプである必要があります。指定されたオブジェクトは、/ www/projectname/docroot/core/includes/pager.incの246行目で呼び出され、pager_query_add_page()で定義されています(311行目) core/includes/pager.inc)。

誰かが私を正しい方向に向けることができますか?

5
Janey

$views->pager()から返されるオブジェクトは、 ViewsPluginInterface を実装し、拡張 PagerPluginBase を実行するオブジェクトです。パラメータ PagerPluginBase::render() を受け入れると、次のように表示されます。

$ input:公開された入力など、保持する必要がある追加のGETパラメーター。

Full::render() を見ると、そのパラメーターがどのように使用されているかがわかります。

  $tags = array(
    0 => $this->options['tags']['first'],
    1 => $this->options['tags']['previous'],
    3 => $this->options['tags']['next'],
    4 => $this->options['tags']['last'],
  );
  return array(
    '#theme' => $this->themeFunctions(),
    '#tags' => $tags,
    '#element' => $this->options['id'],
    '#parameters' => $input,
    '#quantity' => $this->options['quantity'],
    '#route_name' => !empty($this->view->live_preview) ? '<current>' : '<none>',
  );

いずれの場合も、そのオブジェクトのメソッドにオブジェクト自体を渡すことはありません。

7
kiamlaluno