2016-06-06 31 views
1

Aufbau einer Website in Drupal 8, mit klassischen Subtheme. Führen Sie ein rätselhaftes Theming-Problem aus - fügen Sie html.html.twig basierend auf einem Taxonomiebegriff auf diesem Knoten eine body-Klasse hinzu.Drupal 8 - Hinzufügen von Body-Klasse basierend auf Taxonomie-Begriff oder anderen

Die themers verwenden dies, um die Seitenanzeige anzupassen, in meinem Fall, um einige Bereiche meiner Website zu definieren, damit ich Farbe und Format ändern kann.

Ich habe einige Vorverarbeitungsfunktionen ausprobiert, die ich auf Google sah, aber zu keinem Ergebnis.

Hat jemand anderes dieses Problem gelöst und gelöst?

Antwort

0

verwenden alle Felder des Knotens zu erhalten und prüfen Sie, was Sie brauchen:

function your_theme_preprocess_html(&$variables) { 
    $body_classes = []; 
    $nodeFields = \Drupal::service('current_route_match')->getParameter('node')->toArray(); 

    // if something, then set $body_classes to something. 

    $variables['attributes']['class'] += $body_classes; 
} 

Und dann in:

\Drupal::service('current_route_match')->getParameter('node')->toArray(); 

In Ihrem .theme Datei die HTML-Vorprozess Haken verwenden können Ihre HTML-Zweigvorlage fügt dem Körperelement die Attribute hinzu:

<body{{ attributes }}> 

Hoffe, dass dies hilft.

+0

ich diesen Code setzen in meiner .theme Datei (mein Thema Namen in der richtigen Stelle) Aber In der Datei html.html.twig gibt es bereits den klassischen Klassencode. Wenn ich den Code anwende, erhalte ich einen weißen Bildschirm. Dieser Code ist in dem Zweig Vorlage: '' –

+0

Ich weiß auch nicht, wie hier, um einen Kommentar mit meinem Code :( –

+0

Was „hervorgehoben "tut es, dass es die definierten" body_classes "zu den Klassen hinzufügt, die bereits in der Attributvariablen vorhanden sind. Also theoretisch sollte es auch funktionieren. Sie könnten versuchen, mit" var_dump "oder "kint" (wenn Sie das devel-Modul aktiviert haben.) Sie können var dump auch direkt in der Zweigvorlage: http://twig.sensiolabs.org/doc/functions/dump.html Aber Sie müssen das Zweig-Debugging in Ihrem Browser aktivieren services.yml –

0

Mit der Antwort Frank Drebin erhalte ich einen PHP-fatalen Fehler (nicht unterstützte Operandentypen) mit dem "+ =" Operanden. Wenn Sie den Knoten-ID und den Knotentyp, um Ihren Körper Klasse hinzufügen möchten, können Sie diesen Code verwenden, zB:

// Add the node ID and node type to the body class 

$body_classes = []; 
$nodeFields = \Drupal::service('current_route_match')->getParameter('node')->toArray(); 

if (is_array($nodeFields) && count($nodeFields) > 0) { 
    if (isset($nodeFields['nid'])) { 
     $body_classes[] = 'node-' . $nodeFields['nid'][0]['value']; 
    } 
    if (isset($nodeFields['type'])) { 
     $body_classes[] = $nodeFields['type'][0]['target_id']; 
    } 
} 

$variables['attributes']['class'] = $body_classes;