web-dev-qa-db-ja.com

テーマで段落をレンダリングするときに、現在の段落をレンダリングしながら最後にレンダリングされた段落を確認する方法はありますか?

約20の段落タイプがあります。それらの1つはh2を挿入し、ページの上部にジャンプメニューを生成します(私は自分で生成しています)。

パターンラボには、前述の特定のタイプが使用されているため、コンテナの特別なCSSクラスの次に(挿入される次の段落が何であれ)コンテンツがあります。

theme_preprocess_paragraphまたはtheme_preprocess_fieldに、現在のクラスが特定の段落タイプである場合に「振り返って」CSSクラスを追加する方法はありますか?

2
Kevin

はい、前処理で次のようなことができます。

    <?php
    // Get entity reference revision item that points to this paragraph.
    /** @var \Drupal\entity_reference_revisions\Plugin\Field\FieldType\EntityReferenceRevisionsItem $item_reference */
    $item_reference = $paragraph->_referringItem;

    // Get entity reference revision field items list that holds all
    // paragraphs.
    /** @var \Drupal\entity_reference_revisions\EntityReferenceRevisionsFieldItemList $items_list */
    $items_list = $item_reference->getParent();

    // Get next index position of current paragraph in entity ref. revision
    // field items list.
    $next_delta = $item_reference->getName() + 1;

    // Check if there is a paragraph on the next delta.
    if ($items_list->offsetExists($next_delta) && $items_list->get($next_delta)->entity) {

その特別なプロパティは、\ Drupal\Core\Field\Plugin\Field\FieldFormatter\EntityReferenceFormatterBase :: getEntitiesToView()で設定されます。また、段落自体はレンダーキャッシュされず、複数の場所で使用されないため、実際に信頼することができます。 (これもノードに設定されますが、レンダーキャッシュのため、少なくともデフォルトでは、そこにあることを信頼することはできません)。

4
Berdir