我以编程方式更新magento的价格。如何在此更新后重新编制索引价格。现在我使用SSH命令:
php indexer.php --reindex catalog_product_price
答案 0 :(得分:43)
以下内容将重新索引每个索引。
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();
答案 1 :(得分:3)
通过使用以下SSH命令,您可以重新索引所有索引。
php shell/indexer.php reindexall
但是如果你只想重新索引catalog_product_price,那么你可以使用下面的代码。
php shell/indexer.php --reindex catalog_product_price
答案 2 :(得分: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();
}
答案 3 :(得分: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)。查看平面表以确保以编程方式更新价格。
答案 4 :(得分: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 =>运行全部重新索引
http://www.webizon.in/apiconnector/index/reindex/indexer_id =>运行单独的重新索引编制
(例如:http://www.webizon.in/apiconnector/index/reindex/catalog_product_price)-运行价格索引