it-swarm-ko.tech

template.php를 사용하여 CSS 클래스를 동적으로 뷰 행에 추가

실제로 Google의 하단에 도달하여 뷰의 각 행에 CSS 클래스를 추가하는 방법을 알아 내려고했습니다. 요령은 뷰에서 가져 오는 노드의 일부 데이터를 기반으로 각 행의 클래스를 동적으로 결정해야한다는 것입니다. 노드에 대해 이것을 깔끔하게 끄는 기능은-

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

요점은 사람들이 충분히 등록하지 않은 이벤트를 색상으로 코딩하는 것입니다. 첫 페이지에 이벤트 목록이 있으며, 색상으로 코딩해야합니다. 나는 정말로 다음과 같은 간단한 해결책이 있기를 바랍니다.

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

뷰에서 <?php print $event_class ?>을 삭제하면 .tpl이 수행하지 않습니다.

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

예쁜지 모르겠다. 그것이 어떻게 작동하는지 모릅니다. 그러나 작동합니다.

편집 (02-01-2012) : Drupal 다른 해 동안 작업 한 후, node_load()을 실행하는 것 외에 다른 방법을 찾으려고 노력했습니다 보기의 모든 행.

10
JGrubb

당신의 솔루션은 훌륭합니다! 클래스가 실제로 뷰 행 클래스에 추가되도록하려면 추가해야합니다.

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

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

전처리 기능은 다음과 같습니다.

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