Как заставить модуль synonyms учитывать только свои синонимы терминов при поиске?

Аватар пользователя oleg220 oleg220 19 октября в 9:59

Всем привет!

Прошу помощи в решении такой проблемы.

Сайт на drupal 6. Проблема с поиском.

Есть простенький, но полезный модуль https://www.drupal.org/project/synonyms
Он позволяет при индексировании встроенным поисковиком к нодам добавлять синонимы, которые были добавлены на странице термина таксономии.

Это удобно, когда ты знаешь, как какой товар ещё называют люди. Например, минимойку для автомобиля могут назвать "мойка", "автомойка" и т.п.

У меня есть такие термины таксономии родительский и дочерний термины:
-Минимойки для автомобиля (здесь добавлены синонимы "мойка", "автомойка" и т.п.)
--Аксессуары к минимойкам (здесь никаких синонимов нет)

Проблема в том, что если я ввожу в поиске слово "мойка", которое добавлено в синонимы родительского термина, то выводятся не только товары, у которых выбран термин "-Минимойки для автомобиля", но и все товары, у которых выбран термин "--Аксессуары к минимойкам".

Хотя, по идее, у аксессуаров не выбран термин "-Минимойки для автомобиля", но он является родителем для их термина и потом зачем-то заимствует все его синонимы.

Код модуля synonyms очень короткий. Можете подсказать, что заменить, чтобы для товаров добавлялись синонимы только из терминов, которые конкретно у них выбраны, и не добавлялись синонимы их родителей?

/**
 * 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 && !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 

'('implode(', '$text) .')'
;
    } else {
        return 
false;
    }
  }
}
?>

Лучший ответ

Аватар пользователя Andruxa Andruxa 20 октября в 10:20

Вот тут происходит обход родителей и добавление их синонимов в массив:

            $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;
                }
            }

Комментарии

Аватар пользователя Andruxa Andruxa 20 октября в 10:20

Вот тут происходит обход родителей и добавление их синонимов в массив:

            $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;
                }
            }
Аватар пользователя oleg220 oleg220 28 октября в 10:42

Просто удалил этот участок кода и всё заработало, как должно. Спасибо Andruxa!