it-swarm-tr.com

Template.php ile bir görünüm satırına dinamik olarak bir CSS sınıfı ekleme

Aslında Google'ın alt kısmına bir görünümün her satırına nasıl bir css sınıfı ekleyeceğimizi anlamaya çalıştım. Hile, her satır için dinamik olarak görünümün çektiği düğümden bazı verilere göre belirlenecek sınıf gerekir. Düğüm için bunu düzgün bir şekilde çeken işlev -

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;
  }
}

Bunun amacı, yeterli sayıda kaydolmamış bir etkinliği renk kodlamasıdır. Ön sayfada olayların bir listesi olacak ve bunların renk kodlaması da gerekiyor. Umarım çizgileri boyunca basit bir çözüm vardır -

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

Sadece düşüyor <?php print $event_class ?> görünümünde .tpl bunu yapmaz.

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;
  }
}

Güzel olup olmadığını bilmiyorum. Nasıl performans gösterdiğini bilmiyorum. Ama işe yarıyor.

EDIT (02-01-2012): Drupal başka bir yıl için çalıştıktan sonra, node_load() üzerinde çalıştırmanın yanında bunu yapmanın başka bir yolunu bulmayı denerdim görünümün her satırı.

10
JGrubb

çözümün harika! Sınıfların gerçekten eklemeniz gereken görünümler satır sınıflarına ekleneceğinden emin olmak için

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

sonra

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

Ve önişleme fonksiyonu:

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