Как добавить термин к ноде без node_load() node_save()?

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

Комментарии

Аватар пользователя glu2006 glu2006 15 августа 2011 в 13:25

Ничего сердитого, есть API и его желательно придерживаться. Зачем писать говнокод?
Вам видимо еще не попадались проекты глядя в код которых вешаться хочется клиента отправить к создателю если не куда подальше Smile

Корректно через node_save. Либо через hook_nodeapi

Аватар пользователя luciuz VII luciuz VII 15 августа 2011 в 13:34

т.е. node_load() node_save() -- лучший вариант?
проблема в том, что заставить работать такую в связке в одном цикле у меня не получается.. даже с node_load($nid, NULL, true) загружается как-будто бы закешированная нода -- и добаляется термин только в последнем случае.

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

Аватар пользователя glu2006 glu2006 15 августа 2011 в 14:01

luciuz VII wrote:
т.е. node_load() node_save() -- лучший вариант?
проблема в том, что заставить работать такую в связке в одном цикле у меня не получается.. даже с node_load($nid, NULL, true) загружается как-будто бы закешированная нода -- и добаляется термин только в последнем случае.

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

Я не телепат и угадать зачем и как Вы добавляете термин к ноде не знаю :).
а по правильному вы делаете:
1. node_load()
2. Правильно прописываете в структуру нода термин таксономии
3. Делаете node_save
4. Запихиваете весь этот циклический процесс тем более для массового обновления добавления товаров в batchapi.

Получаете нужный результат.

Аватар пользователя luciuz VII luciuz VII 17 августа 2011 в 15:18

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

<?php

//цикл (могут быть одинаковые $nid)
$node node_load($nidNULLTRUE);

$tax $node->taxonomy;
if (
$nid == 618dpm($tax); //давайте смотреть за 1 нодой //пока тут 1

if (!array_key_exists($parent$tax)) $tax[$parent] = taxonomy_get_term($parent);
if (!
array_key_exists($sections$tax)) $tax[$sections] = taxonomy_get_term($sections);

if (

$nid == 618dpm($tax); //результат 3 термина после добавления
$node->taxonomy $tax;
node_save($node);

$zz node_load($nidNULLTRUE);
if (
$nid == 618dpm($zz->taxonomy); //проверим, что мы сохранили //два новых термина не добавились = 1 термин

//конец цикла

?>

за этот цикл в ноду могло добавиться много терминов. (за первый проход добавляется 2, дальше по 1 термину)

//загрузим скрип ещё раз
вуаля, уже у этой ноды 3 термина (т.е. добавилось 2 термина)

в чем может быть проблема?

Ещё симптом: если допустим ограничить обработку: 1 нода за раз (1 функция процесса на ноду), то всё нормально на локалхосте (полоска ползет ну оооочеееениь медненно), однако на хостинге полоска пробегает всё расстояние за секунду и имеем глюки с сохранением
(хотя при отладке видно, что функция процесса запускалось ровно столько раз сколько нод)

Аватар пользователя luciuz VII luciuz VII 17 августа 2011 в 22:49

спс, попробую
но предположительно, в цикле для одинаковых nidов будет каждый раз грузиться одна нода без терминов ибо пробовал сначала легкий изврат node_load + INSERT, а потом перешел на садо мазо SELECT+INSERT = profit