Yang Anda inginkan adalah membuat skrip shell CLI, dan menggunakannya untuk menentukan apakah indeks memerlukan indeks ulang.
Lihat skrip di folder shell (log.php akan baik-baik saja) sebagai contoh tentang cara membuat skrip tersebut.
Script yang Anda buat kemudian akan memeriksa status indeks, dan hanya mengindeks ulang jika berada dalam status yang memerlukan pengindeksan.
Saya biasanya membuat skrip shell khusus saya di folder bernama / skrip, karena saya tidak suka mencemari shell folder inti dengan kode kustom saya.
Untuk efek ini, saya memiliki kelas abstrak yang mendasari semua skrip saya, dan berisi kode yang memungkinkan saya untuk dengan mudah mengindeks ulang pengindeks jika mereka membutuhkan pengindeksan.
di sini adalah kelas abstrak saya:
/**
* Abstracted functions for scripts
*
* @category ProxiBlue
* @package Scripts
* @author Lucas van Staden ([email protected])
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*
*/
require_once dirname(__FILE__) . '/../shell/abstract.php';
class Mage_Shell_Scripts_Abstract extends Mage_Shell_Abstract {
public $_doReindexFlag = false;
public function run() {
die('Please implement a run function inyour script');
}
/**
* Get the category model
* @return Object
*/
public function getCatalogModel() {
return Mage::getModel('catalog/category');
}
/**
* Reindex given indexers.
* Tests if indexer actually needs re-index, and is not in manual state before it does index.
*
* @param array $reIndex
*/
public function reindex(array $reIndex) {
foreach ($reIndex as $indexerId) {
$process = $this->_getIndexer()->getProcessByCode($indexerId);
if ($process->getStatus() == Mage_Index_Model_Process::STATUS_REQUIRE_REINDEX && $process->getMode() != Mage_Index_Model_Process::MODE_MANUAL) {
try {
echo "Reindexing: " . $process->getIndexerCode();
$process->reindexEverything();
} catch (Exception $e) {
mage::logException("{$indexer} Indexer had issues. {$e->getMessage()}");
}
}
}
}
/**
* Get Indexer instance
*
* @return Mage_Index_Model_Indexer
*/
private function _getIndexer() {
return Mage::getSingleton('index/indexer');
}
/**
* Returns a list of cache types.
* @return void
*/
public function getInvalidateCache() {
$invalidTypes = $this->_getInvalidatedTypes();
$result = array();
foreach($invalidTypes as $cache) {
if ($cache->status == 1) {
$result[] = $cache;
}
}
return $result;
}
/**
* Gets a list of invalidated cache types that should be refreshed.
* @return array Array of invalidated types.
*/
private function _getInvalidatedTypes() {
return Mage::getModel('core/cache')->getInvalidatedTypes();
//return $this->_getCacheTypes();
}
/**
* Gets Magento cache types.
* @return
*/
private function _getCacheTypes() {
//return Mage::helper('core')->getCacheTypes();
return Mage::getModel('core/cache')->getTypes();
}
}
Kemudian kelas yang didasarkan itu, yang memanggil indeks ulang, setelah beberapa pekerjaan dilakukan.
require_once dirname(__FILE__) . '/abstract.php';
class Mage_Shell_setCategoryStatus extends Mage_Shell_Scripts_Abstract {
public $_doReindexFlag = true;
public function run() {
/** code stripped out as not warrented for this answer **/
if ($this->_doReindexFlag) {
$this->reindex(array('catalog_product_flat',
'catalog_category_flat',
'catalog_category_product',
'cataloginventory_stock',
'catalogsearch_fulltext',
));
}
}
}
$shell = new Mage_Shell_setCategoryStatus();
$shell->run();
Yang saya tahu, Indeks adalah sesuatu yang global, jadi indeks ulang selalu mencakup semua Toko / Situs Web dari satu Magento.
Tetapi, Magento memiliki beberapa fungsi yang Anda sukai. Sementara "perbarui pada Simpan" melakukan pembaruan untuk mengindeks instan, "pembaruan manual" menempatkan "pembaruan" yang sama ke dalam antrian, yang dapat Anda picu nanti.
Untuk ini, Anda harus menulis skrip shell atau pekerjaan cron Anda sendiri
Saya tidak akan menjelaskan dasar-dasar model proses, cukup melihat fungsi indexEvents, dibutuhkan entri antrian dan memperbaruinya. Tapi hati-hati, Indeks URL bisa agak lambat. Tapi itu masalah lain.
sumber
Untuk mengindeks ulang proses kami membutuhkan id mereka.
Untuk magento default ada 9 proses untuk mengindeks ulang, bernomor 1 hingga 9.
Kadang-kadang ada proses dari modul khusus kami yang juga memerlukan pengindeksan ulang Kami perlu menambahkan id ke array id yang ada, Untuk mengetahui id proses, cukup arahkan pada setiap proses di
admin panel-> System-> Index Management
Anda akan mendapatkan url: admin / process / some_id / ...... id ini sesuai dengan proses
sumber
sumber
Saya menyukai jawaban Amit Bera yang terbaik - tetapi memodifikasi penempatan id dalam sebuah array dan yang paling penting diatur untuk operasi yang paling lancar. Jika Anda menjalankan langsung melalui angka pengindeksan ulang satu tabel indeks dapat menyebabkan yang lain menjadi tidak valid. IE Index product_flat table maka harga dapat menyebabkan flat table produk menjadi tidak valid dan perlu diindeks ulang.
sumber
M1 memeriksa status pengindeks
Jalankan perintah di bawah ini di direktori root untuk memeriksa status.
Jalankan perintah di bawah ini di direktori root untuk memeriksa pengindeks.
cronjob: Cara mengindeks ulang hanya apa yang dibutuhkan.
Sebagai contoh: Saya mengatur reindex setiap 6 jam
sumber