it-swarm.com.de

Wie kann ein View Pager programmgesteuert gerendert werden?

Ich versuche herauszufinden, wie der Pager einer Ansicht programmgesteuert gerendert wird. Ich rendere meine Ansicht programmgesteuert wie folgt:

$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);
}

Jetzt muss ich den Pager rendern, habe aber kein Glück. Ich habe so etwas versucht wie:

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

aber dann mit dem folgenden Fehler enden:

Behebbarer schwerwiegender Fehler: Argument 1, das an pager_query_add_page () übergeben wurde, muss vom Typ Array sein, Objekt angegeben, in /www/projectname/docroot/core/includes/pager.inc in Zeile 246 aufgerufen und in pager_query_add_page () (Zeile 311 von) definiert core/includes/pager.inc).

Kann mich jemand in die richtige Richtung weisen?

5
Janey

Das von $views->pager() zurückgegebene Objekt ist ein Objekt, das ViewsPluginInterface implementiert und PagerPluginBase erweitert. Wenn Sie sich die Parameter ansehen, die PagerPluginBase::render() akzeptiert, werden Sie sehen, dass sie:

$ input : Alle zusätzlichen GET-Parameter, die beibehalten werden sollen, z. B. exponierte Eingaben.

Wenn Sie sich Full::render() ansehen, haben Sie eine Vorstellung davon, wie dieser Parameter verwendet wird.

  $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>',
  );

In jedem Fall übergeben Sie das Objekt selbst nicht an die Methode dieses Objekts.

7
kiamlaluno