2012-11-08 14 views
5

Jestem w trakcie określania najlepszego sposobu programowego dodawania kategorii do produktów. Kategorie są uzyskiwane z danych stron trzecich poza instalacją magento, następnie analizuję te dane i chcę zaktualizować tabelę magento: "katalog_kategoria_produktów", wiążąc znalezione kategorie z ich odpowiednimi produktami.Magento, programowo dodając kategorię do produktów w skrypcie z SQL

Po dodaniu kategorii do powiązania produktów w "katalogu_kategorii_produkt" jako test, kategoria nie pojawiła się na stronie głównej witryny magento. Po kolejnych poszukiwaniach dodałem wpis do tabeli "catalog_category_product_index", produkt jest teraz wyświetlany we właściwej kategorii na stronie front-end.

Czy to wszystko, co konieczne? Obawiam się, że istnieją dodatkowe haczyki zdarzeń magento związane z produktami i kategoriami i mogą aktualizować dodatkowe tabele, których nie znam.

Czy mogę dodać wiersze do tych dwóch tabel za pomocą SQL bez incydentu, czy też muszę załadować aplikację magento i zrobić to za pomocą modeli produktów i kategorii EAV? Czy jestem na dobrej drodze?

Aktualizacja

ja nie faktycznie 'importowania' żadnych nowych danych. Produkty i kategorie już istnieją w systemie. Nie dodałem też żadnych niestandardowych obserwatorów i używam modeli produktów i kategorii wanilii.

Przetwarzam plik tekstowy, aby uzyskać prawidłowe wartości, a następnie za pomocą zwykłych instrukcji SQL UPDATE.

Po prostu chcę się upewnić, że przechodząc tą trasą, jedyne tabele, które muszę programowo zaktualizować, to "katalog_grupa_produktów" i "katalog_kategoria_produktów".

Odpowiedz

4

Osobiście nie radzę używać zwykłego SQL raczej użyć API jak:

define('MAGENTO', realpath(dirname(__FILE__))); 
require_once MAGENTO . '/app/Mage.php'; 
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 

// Load products 
$products = Mage::getModel('catalog/product') 
      ->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID) 
      ->getAll(); 

// Load categories 
$category = Mage::getModel('catalog/category'); 
      ->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID); 
$categories = $category->getAll(); 
foreach($products as $product) { 
    // Get relevant category 
    $product->setCategoryIds(array($category->getId())); 
    $product->save(); 
} 

Powyższy kod jest bardzo szorstki przykład, ale z kilku poprawek powinien wykonuj pracę. Jeśli używasz zwykłego SQL, ryzykujesz złamanie danych lub relacji, ale korzystanie z API Magento powinno obsługiwać je dla Ciebie.

+1

Dziękuję bardzo. Myślę, że zamierzam zmienić niektóre warianty tej trasy. – Jarrod

0

Jak połączyć swoje kategorie i produkty? Czy napisałeś coś konkretnego? Jeśli tak: pokaż jakiś kod.

W każdym razie, magento oferuje wiele sposobów na zrobienie tego, czego potrzebujesz w standardzie STANDARD. Spójrz w backoffice w menu: System/Import-Eksport

Istnieją 2 differents metody w Magento:

  • profile dataflow: współpracuje z modelami i jest dość powolne (ale poprzez wywołanie -> Zapisz() i -> load() we wszystkich modelach, gwarantuje, że każdy dodany obserwator zostanie nazwany !!)

  • nowe profile importu/eksportu: działa z czystymi zapytaniami SQL i jest dość szybki (ale jest na stałe zakodowane ... pożegnaj się z dowolnym ładunkiem/zapisz niestandardowymi obserwatorami, których dodałeś)

Tak jak powiedziałeś, Magento ma haki zdarzeń powiązane z produktem i kategoriami (i wszystkimi innymi modelami). W po zapisać oddzwonić produktu i kategorii, na przykład, Magento będzie reindex wszystkie przynależne INDEXES jak catalog_category_index próbowano dodać ręcznie ..

Więc:

  • nie rób tego sam , użyj profili Magento Import/Export, profili przepływu danych lub API.
  • w zależności od ilości posiadanych produktów/kategorii, wybierz odpowiedni import do użycia (patrz wyżej, różnice).Przepływ danych jest wolniejszy, ale wykorzystuje modele ..
+0

Dziękuję, zaktualizowałem początkowy wpis, aby spróbować odpowiedzieć na niektóre z Twoich odpowiedzi. Nie mogę opublikować kodu, ponieważ jest on zastrzeżony, ale jest to zwykły skrypt PHP manipulujący danymi tekstowymi i używający SQL do aktualizacji tabel magento. – Jarrod

Powiązane problemy