it-swarm-eu.dev

Dynamické přidání třídy CSS do řádku pohledu pomocí template.php

Vlastně jsem dosáhl dna Google a snažil se přijít na to, jak přidat třídu css do každého řádku pohledu. Trik je v tom, že potřebuji třídu pro každý řádek, aby byla dynamicky stanovena na základě některých dat z uzlu, ze kterého pohled vytáhne. Funkce, která to úhledně táhne pro uzel, je -

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

Smyslem je zabarvení kódu události, která nemá dostatek lidí k přihlášení. Na úvodní stránce bude seznam událostí a potřebuji, aby byly také barevně označeny. Opravdu doufám, že tam bude nějaké jednoduché řešení

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

Právě klesá <?php print $event_class ?> v pohledu .tpl to nedělá.

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

Nevím, jestli je to hezké. Nevím, jak to funguje. Ale funguje to.

ÚPRAVA (02-01-2012): po práci s Drupal pro další rok nyní) jsem se pokusil najít nějaký jiný způsob, jak to udělat kromě spuštění node_load() on on v každém řádku pohledu.

10
JGrubb

vaše řešení je skvělé! Chcete-li se ujistit, že třídy budou skutečně přidány do řad řádků zobrazení, které byste měli přidat

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

po

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

Funkce předzpracování bude:

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