Как правильно программно подцеплять таксономию к ноде?

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

Аватар пользователя void void 23 сентября 2011 в 13:31

Где то тут же нашел пару-тройку постов на эту тему и там таксономию к ноде добавляли следующим образом:

<?php
$node
->taxonomy[] = 1//$tid, термин с таким id существует
$node node_submit($node);
node_save($node);
?>

и никто не "жаловался".
Что я делаю не так? потому что после создания хоть одной ноды выползает варнинг:
User warning: Duplicate entry '48-3360' for key 'PRIMARY' query: INSERT INTO term_node (nid, vid, tid) VALUES (3360, 3360, 48) in _db_query() (line 147 of /home/u4649/domains/ultra43.ru/includes/database.mysqli.inc).

Комментарии

Аватар пользователя Egres Egres 23 сентября 2011 в 14:05

Я точно не знаю, поэтому это только предположение - возможно данный код используется только для разового добавления? А при повторном использовании уже сообщает, что запись в базе не может быть продублирована. То есть повторно задана.

Аватар пользователя Orion76 Orion76 24 сентября 2011 в 20:57

прощу прощения, не вдавался в подробности... но мне кажется что

<?php
$node 
node_submit($node);
node_save($node);
?>

эти функции делают одно и тоже...
только первая имитирует сабмит формы с валидацией и т.д. и сохраняет ноду в базу.
а вторая просто сохраняет объект НОДА в базу.
если правильно в ручную сформировать $node , то достаточно будет только node_save
Примеры (рабочие) кода программного сохранения-добавления ноды в сети есть, где-то находил.

Аватар пользователя void void 25 сентября 2011 в 21:28
<?php
taxonomy_node_delete
($node);
?>

не решило проблем, ошибка всеравно появляется (хотя поидее должно все заработать).

Спецы, может подскажите в какую сторону рыть?

Аватар пользователя Orion76 Orion76 26 сентября 2011 в 2:52

Поищите в коде ,наверное, модуля taxonomy строку -"INSERT INTO {term_node}"
или что-то подобное... и выясните, в случае чего происходит INSERT - в базу а вслучае чего UPDATE... может станет понятнее, почему друпал пытается добавить запись более 1-го раза..

А каким образом вы запускаете свой код? Какой-то хук?