it-swarm.asia

إضافة فئة CSS ديناميكيًا إلى صف عرض مع template.php

لقد وصلت بالفعل إلى الجزء السفلي من 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