Drupal 7では、レンダー配列にviews_embed_viewを実装する次のコードを使用しました。
$view_output = views_embed_view($view_name, $display_id, $uid);
$page['profile']['bio_mobile'] = array(
'#type' => 'markup',
'#markup' => $view_output,
'#prefix' => '<div class="mobile-display">',
'#suffix' => '</div>',
);
Drupal 8を使用してどうすればよいですか?関数はまだドキュメント化されていますが、渡した配列だけが返されます。
#markup
の使用についてはわかりませんが、次のようにレンダリング可能なView配列を使用して変数を作成できます。
// Staff snippet.
$view = Views::getView('staff');
$view->setDisplay('user_snippet');
$view->preExecute();
$view->execute();
if (count($view->result)) {
$variables['user_snippet'] = $view->buildRenderable('user_snippet');
}
次に、twigファイルで、変数を次の宛先に送信します。
{% if user_snippet %}
{{ user_snippet }}
{% endif %}
確かに、 #markup
は文字列のみを許可しますが、ブロックタイプを使用することでできます
$view_output = views_embed_view($view_name, $display_id, $uid);
$page['profile']['bio_mobile'] = array(
'#type' => 'block',
'content' => [
'system_main' => $view_output,
],
'#prefix' => '<div class="mobile-display">',
'#suffix' => '</div>',
);