2010-12-03 13 views
8

मैं वर्तमान में एक स्क्रिप्ट लिख रहा हूं जो मुझे Magento में एकाधिक उत्पादों को आयात करने देता है।Magento API: नए उत्पादों को जोड़ने के बाद इंडेक्स पुनर्निर्माण

$product = Mage::getModel('catalog/product'); 
$product->setSku($data['sku']); 
//etc etc 
$product->save(); 

उत्पाद पूरी तरह से बनाया जाता है, लेकिन जब तक मैं या तो इसे बैकएंड में बचाने के यह मेरे दृश्यपटल में दिखाई नहीं देंगे (कुछ भी बदले बिना!) या मैं बैकएंड में अनुक्रमित के पुनर्निर्माण।

मैंने प्रासंगिक डेटाबेस टेबल पर एक अंतर किया है ताकि यह देखने के लिए कि जब मैं उत्पाद को सहेजता हूं और उन फ़ील्ड को अपनी आयात स्क्रिप्ट में जोड़ता हूं, लेकिन इसका कोई प्रभाव नहीं पड़ा। जब आयातित बैकएंड के माध्यम से इंडेक्स को पुनर्निर्माण करते हैं तो आयातित उत्पाद ठीक होना चाहिए क्योंकि यह दिखाता है।

कैशिंग पूरी तरह से अक्षम है।

अब मेरा प्रश्न है: मैं अपने उत्पादों को आयात करने के बाद इंडेक्स का पुनर्निर्माण कैसे कर सकता हूं?

उत्तर

34

आप इंडेक्स मॉड्यूल में ऐसे मॉडल का उपयोग कर सकते हैं।

$processes = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
$processes->walk('reindexAll'); 

चूंकि आपको सभी इंडेक्स को पुनर्निर्माण करने की आवश्यकता है, इसलिए संग्रह में कोई फ़िल्टर नहीं है। लेकिन आप addFieldToFilter($field, $condition) विधि के माध्यम से पैरामीटर (कोड, पिछली बार पुन: अनुक्रमित, आदि) के सेट द्वारा इंडेक्स प्रक्रिया सूची फ़िल्टर कर सकते हैं।

छोटे सुझाव

,, मैनुअल मोड को अनुक्रमित करते समय आप उत्पादों का आयात, यह आप आयात प्रक्रिया में तेजी लाने में मदद मिलेगी स्थापित करने के लिए क्योंकि उनमें से कुछ उत्पाद का निरीक्षण घटना बचत में मज़ा नहीं आएगा तो यह लेता है कुछ समय। आप निम्नलिखित तरीके से यह कर सकते हैं:

$processes = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
$processes->walk('setMode', array(Mage_Index_Model_Process::MODE_MANUAL)); 
$processes->walk('save'); 
// Here goes your 
// Importing process 
// ................ 
$processes->walk('reindexAll'); 
$processes->walk('setMode', array(Mage_Index_Model_Process::MODE_REAL_TIME)); 
$processes->walk('save'); 
+0

यह शानदार है और बहुत अच्छा काम करता है! धन्यवाद! – Alex

+0

ग्रेट स्निपेट, धन्यवाद इवान। Magento के बारे में धीमी आयात ऐसी आम शिकायत है, यह जानना बहुत अच्छा है कि इसे कैसे सुधारें! –

+0

वास्तव में महान स्निपेट। मेरा आयात समय के 3/4 पर तेजी से बढ़ गया! धन्यवाद! –

4

कम से कम दो परिस्थितियों कि बचाने पर एक उत्पाद पुन: अनुक्रमणिका को इंडेक्सर रोकते हैं।

एक: सिस्टम, इंडेक्स प्रबंधन के अंतर्गत आपको इंडेक्स गुणों में "मैन्युअल अपडेट" सेटिंग। यदि आप किसी उत्पाद को सहेजने पर अनुक्रमित करना चाहते हैं तो आपको इसे "सहेजें पर अपडेट करें" पर सेट करना चाहिए।

दो: उदाहरण के लिए, डेटाफ्लो बैच आयात प्रक्रियाओं में सेटफॉसम बैच आयात प्रक्रियाओं में, प्रत्येक उत्पाद सहेजने के लिए इंडेक्सर को ट्रिगर करने से रोकने के लिए।

उम्मीद है कि इससे मदद मिलती है। सम्मान, एलेसेंड्रो

संबंधित मुद्दे