Question MAGENTO: Réindexer le prix par programmation


Je mets à jour les prix dans Magento par programmation. Comment puis-je réindexer les prix après cette mise à jour. Maintenant, j'ai utilisé la commande SSH:

php indexer.php --reindex catalog_product_price

14
2018-02-12 08:02


origine


Réponses:


Ce qui suit réindexera chaque index.

for ($i = 1; $i <= 9; $i++) {
    $process = Mage::getModel('index/process')->load($i);
    $process->reindexAll();
}

Vous pouvez également utiliser le modèle de collection Magento pour charger chaque index plutôt que de coder en dur l'id dans la boucle for.

/* @var $indexCollection Mage_Index_Model_Resource_Process_Collection */
$indexCollection = Mage::getModel('index/process')->getCollection();
foreach ($indexCollection as $index) {
    /* @var $index Mage_Index_Model_Process */
    $index->reindexAll();
}

Mais si vous voulez réindexer juste le prix, l'identifiant est 2

$process = Mage::getModel('index/process')->load(2);
$process->reindexAll();

Vous pouvez également appeler la fonction getProcessByCode comme suit:

$process = Mage::getModel('index/indexer')->getProcessByCode('catalog_product_price');
$process->reindexAll();

42
2018-02-12 08:27



En utilisant la commande SSH suivante, vous pouvez réindexer tous les index.

php shell/indexer.php reindexall

Mais si vous souhaitez réindexer uniquement catalog_product_price, vous pouvez utiliser le code ci-dessous.

php shell/indexer.php --reindex catalog_product_price

2
2018-03-06 10:25



php -f indexer.php help

Vous pouvez utiliser cette commande pour toutes les commandes liées à la réindexation via SSH.

php indexer.php -- reindex [process_code]

  e.g: php indexer.php --reindex catalog_product_price

Ceux-ci sont via SSH si vous aimez les chemins de code alors vous devez passer par le code ci-dessous:

 $indexer = Mage::getModel('index/indexer')->getProcessByCode('catalog_product_price')
 $indexer->reindexEverything();

ou faites ceci:

  for ($i = 0; $i <= 8; $i++) {  
       $process = Mage::getModel('index/process')->load($i);  
      $process->reindexAll();  
  } 

Pour plus d'informations


1
2018-03-23 18:51



Si vous avez des tables plates et que vous vous demandez pourquoi (comme je l'ai fait aujourd'hui) les prix mis à jour par programme ne s'affichent pas, peu importe le nombre de réindexations, vous devrez probablement réindexer le produit

php shell/indexer.php -reindex catalog_product_price
php shell/indexer.php -reindex catalog_product_flat

Si vous faites une normale:

php shell/indexer.php reindexall

Notez l'ordre de la réindexation:

Category Flat Data index was rebuilt successfully in 00:00:00
Product Flat Data index was rebuilt successfully in 00:00:00
Stock Status index was rebuilt successfully in 00:00:00
Catalog product price index was rebuilt successfully in 00:00:00
...

Le produit plat est indexé AVANT les prix, les mises à jour de prix n'ont donc pas été mises à jour dans les tables plates (catalog_product_flat_2). Regardez dans les tableaux plats pour vous assurer que vos prix mis à jour par programme sont définis.


1
2018-02-22 19:34



 <?php
   namespace Webizon\ApiConnector\Controller\Index;
   class Reindex extends \Magento\Framework\App\Action\Action {     
/**
 * @var \Magento\Indexer\Model\IndexerFactory
 */
protected $indexerFactory;
/**
 * @var \Magento\Framework\Indexer\ConfigInterface
 */
protected $config;
/**
 * @param Context $context
 * @param \Magento\Indexer\Model\IndexerFactory $resultLayoutFactory    
 * @SuppressWarnings(PHPMD.ExcessiveParameterList)
 */
public function __construct(
    \Magento\Framework\App\Action\Context $context,
    \Magento\Indexer\Model\IndexerFactory $indexerFactory,
    \Magento\Framework\Indexer\ConfigInterface $config
) {     
    $this->indexerFactory = $indexerFactory;
    $this->config = $config;
    parent::__construct($context);
}
/**
 * Regenerate full index
 *
 * @return void
 * @throws \Exception
 */
public function execute()
{           
    $params = $this->getRequest()->getParams();
    if(isset($params['run'])){
        if($params['run'] == 'all'){
            $this->reindexAll(); 
        }else{
            $this->reindexOne($params['run']);
        }   
    }           
}
/**
 * Regenerate single index
 *
 * @return void
 * @throws \Exception
 */
private function reindexOne($indexId){
    $indexer = $this->indexerFactory->create()->load($indexId);
    $indexer->reindexAll();
}
/**
 * Regenerate all index
 *
 * @return void
 * @throws \Exception
 */
private function reindexAll(){
    foreach (array_keys($this->config->getIndexers()) as $indexerId) {          
        $indexer = $this->indexerFactory->create()->load($indexerId);
        $indexer->reindexAll();            
    }
}
  }

http://www.webizon.in/apiconnector/index/reindex/all => exécuter tout réindexer

http://www.webizon.in/apiconnector/index/reindex/indexer_id => exécuter une réindexation séparée

(Ex: http://www.webizon.in/apiconnector/index/reindex/catalog_product_price) - Pour indexer les prix


0
2017-08-06 07:45