Как присвоить новый стиль CSS если переменная TRUE ?

Главные вкладки

Аватар пользователя akhmetshin akhmetshin 31 мая 2012 в 17:44

Всем привет.

Нужно реализовать следующее, при добавлении материала редактор указывает чекбоксами наличие или отсутствие неких атрибутов (условно: атрибут 1, атрибут 2, атрибут 3) - если есть атрибут ставит галочку, если нет - то не ставит. Это поле создал с помощью ССК, теперь же нужно его вывести, следующим образом.

Не зависимо от того стоит галочка перед атрибутом или нет, нужно вывести все атрибуты:

<ul>
<li>атрибут 1</li>
<li>атрибут 2</li>
<li>атрибут 3</li>
</ul>

И если галочка стоит перед атрибутом то присвоить нужно CSS стиль, например:

<ul>
<li class="true">атрибут 1</li>
<li class="true">атрибут 2</li>
<li>атрибут 3</li>
</ul>

На примере выше получается, что редактор при добавлении поставил галочки в чекбоксах перед "атрибут 1" и "атрибут 2".

Как такое реализовать? То есть задача состоит в том, что нужно присвоить стиль если стоит галочка в чекбоксе.

Devel показывает:

field_fac (Array, 1 element)

    0 (Array, 4 elements)
        value (String, 61 characters ) <ul> <li>Атрибут 1...
            <ul> <li>Атрибут 1</li> </ul>
        format (String, 1 characters ) 2
        safe (String, 60 characters ) <ul> <li>Атрибут 1...
            <ul> <li>Атрибут 1</li> </ul>
        view (String, 60 characters ) <ul> <li>Атрибут 1...
            <ul> <li>Атрибут 1</li> </ul>

То есть в этом случаи галочка поставлена только перед Атрибут 1. При этом еще проблема в том, что Drupal не видит, другие атрибуты, перед которыми нет галочек. А их все равно нужно выводить, только без присвоения нового стиля.

------

p.s. если готовы помощь за денюжку, то добавляйтесь в скайпе: seolyric.com обсудим
p.p.s. если этот вопрос сложный, то ответьте на простой вопрос по PHP тут http://www.drupal.ru/node/82593

Комментарии

Аватар пользователя sitdikov sitdikov 2 июня 2012 в 12:33
<?php

        $node = node_load($nid);

        $r = db_query('SELECT global_settings FROM content_node_field c WHERE field_name = "field_cb_list"');
       
        $rows = db_fetch_array($r);

        $data = unserialize($rows['global_settings']);

        $_ = explode("\n", $data['allowed_values']);
       
        $keys = array();
        $val = array();
       
        foreach ($_ as $v)
        {
                $d = explode('|', $v);
                $keys[] = $d[0];
                $val[] = $d[1];
        }
       
        $fields = array_combine($keys, $val);
        $ex = array();
        foreach ($node->field_cb_list as $v)
        {
                $ex[] = $v['value'];
        }
        print '<ul>';
        foreach ($fields as $k => $v)
        print '<li'.(in_array($k, $ex)?' class="true"':'').'>'.$v.'</li>';
        print '</ul>';
       

?>

Сильно не пинаться, на скорую руку написано. А вообще - таксономия была бы лучше и вернее.

http://d6.fotograd.org/node/1

Аватар пользователя sitdikov sitdikov 2 июня 2012 в 12:47

node-TYPE.tpl.php
Внутри него загружаем node по nid.

в моем случае поле CCK называлось cb_list, в таблице content_node_field хранятся настройки. Поэтому выбираем их таблицы поле global_settings.
Данные хранятся сериализованными, десериализируем их. Так как каждое значение записывается с новой строки, то параметр allowed_values разбиваем на массив по \n.

потом собираем отдельно ключи и значения, комбинируем их. $node->field_cb_list - это как раз ССK поле. Перебираем его чтобы узнать какие отмечены.

А дальше просто вывод. Если в массиве есть ключ - ставим класс, если нет - не ставим.