it-swarm-id.com

Menambahkan kelas CSS secara dinamis ke baris tampilan dengan template.php

Saya sebenarnya telah mencapai bagian bawah Google mencoba mencari cara menambahkan kelas css ke setiap baris tampilan. Triknya adalah bahwa saya perlu kelas untuk setiap baris ditentukan secara dinamis berdasarkan beberapa data dari node yang menarik dari tampilan. Fungsi yang melakukan ini dengan rapi untuk node adalah -

function pgc_preprocess(&$variables) {
  $node = $variables['node'];
  if ($node->type == "event") {
    $variables['event_class'] = '';
    $num_trainers = $node->field_number_of_trainers[0]['value'];
    $count = count($node->field_trainer);
    if($count < $num_trainers) {
        $variables['event_class'] = 'red';
    } else {
        $variables['event_class'] = 'green';
    }
    return $variables;
  }
}

Intinya adalah untuk mewarnai kode suatu acara yang belum memiliki cukup banyak orang yang mendaftar. Akan ada daftar acara di halaman depan, dan saya perlu mereka diberi kode warna juga. Saya sangat berharap ada beberapa solusi sederhana di sepanjang -

function pgc_preprocess_views_view_unformatted(&$variables) {
  // Magic here, preferably having something to 
  // do with the function I already wrote.
}

Hanya menjatuhkan <?php print $event_class ?> dalam tampilan .tpl tidak melakukannya.

8
JGrubb
function pgc_preprocess_views_view_unformatted__home_listing(&$vars) {
  // Borrowed this bit from http://drupal.org/node/312220
  $view = $vars['view'];
  $rows = $vars['rows'];

  foreach ($rows as $id => $row) {
    $data = $view->result[$id];
    $event_class = get_the_classes($data->nid);
    $vars['classes'][$id] .= ' ' . $event_class;
  }
}

function get_the_classes($nid) {
  $node = node_load($nid);
  global $user;
  if ($user->uid != 0) { // Not for anon users.
    $event_class = '';
    if ($node->field_trainer[0]['uid'] == NULL) {
        $event_class= 'red';
    } else {
        $num_trainers = $node->field_number_of_trainers[0]['value'];
        $count = count($node->field_trainer);
        if($count < $num_trainers) {
            $event_class = 'red';
        } else {
            $event_class = 'green';
        }
    }
    return $event_class;
  }
}

Tidak tahu apakah itu cantik. Tidak tahu bagaimana kinerjanya. Tapi itu berhasil.

EDIT (02-01-2012): setelah bekerja dengan Drupal untuk satu tahun lagi sekarang, saya telah mencoba mencari cara lain untuk melakukan ini selain menjalankan node_load() on setiap baris tampilan.

10
JGrubb

solusi Anda hebat! Untuk memastikan bahwa kelas akan benar-benar ditambahkan ke kelas baris pandangan yang harus Anda tambahkan

$vars['classes_array'][$id] = implode(' ', $vars['classes'][$id]);

setelah

$vars['classes'][$id][] = $event_class;

Dan fungsi preproses akan:

function pgc_preprocess_views_view_unformatted__home_listing(&$vars) {
  // Borrowed this bit from http://drupal.org/node/312220
  $view = $vars['view'];
  $rows = $vars['rows'];

  foreach ($rows as $id => $row) {
    $data = $view->result[$id];
    $event_class = get_the_classes($data->nid);
    if($event_class != '') {
        $vars['classes'][$id][] = $event_class;
        $vars['classes_array'][$id] = implode(' ', $vars['classes'][$id]);
    }
  }

}

0
Oana Hulpoi