$event =Mage::getSingleton('index/indexer')->logEvent(
$product,
$product->getResource()->getType(),Mage_Index_Model_Event::TYPE_SAVE,false);Mage::getSingleton('index/indexer')->getProcessByCode('catalog_url')// Adjust the indexer process code as needed->setMode(Mage_Index_Model_Process::MODE_REAL_TIME)->processEvent($event);
Dostępne kody indeksatora można wyświetlić za pomocą zapytania:
W Magento EE 1.13 jest inaczej, tam indeksator automatycznie pobiera zmienione jednostki przy każdym uruchomieniu crona (co minutę).
AKTUALIZACJA
Powyższa odpowiedź jest w 100% poprawna i tak myślę, że poniższe informacje mogą dodać coś więcej.
Jeśli chcesz zmienić tylko kilka wartości atrybutów w produkcie i automatycznie zaktualizować tabelę indeksu względnego, możesz użyć tej funkcji:
Mage::getSingleton('catalog/product_action')->updateAttributes();
jeśli chcesz samodzielnie zarządzać reindexem, skorzystaj z modelu zasobów: Mage::getResourceSingleton('catalog/product_action')->updateAttributes();
Na przykład używam następującej funkcji do szybkiej aktualizacji tylko niektórych atrybutów w produkcie.
Skopiuję komentarz user5973 tutaj, ponieważ zostanie usunięty. @Vinai, czy mówisz, że EE 1.13+ nie ma tych problemów z wydajnością podczas ponownego indeksowania danych związanych z produktem? Gdzie możemy potwierdzić, że indeksator EE automatycznie przejmuje zmienione jednostki i przetwarza tylko te?
Fabian Blechschmidt
W EE 1.13 indeksator używa wyzwalaczy MySQL, aby wychwycić wszelkie zmiany na poziomie bazy danych i zapisać zaktualizowane identyfikatory encji w tabeli dzienników zmian. Te dzienniki zmian są następnie przetwarzane przez cronjobs.
Vinai
2
Zakładam, że masz na myśli, że chcesz ponownie zindeksować produkt po edycji w interfejsie administratora. Najłatwiejszą metodą jest ustawienie trybu indeksatora na „aktualizuj przy zapisie”. Musisz to zrobić dla wszystkich indeksatorów powiązanych z produktami, których używasz, prawdopodobnie w tym: atrybuty produktu, ceny produktu, dane produktu płaskiego, kategoria produktów, stan magazynowy.
Upewnij się, że nie robisz tego na frontonie ani nie aktualizujesz skryptów, a aktualnie załadowanym sklepem jest „admin”. W przeciwnym razie $ product-> save () w ogóle nie będzie działać. Najpierw sprawdź, czy zapisanie produktu ma skutek.
Oprócz odpowiedzi @ feversocial upewnij się, że masz wszystko, co jest potrzebne do załadowania produktu przed wywołaniem $ product-> save (). W przeciwnym razie oszczędzanie może faktycznie usunąć rzeczy z produktu, którego doświadczyłem na własnej skórze.
Podobnie jak zapisanie produktu bez kodu SKU, który następnie przerywa wszystkie przepisywanie adresów URL i powoduje przekierowanie całej witryny na tę stronę produktu: S: P
Dobra uwaga, dlatego myślę, że lepiej jest zastosować catolog/product_actionpodejście, aby nie ryzykować powyższego problemu
Fra
1
I te informacje mogą być przydatne do lepszego zrozumienia całego scenariusza.
Jeśli chcesz zmienić tylko wartość atrybutu i automatycznie zaktualizować względną tabelę indeksu, możesz użyć tej funkcji:
Mage::getSingleton('catalog/product_action')->updateAttributes();
jeśli chcesz samodzielnie zarządzać reindexem, skorzystaj z modelu zasobów: Mage::getResourceSingleton('catalog/product_action')->updateAttributes();
Na przykład używam następującej funkcji do szybkiej aktualizacji tylko niektórych atrybutów w produkcie.
Zakładam, że masz na myśli, że chcesz ponownie zindeksować produkt po edycji w interfejsie administratora. Najłatwiejszą metodą jest ustawienie trybu indeksatora na „aktualizuj przy zapisie”. Musisz to zrobić dla wszystkich indeksatorów powiązanych z produktami, których używasz, prawdopodobnie w tym: atrybuty produktu, ceny produktu, dane produktu płaskiego, kategoria produktów, stan magazynowy.
Prawdopodobnie spowolni to oszczędzanie produktu.
Alternatywnie może ten link pomoże. Zobacz komentarze, a także opisują, jak zaktualizować akcje. http://www.magentocommerce.com/answers/discussion/239/reindex-one-product-at-a-time/p1
źródło
Upewnij się, że nie robisz tego na frontonie ani nie aktualizujesz skryptów, a aktualnie załadowanym sklepem jest „admin”. W przeciwnym razie $ product-> save () w ogóle nie będzie działać. Najpierw sprawdź, czy zapisanie produktu ma skutek.
źródło
Oprócz odpowiedzi @ feversocial upewnij się, że masz wszystko, co jest potrzebne do załadowania produktu przed wywołaniem $ product-> save (). W przeciwnym razie oszczędzanie może faktycznie usunąć rzeczy z produktu, którego doświadczyłem na własnej skórze.
Podobnie jak zapisanie produktu bez kodu SKU, który następnie przerywa wszystkie przepisywanie adresów URL i powoduje przekierowanie całej witryny na tę stronę produktu: S: P
źródło
catolog/product_action
podejście, aby nie ryzykować powyższego problemuI te informacje mogą być przydatne do lepszego zrozumienia całego scenariusza.
Jeśli chcesz zmienić tylko wartość atrybutu i automatycznie zaktualizować względną tabelę indeksu, możesz użyć tej funkcji:
Mage::getSingleton('catalog/product_action')->updateAttributes();
jeśli chcesz samodzielnie zarządzać reindexem, skorzystaj z modelu zasobów:
Mage::getResourceSingleton('catalog/product_action')->updateAttributes();
Na przykład używam następującej funkcji do szybkiej aktualizacji tylko niektórych atrybutów w produkcie.
źródło