it-swarm.com.de

Platzieren Sie den Blockbereich in der Knotenvorlage

Ich versuche, einen Blockbereich innerhalb eines Nachrichteninhaltstyps zu platzieren, aber er wird nicht gerendert.

node - news.html.twig:

<article{{ attributes }} class="portal-article">

  <h1 class="article-title">{{node.label}}</h1>

  <p class="article-date">{{ date }}</p>

  <div class="article-main-content">
    {{ content }}
  </div>

  <div class="article-sidebar">
      {{ page.article_sidebar }}
  </div>

</article>

Wie kann ich den Block innerhalb eines Knotens rendern lassen?

5
Evan

Dies ist wahrscheinlich die Lösung: "Bereitstellung von Regionsinhalten für Knotenvorlagen in Drupal 8"): http://atendesigngroup.com/blog/making-region-content-available- Node-Templates-Drupal-8


Ersetzen Sie "THEMA" durch Ihren Themennamen:

/**
* Implements hook_preprocess_node() for NODE document templates.
*/
function THEME_preprocess_node(&$variables) {
  // Allowed view modes
  $view_mode = $variables['view_mode']; // Retrieve view mode
  $allowed_view_modes = ['full']; // Array of allowed view modes (for performance so as to not execute on unneeded nodes)

  // If view mode is in allowed view modes list, pass to THEME_add_regions_to_node()
  if(in_array($view_mode, $allowed_view_modes)) {
    // Allowed regions (for performance so as to not execute for unneeded region)
    $allowed_regions = ['primary_content'];
    THEME_add_regions_to_node($allowed_regions, $variables);
  }
}

/**
* THEME_add_regions_to_node
*/

function THEME_add_regions_to_node($allowed_regions, &$variables) {
  // Retrieve active theme
  $theme = \Drupal::theme()->getActiveTheme()->getName();

  // Retrieve theme regions
  $available_regions = system_region_list($theme, 'REGIONS_ALL');

  // Validate allowed regions with available regions
  $regions = array_intersect(array_keys($available_regions), $allowed_regions);

  // For each region
  foreach ($regions as $key => $region) {

    // Load region blocks
    $blocks = entity_load_multiple_by_properties('block', array('theme' => $theme, 'region' => $region));

    // Sort ‘em
    uasort($blocks, 'Drupal\block\Entity\Block::sort');

    // Capture viewable blocks and their settings to $build
    $build = array();
    foreach ($blocks as $key => $block) {
      if ($block->access('view')) {
        $build[$key] = entity_view($block, 'block');
      }
    }

    // Add build to region
    $variables[$region] = $build;
  }
}

Nach dem Löschen der Caches kann ich jetzt den im Blocklayout von Drupal angegebenen Inhalt mithilfe meiner Knotenvorlagendateien drucken. Wenn ich beispielsweise den primären_Inhalt in $ allow_regions angegeben habe, kann ich über den Knoten - node_type.html.twig auf Folgendes zugreifen:

{{ primary_content }}
5
Alberto Silva

Wie in den Kommentaren erwähnt, fallen Blöcke nicht in den Bereich von Knoten. Knoten befinden sich normalerweise in einer Region, die normalerweise als "Hauptinhaltsbereich" oder nur "Hauptinhalt" bezeichnet wird.

Blöcke könnten sich auch in der oben genannten Region "Hauptinhalt" befinden, aber sie sind höchstwahrscheinlich um diese herum zu finden --- In dem, was ich gerne "Peripherie-Regionen" nenne, ist dies eigentlich jede Region außer "Hauptinhalt".

Wenn Sie das Layout der Basisknoten in Drupal 8 (oder 7)) ändern möchten, beachten Sie, dass es nicht erforderlich ist, Vorlagendateien dafür anzupassen. Sie können auch die GUI dafür verwenden. Ich würde nicht Es wird nicht empfohlen, den Seitenmanager zu verwenden, sondern tatsächlich das Modul " Absätze " zu verwenden, mit dem Sie zuerst auf Mobilgeräte reagierende Layouts für Knoten erhalten. die also in Übereinstimmung mit der Mobile-First-Responsive-Einstellung von Drupal 8.

1
JohnDoea