it-swarm.com.de

Hinzufügen einer Klasse zu einer Region

Ich arbeite an meinem Thema in Drupal 8 und möchte meiner Header-Div eine Klasse hinzufügen. Ich habe versucht, diese der Datei region.vars.php hinzuzufügen.

if ($region === 'header') {
  $variables[header]['class'][] = 'navbar-right';
}

Es funktioniert jedoch nicht. Dies ist die vollständige Datei region.vars.php.

<?php
/**
 * @file
 * region.vars.php
 */

use Drupal\Core\Template\Attribute;

/**
 * Implements hook_preprocess_region().
 */
function bootstrap_preprocess_region(&$variables) {
  $region = $variables['elements']['#region'];
  $variables['region'] = $region;
  $variables['content'] = $variables['elements']['#children'];

  $theme = \Drupal::theme()->getActiveTheme()->getName();


  // Content region.
  if ($region === 'content') {
    // @todo is this actually used properly?
    $variables['theme_hook_suggestions'][] = 'region__no_wrapper';
  }
  // Help region.
  elseif ($region === 'help' && !empty($variables['content'])) {
    $content = $variables['content'];
    $variables['content'] = array(
      'icon' => array(
        '#markup' => _bootstrap_icon('question-sign'),
      ),
      'content' => array(
        '#markup' => $content,
      ),
    );
    $variables['attributes']['class'][] = 'alert';
    $variables['attributes']['class'][] = 'alert-info';
    $variables['attributes']['class'][] = 'messages';
    $variables['attributes']['class'][] = 'info';
  }

  // Support for "well" classes in regions.
  static $wells;
  if (!isset($wells)) {
    foreach (system_region_list($theme) as $name => $title) {
      $wells[$name] = bootstrap_setting('region_well-' . $name);
    }
  }
  if (!empty($wells[$region])) {
    $variables['attributes']['class'][] = $wells[$region];
  }

   if ($region === 'header') {
    $variables[header]['class'][] = 'navbar-right';
  }

}

Ich habe den größten Teil dieses Codes vom Thema Drupal 8 bootstrap) erhalten. Alles andere funktioniert.

4
Tyler

Normalerweise füge ich für alle meine Themen die fehlende Klasse region region-name Zu jeder Region hinzu, indem ich hook_preproccess_HOOK in MYTHEME.theme Implementiere.

/**
 * Implements template_preprocess_region().
 */
function MYTHEME_preprocess_region(&$variables) {

  // Add missing region CSS classes.
  $variables['attributes']['class'][] = 'region';

  if (isset($variables['region']) && !empty($variables['region'])) {

    $variables['attributes']['class'][] = 'region-' . str_replace('_', '-', $variables['region']);
  }
}
2
leymannx

In Drupal 8) befindet sich eine .theme-Datei in Ihrem Themes/[Themenname] -Verzeichnis. Sie können Ihren Vorprozess dort schreiben, zum Beispiel hooks_preprocess_page(&$variables){}, wo Sie können Überprüfen Sie den Inhaltstyp des Knotens und anderer Felder.

In Ihrem Fall können Sie den Inhaltstyp in einer Variablen wie im folgenden Code übergeben.

 $node = \Drupal::routeMatch()->getParameter('node');

 if (isset($node)) {
   $entity = entity_load('node', $node->nid->value);
   if ($entity) {
     $type = $entity->get('type')->getValue();
     $variables['content_type'] = $type;`
   }
 }

Diese Variable steht Ihnen in Ihrer page.html.twig (der Seitenvorlage) zur Verfügung.

Es gibt bereits eine Variable namens page.header, die den Header der Seite angibt. Sie können <div> Um page.header Einfügen.

{%if content_type == 'articles' %}
<div class='extra-header-class'>{{ page.header }}
</div>{% else %}
{{ page.header }}
{% endif %}
0
Ashish Deynap

Verwenden von $variables['attributes']['class'][] = 'navbar-right'; fügt die Klasse dem Div hinzu, der die Region umschließt. Ich habe es in die .theme-Datei eingefügt (frühere template.php in D7).

0
littlethoughts