Ничего сердитого, есть API и его желательно придерживаться. Зачем писать говнокод?
Вам видимо еще не попадались проекты глядя в код которых вешаться хочется клиента отправить к создателю если не куда подальше
Корректно через node_save. Либо через hook_nodeapi
т.е. node_load() node_save() -- лучший вариант?
проблема в том, что заставить работать такую в связке в одном цикле у меня не получается.. даже с node_load($nid, NULL, true) загружается как-будто бы закешированная нода -- и добаляется термин только в последнем случае.
на счет hook_nodeapi не понял, каким он тут боком.. интересует массовое обновление/добавление терминов
т.е. node_load() node_save() -- лучший вариант?
проблема в том, что заставить работать такую в связке в одном цикле у меня не получается.. даже с node_load($nid, NULL, true) загружается как-будто бы закешированная нода -- и добаляется термин только в последнем случае.
на счет hook_nodeapi не понял, каким он тут боком.. интересует массовое обновление/добавление терминов
Я не телепат и угадать зачем и как Вы добавляете термин к ноде не знаю :).
а по правильному вы делаете:
1. node_load()
2. Правильно прописываете в структуру нода термин таксономии
3. Делаете node_save
4. Запихиваете весь этот циклический процесс тем более для массового обновления добавления товаров в batchapi.
не знаю в чем проблема, но не работает. вот кусок кода который запускается в функции процесса батч
<?php
//цикл (могут быть одинаковые $nid) $node = node_load($nid, NULL, TRUE);
$tax = $node->taxonomy; if ($nid == 618) dpm($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 == 618) dpm($tax); //результат 3 термина после добавления $node->taxonomy = $tax; node_save($node);
$zz = node_load($nid, NULL, TRUE); if ($nid == 618) dpm($zz->taxonomy); //проверим, что мы сохранили //два новых термина не добавились = 1 термин
//конец цикла
?>
за этот цикл в ноду могло добавиться много терминов. (за первый проход добавляется 2, дальше по 1 термину)
//загрузим скрип ещё раз
вуаля, уже у этой ноды 3 термина (т.е. добавилось 2 термина)
в чем может быть проблема?
Ещё симптом: если допустим ограничить обработку: 1 нода за раз (1 функция процесса на ноду), то всё нормально на локалхосте (полоска ползет ну оооочеееениь медненно), однако на хостинге полоска пробегает всё расстояние за секунду и имеем глюки с сохранением
(хотя при отладке видно, что функция процесса запускалось ровно столько раз сколько нод)
спс, попробую
но предположительно, в цикле для одинаковых nidов будет каждый раз грузиться одна нода без терминов ибо пробовал сначала легкий изврат node_load + INSERT, а потом перешел на садо мазо SELECT+INSERT = profit
Комментарии
Напрямую сделать запись в таблицу term_node но это
говняный путьне корректнозато сердито.
там только одна таблица? nid=vid? как по-вашему корректно -- вы не говорите.
Ничего сердитого, есть API и его желательно придерживаться. Зачем писать говнокод?
Вам видимо еще не попадались проекты глядя в код которых вешаться хочется клиента отправить к создателю если не куда подальше
Корректно через node_save. Либо через hook_nodeapi
т.е. node_load() node_save() -- лучший вариант?
проблема в том, что заставить работать такую в связке в одном цикле у меня не получается.. даже с node_load($nid, NULL, true) загружается как-будто бы закешированная нода -- и добаляется термин только в последнем случае.
на счет hook_nodeapi не понял, каким он тут боком.. интересует массовое обновление/добавление терминов
Я не телепат и угадать зачем и как Вы добавляете термин к ноде не знаю :).
а по правильному вы делаете:
1. node_load()
2. Правильно прописываете в структуру нода термин таксономии
3. Делаете node_save
4. Запихиваете весь этот циклический процесс тем более для массового обновления добавления товаров в batchapi.
Получаете нужный результат.
так и сделал. но получается пока обрабатывать одну строку за раз.
не знаю в чем проблема, но не работает. вот кусок кода который запускается в функции процесса батч
<?php //цикл (могут быть одинаковые $nid)
$node = node_load($nid, NULL, TRUE); $tax = $node->taxonomy;
if ($nid == 618) dpm($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 == 618) dpm($tax); //результат 3 термина после добавления$node->taxonomy = $tax;
node_save($node); $zz = node_load($nid, NULL, TRUE);
if ($nid == 618) dpm($zz->taxonomy); //проверим, что мы сохранили //два новых термина не добавились = 1 термин
//конец цикла
?>за этот цикл в ноду могло добавиться много терминов. (за первый проход добавляется 2, дальше по 1 термину)
//загрузим скрип ещё раз
вуаля, уже у этой ноды 3 термина (т.е. добавилось 2 термина)
в чем может быть проблема?
Ещё симптом: если допустим ограничить обработку: 1 нода за раз (1 функция процесса на ноду), то всё нормально на локалхосте (полоска ползет ну оооочеееениь медненно), однако на хостинге полоска пробегает всё расстояние за секунду и имеем глюки с сохранением
(хотя при отладке видно, что функция процесса запускалось ровно столько раз сколько нод)
SELECT и INSERT мне помогут
Drupal 6
$node->taxonomy[] = $tid;
node_save($node);
спс, попробую
но предположительно, в цикле для одинаковых nidов будет каждый раз грузиться одна нода без терминов ибо пробовал сначала легкий изврат node_load + INSERT, а потом перешел на садо мазо SELECT+INSERT = profit