15

我以编程方式更新 magento 中的价格。在此更新后如何重新索引价格。现在我使用了 SSH 命令:

php indexer.php --reindex catalog_product_price
4

5 回答 5

47

以下将重新索引每个索引。

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

您还可以使用 Magento 集合模型来加载每个索引,而不是在 for 循环中对 id 进行硬编码。

/* @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();
}

但是,如果您只想重新索引 id 为 2 的价格

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

您还可以按如下方式调用函数 getProcessByCode:

$process = Mage::getModel('index/indexer')->getProcessByCode('catalog_product_price');
$process->reindexAll();
于 2013-02-12T08:27:22.417 回答
3

通过使用以下 SSH 命令,您可以重新索引所有索引。

php shell/indexer.php reindexall

但是,如果您只想重新索引 catalog_product_price,那么您可以使用下面的代码。

php shell/indexer.php --reindex catalog_product_price
于 2013-03-06T10:25:07.890 回答
1
php -f indexer.php help

您可以将此命令用于所有与通过 SSH 重新索引相关的命令。

php indexer.php -- reindex [process_code]

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

如果您喜欢代码方式,那么这些是通过 SSH 的,那么您必须通过以下代码:

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

或这样做:

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

欲了解更多信息

于 2015-03-23T18:51:54.470 回答
1

如果您有平面表并且想知道为什么(就像我今天所做的那样)无论您重新索引多少次,前端都不会显示以编程方式更新的价格,那么您很可能需要在重新索引价格之后重新索引产品平面:

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

如果你做一个正常的:

php shell/indexer.php reindexall

注意重新索引的顺序:

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
...

产品平面在价格之前被索引,因此价格更新没有在平面表中更新(即catalog_product_flat_2)。查看平面表以确保设置了以编程方式更新的价格。

于 2016-02-22T19:34:01.080 回答
0
 <?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 => 运行 reindex all

http://www.webizon.in/apiconnector/index/reindex/indexer_id => 运行单独的重新索引

(例如:http ://www.webizon.in/apiconnector/index/reindex/catalog_product_price ) - 运行价格索引

于 2018-08-06T07:45:45.310 回答