node_save и поля - списки терминов и автодополнение

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

Аватар пользователя inspire inspire 23 апреля 2013 в 16:30

Доброго дня,

Программно создаю ноду с полями:

<?php
$node 
= new stdClass();
$node->type 'car';
$node->status 1;
$node->uid 1;
$node->changed $new_node['timestamp'];
$node->sticky 0;

$node->field_year['und'][0]['value'] = $car_node['year'];
$node->field_model['und'][0]['value'] = $car_node['model'];

node_save($node);
?>

Текстовые поля таким образом заполняются без проблем. А как быть с полями, которые представляют собой списки терминов таксономии или поля с автодополнением термина? Мне надо выбрать значение или добавить новое, если его не существует. Пробовал по аналогии с предыдущими полями (для поля с автодополнением):

<?php
$terms 
taxonomy_get_term_by_name($car_node['make']);
$maker array_shift($terms);
$node->field_make['und'][0]['value'] = $maker->name;
?>

Но сие не работает. Интересует как реализовать заполнение поля-термина в форме списка и в форме поля с автодополнением.
Заранее спасибо за ответы!

Комментарии

Аватар пользователя roman-yrv roman-yrv 23 апреля 2013 в 22:34

Термины для ноды хранятся уж точно не как список названий терминов через запятую.
А это будет массив идентификаторов терминов.

Для того, чтобы увидеть, как это хранится, можете сделать так.
Заполните ноду с терминами и сохраните её через админку, затем загрузите её программно

$node=node_load($nid);

где $nid - Ваш идентификатор ноды.

и посмотрите с помощью отладочной функции, что из себя представляет объект-нода. Например, так.

kpr($node);
Аватар пользователя roman-yrv roman-yrv 24 апреля 2013 в 8:30

В данном случае достаточно прочесть на любом даже русскоязычном, ресурсе о том, что такое таксономия и как она хранится в базе.

Аватар пользователя inspire inspire 24 апреля 2013 в 9:26

Ну, на самом деле, среди массы примеров я не нашел рабочего решения, хотя, может просто не сориентировался.
Интуитивно догадался, что вместо значения нужно присваивать id термина

<?php
$terms 
taxonomy_get_term_by_name($car_node['make']);
$maker array_shift($terms);
$node->field_make['und'][0]['tid'] = $maker->tid;
?>

Всем спасибо за советы Smile