Разделение таксономии

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

Аватар пользователя bnku bnku 1 февраля 2008 в 0:20

Стоит задача разделять записи в блогах на категории (при создании записи выбирается один возможный вариант из словаря). В то же время хочется, что бы к записи можно было добавить список тегов.

Создаю два словаря: первый с категориями, другой для пользовательских тегов.
Но в шаблон node.inc.php они все идут одним списком (пример в продолжении поста)
Собственно вопрос: как разделить эти два словаря, что бы можно было отличать их в файле шаблона?

$taxonomy
Array
(
    [taxonomy_term_1] => Array
        (
            [title] => Категория
            [href] => taxonomy/term/1
            [attributes] => Array
                (
                    [rel] => tag
                    [title] =>
                )

        )

    [taxonomy_term_7] => Array
        (
            [title] => тег 1
            [href] => taxonomy/term/7
            [attributes] => Array
                (
                    [rel] => tag
                    [title] =>
                )

        )

    [taxonomy_term_6] => Array
        (
            [title] => тег 2
            [href] => taxonomy/term/6
            [attributes] => Array
                (
                    [rel] => tag
                    [title] =>
                )

        )

Комментарии

Аватар пользователя edhel edhel 1 февраля 2008 в 6:09

вместо вывода $terms сделать собственное форматирование терминов из $node->taxonomy. Или прямо в node.tpl.php или template.php/_phpteamplate_variables.

Аватар пользователя bnku bnku 1 февраля 2008 в 12:07

$node->taxonomy - это тот же массив, что и $taxonomy.
как определить какой термин из какого словаря?

сейчас попробую реализовать категории на og, но, конечно, это не совсем то, что мне нудно :(. хочется попроще :).

Аватар пользователя bnku bnku 1 февраля 2008 в 13:46

в моем примере обязательный термин из словаря "категории" идет первым в массиве. не проверял, но похоже это зависит от порядкового номера словаря.
собственно, сделал следующее:

$category=array_shift($taxonomy);

теперь у меня два массива: в $category хранится категория, в $taxanomy остальные термины из списка "теги".

ПС: Ужаснулся от размеров OG %).

Аватар пользователя bnku bnku 1 февраля 2008 в 14:15

Если выбор категории не принудительный, то добавляем проверку - выбрана категория или нет. Для этого используем функцию taxonomy_node_get_terms_by_vocabulary()

if(taxonomy_node_get_terms_by_vocabulary($nid, 2, $key = 'tid')){
    $category=array_shift($taxonomy);
}

Эта функция выводит термины из конкретного словаря (в моем случае vid 2) для данной записи ($nid).

Аватар пользователя bnku bnku 1 февраля 2008 в 15:56

Ну раз уж начал тему, то выдам все "тайны" :).
Формируем ссылки
<?php
//+++++++++ Taxonomy cut ++++++++++++
if(taxonomy_node_get_terms_by_vocabulary($nid, 2, $key = 'tid'))
$category=array_shift($taxonomy);
//+++++++++ Tag links +++++++++++++++
foreach($taxonomy as $aa=>$bb){
if($i)$tag_links.=", ";
$tag_links.=l($bb[title], $bb[href], array('class'=>'smalltags'));
$i++;
}
//+++++++++ Category link +++++++++++
if($category)
$category=l($category[title], $category[href], array('class'=>'blog_name'));
?>
$tag_links - ссылки на теги, разделенные запятой с CSS классом 'smalltags'
$category - ссылка на категорию с классом 'blog_name'