Суть проблемы. Иногда термины при просмотре через taxonomy_get_parents_all перемешиваются.
Как и почему не суть, хотя тоже интересует ваше мнение.
Иерархия сохраняется, но вот при выдаче taxonomy_get_parents_all сортировка не верная.
Решается данная проблема через ресейв ноды руками.
Необходимо выловить функции валидации и сортировки иерархии таксономии при вызове node_save.
Может есть решение без node_save
Какие есть варианты? спасибо.
Комментарии
Сортировка верная на taxonomy_get_tree
Набросал небольшой тест. Два вывода по функции.
1-й До пересохранения ноды
2-й после сохранения
По сути меняется только порядок сортировки терминов в node.
наверно можно переформулировать вопрос так: Как при node_save сортировать термины в правильном порядке. Написать могу, мне бы из коробки решение, которое срабатывает при нажатии на кнопку.
<?php
$terms = taxonomy_get_tree(3, 3461);
print '-Баки и емкости'.'<br>';;
foreach ($terms as $term) {
// print_r($term->parents);
$parents = taxonomy_get_parents_all($term->tid);
print str_repeat('-', count($parents)).$term->name.'<br>';
}
print '<br>';
$terms = taxonomy_get_parents_all(3464);
foreach ($terms as $term) {
$parents = taxonomy_get_parents_all($term->tid);
print str_repeat('-', count($parents)).$term->name.'<br>';
}
print
'<br>';print '<b>Вывод терминов из Node</b><br>';
print '<br>';
$node = node_load(56040);
foreach ($node->field_categorys['und'] as $row) {
print taxonomy_term_load($row['tid'])->name.'<br>';
}
?>
До сохранения
-Баки и емкости
--Гидроаккумуляторы
---EVAN WATV
--Комплектующие
--Мембраны
--Расширительные баки
---EVAN HIT
--Емкости для воды
--Емкости для топлива
--Гидроаккумуляторы
-Баки и емкости
Вывод терминов из Node
Гидроаккумуляторы
Баки и емкости
После сохранения
-Баки и емкости
--Гидроаккумуляторы
---EVAN WATV
--Комплектующие
--Мембраны
--Расширительные баки
---EVAN HIT
--Емкости для воды
--Емкости для топлива
--Гидроаккумуляторы
-Баки и емкости
Вывод терминов из Node
Баки и емкости
Гидроаккумуляторы
В коробке сохранение ноды не меняет сортировку терминов, но если надо то Вы конечно можете поставить им другие weight и сохранить через taxonomy_term_save
У меня что-то меняет. пример выше.
возможно taxonomy_set_linege.
А вот реверсивная иерархия, (А у меня скорее всего так и есть) , скорее залетает через feeds
Поставил костыль:
<?php
$parents = taxonomy_get_parents(end($node->field_categorys['und']));
if(empty($parents)) {
$node->field_categorys['und'] = array_reverse($node->field_categorys['und']);
}
?>