drupal как сконвертировать поле field в термин таксономии (taxonomy term)

При пакетном импорте в ноды была сохранена информация в текстовом виде, однако в дальнейшем было принято решение использовать её в связках taxonomy (к примеру, брэнды были сохранены как текст.. потребовалось сделать “Каталог брэндов”)

0. сохраняем резервную копию базы данных

1. создаём соответствующий словарь таксономии. Пусть id его будет 9 (в каждом конкретном случае значение ID может отличаться)..

2. в приведённом ниже фрагменте кода заменяем field_old на значение своего “текстового” (старого) поля, а field_new - на значение нового поля (в котором будет сохраняться id таксономии)

static $vid = 4; // vocabulary ID
static $vname = 'serie';
$node = node_load($nid);
$edit = array('vid' => $vid, 'name' => $node->field_old['und'][0]['value']);
$terms = taxonomy_get_term_by_name($edit['name'],$vname);
if (!empty($terms)) {
$term = current($terms);
$tid = $term->tid;
} else {
$terms = ((object)$edit);
$status = taxonomy_term_save($terms);
$tid = $terms->tid;
$term = $terms;
}
$node->field_new['und'][]['tid'] = $tid;
node_save($node);

В итоге в поле field_new будет храниться значение из словаря таксономии, а поле field_old можно удалять, изменив соответствующим образом тему и настройки представлений (возможно, если поле используется ещё где-нибудь - потребуется поправить и эти места.)

Есть отличия от шестой версии, т.к. часть функций API изменилась.
http://druit.ru/blogs/tnt/379

Метки:

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

Добавить комментарий