Drupal 8)のコンテキストフィルターを使用してプログラムでビューをレンダリングするにはどうすればよいですか?
Drupal 7では、一般的に次のコードを使用します。
$view = views_get_view('test_view'); //test_view is the view machine name
$view->set_display("block"); //block is the view display name
$view->set_arguments($tid); //$tid is the argument to pass
$view->pre_execute();
$view->execute();
$content = $view->render();
Drupal 8)でこれを達成する別の方法はありますか?
views_get_view_result()
で使用されるコードに基づいて、質問で示したコードと同等のコードとして、次のコードを使用します。
$args = [$tid];
$view = Views::getView('test_view');
if (is_object($view)) {
$view->setArguments($args);
$view->setDisplay('block');
$view->preExecute();
$view->execute();
$content = $view->buildRenderable('block', $args);
}
/**
* Return the rendered view with contextual filter.
* @param string $viewId - The view machine name.
* @param string $viewId - The display machine name.
* @param array $arguments - The arguments to pass.
*
* @return object $result
*/
function getView($viewId, $displayId, array $arguments)
{
$result = false;
$view = Views::getView($viewId);
if (is_object($view)) {
$view->setDisplay($displayId);
$view->setArguments($arguments);
$view->execute();
// Render the view
$result = \Drupal::service('renderer')->render($view->render());
}
return $result;
}
/**
* Get json output.
* @return array $data
*/
function jsonData() {
$data = [];
$viewId = 'rest_comments';
$displayId = 'rest_export_1';
$arguments = [$nid];
// Get the view
$result = getView($viewId, $displayId, $arguments);
if(is_object($result)) {
$json = $result->jsonSerialize();
$data = json_decode($json);
}
return $data;
}
/**
* Get the view object.
* @return object $view
*/
function view() {
$viewId = 'rest_comments';
$displayId = 'rest_export_1';
$arguments = [$nid];
// Get the view
$view = getView($viewId, $displayId, $arguments);
return $view;
}
RESTエクスポート表示の実際のJSON出力を取得するには、次のようにします。
$view = Views::getView('view_id');
$render_array = $view->buildRenderable('display_name', $args);
$rendered = \Drupal::service('renderer')->renderRoot($render_array);
$json_string = $rendered->jsonSerialize();
$json_object = json_decode($rendered);