Всем привет.
Нужно реализовать следующее, при добавлении материала редактор указывает чекбоксами наличие или отсутствие неких атрибутов (условно: атрибут 1, атрибут 2, атрибут 3) - если есть атрибут ставит галочку, если нет - то не ставит. Это поле создал с помощью ССК, теперь же нужно его вывести, следующим образом.
Не зависимо от того стоит галочка перед атрибутом или нет, нужно вывести все атрибуты:
<li>атрибут 1</li>
<li>атрибут 2</li>
<li>атрибут 3</li>
</ul>
И если галочка стоит перед атрибутом то присвоить нужно CSS стиль, например:
<li class="true">атрибут 1</li>
<li class="true">атрибут 2</li>
<li>атрибут 3</li>
</ul>
На примере выше получается, что редактор при добавлении поставил галочки в чекбоксах перед "атрибут 1" и "атрибут 2".
Как такое реализовать? То есть задача состоит в том, что нужно присвоить стиль если стоит галочка в чекбоксе.
Devel показывает:
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
Комментарии
СЕЛЕКТОРЫ знать нуна, уважаемый
alex_shut, вообще никакую связь не вижу...
оу.. весьми извеняюсь. Прочел топик снова и понял что не в темизации дело.
еще раз сори)
Есть идеи?
$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
node-TYPE.tpl.php
Внутри него загружаем node по nid.
в моем случае поле CCK называлось cb_list, в таблице content_node_field хранятся настройки. Поэтому выбираем их таблицы поле global_settings.
Данные хранятся сериализованными, десериализируем их. Так как каждое значение записывается с новой строки, то параметр allowed_values разбиваем на массив по \n.
потом собираем отдельно ключи и значения, комбинируем их. $node->field_cb_list - это как раз ССK поле. Перебираем его чтобы узнать какие отмечены.
А дальше просто вывод. Если в массиве есть ключ - ставим класс, если нет - не ставим.