it-swarm.com.de

Fügen Sie der Ansichtszeile abhängig vom Feldwert eine benutzerdefinierte Klasse hinzu

Ich verwende Ansichten, um verschiedene Felder einer Entität anzuzeigen. Wenn die UID der Entität der aktuelle Benutzer ist, möchte ich der gesamten Zeile (nicht nur dem Feld) eine benutzerdefinierte Klasse hinzufügen.

Ich habe die folgende Vorverarbeitungsfunktion geschrieben, die gut funktioniert, wenn ich die Entität in Ansichten verwende, aber ich weiß nicht, wie ich sie ändern soll, wenn ich stattdessen Felder verwende:

function my_module_preprocess_views_view_unformatted(&$variables) {

  $view = $variables['view'];

  if ($view->id() == 'my_view' && $view->current_display == 'page_1') {

    $rows = $variables['rows'];
    foreach ($rows as $id => $row) {

      $uid = \Drupal::currentUser()->id();

      $owner = $row['content']['uid']['#object']->get('uid')->getString();

      $class = ($uid == $owner) ? 'own' : 'other';

      $custom_row_class = 'views-row-' . $class;
      $variables['rows'][$id]['attributes']->addClass($custom_row_class);
    }

  }
}
2
Franz

Können Sie bitte diesen Code versuchen

function my_module_preprocess_views_view_unformatted(&$variables) {

    $view = $variables['view'];

    if ($view->id() == 'my_view' && $view->current_display == 'page_1') {

        $uid = \Drupal::currentUser()->id();
        $rows = $variables['rows'];
        foreach ($rows as $id => $row) {

            //$owner = $row['content']['uid']['#object']->get('uid')->getString();
            $owner = $row['content']['#row']->_entity->get('uid')->target_id;

            $class = ($uid == $owner) ? 'own' : 'other';

            $custom_row_class = 'views-row-' . $class;
            $variables['rows'][$id]['attributes']->addClass($custom_row_class);

        }

    }
}
5
Raj Ghai