Тема: Расширение текста для индексации в каталоге

Я пишу сторонний модуль, он добавляет свое поле в карточку товара, примерно как артикул, но отдельный (тк основной артикул занят или заполняется вручную). Нужно организовать поиск по этому полю на сайте.

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

http://dl4.joxi.net/drive/2017/08/29/0002/3050/162794/94/2f7db3a662.jpg

Есть ли возможность доработать этот вопрос? Именно возможность расширять функцию \Catalog\Model\Orm\getSearchText().

Повысить оценку Понизить оценку

2

Re: Расширение текста для индексации в каталоге

Добрый день!
Добавили хук product.getsearchtext, войдет в следующее обновление.
Чтобы не ждать можете добавить 4 строки сами в файл product.inc.php

    /**
    * Возвращает текст для индексации. Должен содержать все слова, по которым товар должен находиться
    */
    function getSearchText()
    {
        $config = \RS\Config\Loader::byModule($this);
        //Для поиска: Штрих-код, Краткое опиание, Характеристики, мета ключевые слова
        $properties = '';
        if (in_array('properties', $config['search_fields'])) {
            if ($this->use_property_in_search_index) {
                foreach ($this->fillProperty() as $groups) {
                    foreach ($groups['properties'] as $prop) {
                        $properties .= $prop['title'] . ' : ' . $prop->textView() . ' , ';
                    }
                }
            }
        }

        $text = array();
        
        if (in_array('barcode', $config['search_fields'])) $text[] = $this['barcode'];
        if (in_array('short_description', $config['search_fields'])) $text[] = $this['short_description'];
        if (in_array('properties', $config['search_fields'])) $text[] = $properties;
        if (in_array('meta_keywords', $config['search_fields'])) $text[] = $this['meta_keywords'];

        //Начало хука
        $event_result = \RS\Event\Manager::fire('product.getsearchtext', array(
            'text_parts' => $text
        ));
        list($text) = $event_result->extract();
        //Конец хука

        return trim(strip_tags(implode(' , ', $text)));
    }

Повысить оценку Понизить оценку

Re: Расширение текста для индексации в каталоге

Спасибо большое за оперативность!

Повысить оценку Понизить оценку

Re: Расширение текста для индексации в каталоге

Созрел еще вопрос, хук я прописал, текст получил, а как бы мне получить еще при этом модель товара или хотя бы ID, чтоб вытащить поле, которое у каждого товара уникально?

Повысить оценку Понизить оценку

5

Re: Расширение текста для индексации в каталоге

Вот так будет:

        $event_result = \RS\Event\Manager::fire('product.getsearchtext', array(
            'text_parts' => $text,
            'product' => $this
        ));
        list($text) = $event_result->extract();

Повысить оценку +1 Понизить оценку

Re: Расширение текста для индексации в каталоге

Подцепился, все прекрасно, благодарю!

Повысить оценку Понизить оценку