You need to sign in before continuing.
Search.php 2.56 KB
<?php

class Search extends SearchCore
{

    public static function indexation($full = false, $id_product = false)
    {
        $result = parent::indexation($full, $id_product);

        if ($result) {

            $shops = Shop::getShops(true, null, true);
            $languages = Language::getLanguages(true);
            $sql = 'SELECT m.`id_product`, m.`ean13` FROM ' . _DB_PREFIX_ . 'imaxmultiean_multiean m';

            // Si se proporciona $id_product, solo indexamos ese producto
            if ($id_product !== false) {
                $sql .= ' WHERE m.`id_product` = ' . (int)$id_product;
            } elseif (!$full) {
                // Si no es una indexación completa y no se proporciona $id_product, indexamos solo los que faltan
                $sql .= ' LEFT JOIN ' . _DB_PREFIX_ . 'search_word sw ON m.ean13 = sw.word WHERE sw.id_word IS NULL';
            }

            $productos = Db::getInstance()->executeS($sql);

            foreach ($productos as $producto) {

                $word = pSQL($producto['ean13']);

                foreach ($languages as $lang) {
                    foreach ($shops as $shopId) {

                        // Insertar o actualizar la palabra en search_word
                        $sqlInsertWord = "
                                            INSERT IGNORE INTO " . _DB_PREFIX_ . "search_word (id_word, id_lang, id_shop, word)
                                            VALUES (NULL, '" . (int)$lang['id_lang'] . "', '" . (int)$shopId . "', '$word')
                                            ";
                        Db::getInstance()->execute($sqlInsertWord);

                        $id_word = Db::getInstance()->Insert_ID();

                        // Si la palabra fue insertada con éxito, proceder con la inserción o actualización en search_index
                        if ($id_word) {
                            $weight = Configuration::get('PS_SEARCH_WEIGHT_REF');
                            $idProduct = (int)$producto['id_product'];

                            $sqlInsertIndex = "
                                                INSERT INTO " . _DB_PREFIX_ . "search_index (id_product, id_word, weight)
                                                VALUES ('$idProduct', '$id_word', '$weight')
                                                ON DUPLICATE KEY UPDATE weight = '$weight'
                                                ";
                            Db::getInstance()->execute($sqlInsertIndex);
                        }
                    }
                }
            }
        }

        return $result;
    }
}