Certains produits manquent dans la table catalog_product_index_price!

11

N'importe qui peut m'aider à clarifier l'indexation des prix dans Magento? J'utilise la version 1.9.
Ma tâche : rendre les produits présentés sur la page d'accueil.
Ma solution : Au lieu de créer la catégorie appelée "Produit vedette". J'ai créé un attribut "is_featured", donc je filtre simplement le produit avec cet attribut true pour obtenir le résultat attendu.
Base sur le widget intégré Mage_Catalog_Block_Product_Widget_New , ma fonction pour obtenir la collection de produits telle que définie:

protected function _getProductCollection()
    {
        /** @var $collection Mage_Catalog_Model_Resource_Product_Collection */
        $collection = Mage::getResourceModel('catalog/product_collection');
        $collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());
        $collection = $this->_addProductAttributesAndPrices($collection)
            ->addStoreFilter()
            ->addAttributeToFilter('is_featured', array('eq' => true))
            ->setPageSize($this->getProductsCount())
            ->setCurPage(1);
        return $collection;
    }

Résultat: certains produits sont apparus, mais d'autres manquent. Lors du débogage SQL, je vois:

SELECT 
    `e`.*,
    `cat_index`.`position` AS `cat_index_position`,
    `price_index`.`price`,
    `price_index`.`tax_class_id`,
    `price_index`.`final_price`,
    IF(price_index.tier_price IS NOT NULL,
        LEAST(price_index.min_price,
                price_index.tier_price),
        price_index.min_price) AS `minimal_price`,
    `price_index`.`min_price`,
    `price_index`.`max_price`,
    `price_index`.`tier_price`,
    `at_is_featured`.`value` AS `is_featured`
FROM
    `catalog_product_entity` AS `e`
        INNER JOIN
    `catalog_category_product_index` AS `cat_index` ON cat_index.product_id = e.entity_id
        AND cat_index.store_id = '1'
        AND cat_index.visibility IN (2 , 4)
        AND cat_index.category_id = '2'
        INNER JOIN
    `catalog_product_index_price` AS `price_index` ON price_index.entity_id = e.entity_id
        AND price_index.website_id = '1'
        AND price_index.customer_group_id = 0
        INNER JOIN
    `catalog_product_entity_int` AS `at_is_featured` ON (`at_is_featured`.`entity_id` = `e`.`entity_id`)
        AND (`at_is_featured`.`attribute_id` = '210')
        AND (`at_is_featured`.`store_id` = 0)
WHERE
    (at_is_featured.value = '1')
LIMIT 6

Le problème est là, catalog_category_product_index , un produit disparaît est-il manquant dans ce tableau? Mais je ne sais pas, pourquoi l'indice de certains produits manque? J'ai essayé Re-Index tant de fois sans les résultats attendus! Est-ce que quelqu'un peut m'aider? Merci beaucoup!

De Nguyen
la source
J'ai affaire au même problème. Tu as de la chance?
versalle88

Réponses:

2

Si un produit manque dans l'indice des prix, c'est généralement parce qu'il n'est pas associé au site actuel.

Pour savoir comment les produits sont indexés, exécutez l'indexeur de prix et déboguez la requête Mage_Catalog_Model_Resource_Product_Indexer_Price_Default::_prepareFinalPriceData()vers la ligne 285 (après le prepare_catalog_product_index_selectdéclenchement de l' événement)

C'est pour des produits simples. Pour les autres types de produits, c'est la même chose dans leur implémentation d'indexeur correspondante (sous-classe de Mage_Catalog_Model_Resource_Product_Indexer_Abstract).

Fabian Schmengler
la source