Blockプラグインとパネルの組み合わせを使用して、さまざまなコンテンツタイプの表示モードのレイアウトを設定します。
次に例を示します。
class MyBlockPlugin extends BlockBase
{
/**
* {@inheritdoc}
*/
public function build()
{
$node = \Drupal::routeMatch()->getParameter('node');
$profile_pic = ImageStyle::load('350x300')->buildUrl($node->field_image->entity->getFileUri());
return [
'#theme' => 'mytwigtheme',
'#name' => $node->title->value,
'#headshot' => $profile_pic
];
}
}
これは確かに機能しますが、複数のブロックプラグインをロードして同じノードにアクセスするので、これが移動するのに悪い道ではないかと思います。前処理ブロックフックを使用してノードにアクセスできると思いますが、すべてのブロックに対してもロードされると想定しています。
パフォーマンスコストが小さい場合は、冗長性についてあまり心配していません。私の方法は大丈夫ですか?そうでない場合、ブロックプラグインが表示される現在のノードのデータにアクセスするためのより良い方法は何でしょうか?
更新:別の考えです。 twigテンプレートを使用していますか?
ノードエンティティに関するパフォーマンスの問題はありません。リクエストごとに1回だけロードされ、メモリに保存されます。
リクエスト間のキャッシュでは、ブロックのレンダリングされたtwigテンプレートがデフォルトでキャッシュされるため、パフォーマンスの問題もありません。ただし、正しいキャッシュデータを提供することを確認する必要があります。アノテーションのプラグインコンテキストを介して(推奨)、またはキャッシュメタデータをレンダーアレイに追加することで可能になります。現在のノードとその最終変更時間に応じて ブロックキャッシュを参照してください