繰り返しの段落フィールドを含むノードタイプ「記事」があります。段落タイプの1つで、エンティティ参照フィールドを使用してビューを埋め込むことができます。ビュー参照を含むArticleノードをレンダリングするときに、選択したビューを次のhook_preprocess_paragraph
ように埋め込みます。
$view_id = $paragraph->field_view->target_id;
$view = \Drupal\views\Views::getView($view_id);
$view->setDisplay('embed_1');
$vars['content'] = $view->preview();
これは、キャッシュを有効にする場合を除いて、正常に機能しています。たとえば、私のビューの1つは、「イベント」タイプのノードをリストします。新しいイベントを追加すると、キャッシュを消去するまでリストに表示されません。「イベント」を挿入/更新/削除するときにキャッシュを強制的に消去できますが、Drupal 8のキャッシュタグシステムを使用して、イベントリストを含むキャッシュされたコンテンツのみを無効にしたいと思います。問題は、それを機能させることができないことです。
これまでのところ私は、ノード、ビュー、および段落にキャッシュタグを追加しようとしているhook_preprocess_paragraph
とhook_preprocess_node
、このように:
$vars['paragraph']->addCacheTags(['node_list']);
...
$view->storage->addCacheTags(['node_list']);
...
$vars['node']->addCacheTags(['node_list']);
このページに よればnode_list
、ノードが更新されるたびにキャッシュを無効にするノードリストに使用できます。しかし、効果はありません。多分、前処理フックはキャッシュタグを追加するのが遅いのでしょうか?
何が欠けていますか?
編集:
さらにテストを行ったところ、イベントを編集すると変更がリストに表示され、イベントを削除するとリストから消えることがわかりました。この問題は、新しいイベントを追加するときにのみ発生します。
$view-buildRenderable()
twigファイルの結果をレンダリングするにはどうすればよいですか?使用するときは、twigテンプレートで$view->preview()
実行できます{{ content }}
が、機能しません。