Всем привет!
Прошу помощи в решении такой проблемы.
Сайт на drupal 6. Проблема с поиском.
Есть простенький, но полезный модуль https://www.drupal.org/project/synonyms
Он позволяет при индексировании встроенным поисковиком к нодам добавлять синонимы, которые были добавлены на странице термина таксономии.
Это удобно, когда ты знаешь, как какой товар ещё называют люди. Например, минимойку для автомобиля могут назвать "мойка", "автомойка" и т.п.
У меня есть такие термины таксономии родительский и дочерний термины:
-Минимойки для автомобиля (здесь добавлены синонимы "мойка", "автомойка" и т.п.)
--Аксессуары к минимойкам (здесь никаких синонимов нет)
Проблема в том, что если я ввожу в поиске слово "мойка", которое добавлено в синонимы родительского термина, то выводятся не только товары, у которых выбран термин "-Минимойки для автомобиля", но и все товары, у которых выбран термин "--Аксессуары к минимойкам".
Хотя, по идее, у аксессуаров не выбран термин "-Минимойки для автомобиля", но он является родителем для их термина и потом зачем-то заимствует все его синонимы.
Код модуля synonyms очень короткий. Можете подсказать, что заменить, чтобы для товаров добавлялись синонимы только из терминов, которые конкретно у них выбраны, и не добавлялись синонимы их родителей?
<?php
/**
* Implementattion of hook_nodeapi
* This hook loads when Drupal starts updating it's search index for a node.
* We then get all terms from the categories associated to it, and find their synonyms.
* The synonyms are then added to the results
*/
function synonyms_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
if ($op == 'update index') {
// Check if it's a node and if there are any taxonomy terms.
if ($node->nid > 0 && !empty($node->taxonomy)) {
$text = array();
$getTerms = $node->taxonomy;
foreach(
$getTerms as $nodeTerm) {
$childSynonyms = taxonomy_get_synonyms($nodeTerm->tid);
foreach($childSynonyms as $childSynonym){
$text[] = $childSynonym;
}
$parents = taxonomy_get_parents($nodeTerm->tid);
foreach($parents as $parent) {
$text[] = $parent->name;
$synonyms = taxonomy_get_synonyms($parent->tid);
foreach($synonyms as $synonym){
$text[] = $synonym;
}
}
}
return
'<strong>('. implode(', ', $text) .')</strong>';
} else {
return false;
}
}
}?>
Комментарии
Вот тут происходит обход родителей и добавление их синонимов в массив:
foreach($parents as $parent) {
$text[] = $parent->name;
$synonyms = taxonomy_get_synonyms($parent->tid);
foreach($synonyms as $synonym){
$text[] = $synonym;
}
}
А не подскажите, что изменить, чтобы стало так, как мне надо?
Просто удалил этот участок кода и всё заработало, как должно. Спасибо Andruxa!