2011-01-04 22 views
7

Kategorisini veya kategorilerini içeren ürünleri listelemem gerekiyor, sadece ürünlere ait SKU'larım var. Hangi kategoriyi ait olduğunu bulmam gerekiyor, bu nedenle hangi bilginin hangi magento tablosunda kaldığını bilmek istiyorum.Magento ürün kategorisi

ie: sku 52429 için 3 kategoriye ayrılmıştır. Raporda 3 kategori ağaçları gösterir:

Bl> Saç Bakımı> Şekillendirici ürünler

Bl> Doğal & Organik> Saç Bakımı> Şekillendirme Ürünleri

Bl> Markalarımız> Pureology> Şekillendiriciler

Teşekkürler! Richa

cevap

8

Magento kategorileri catalog_category_entity (pk entity_id) 'da saklanır. Bir ürün ile kategori arasındaki ilişkiyi bulmak için catalog_category_product'u kullanın. Onun yapısı basittir:

+-------------+------------+----------+ 
| category_id | product_id | position | 
+-------------+------------+----------+ 
|   3 |   5 |  1 | 
|   3 |   6 |  1 | 
|   3 |   7 |  1 | 
+-------------+------------+----------+ 

Yani, bir ürün için tüm kategorileri almak için: içindedir

select cc.* from catalog_category_entity cc 
    join catalog_category_product cp on cc.entity_id = cp.category_id 
    where cp.product_id = {{your product id}}; 

DÜZENLEME Aradığınız bilgi (kategori ağaçları görüntülemek için) dikkat etmek kategori tablosu kendisi. Sütunların bir alıntı (bazı atlanmış):

+-----------+-----------+-------+----------+-------+----------------+ 
| entity_id | parent_id | path | position | level | children_count | 
+-----------+-----------+-------+----------+-------+----------------+ 
|   1 |   0 | 1  |  0 |  0 |    65 | 
|   2 |   1 | 1/2 |  1 |  1 |    64 | 
|   3 |   2 | 1/2/3 |  1 |  2 |    9 | 
|   4 |   2 | 1/2/4 |  2 |  2 |    18 | 
|   5 |   2 | 1/2/5 |  3 |  2 |    9 | 
+-----------+-----------+-------+----------+-------+----------------+ 

Sen yoldaki tüm kategorilerin kategori Kimliğini almak için o path sütun üzerinde bölümünü kullanacak ve rapor için isimlerini yükleyebilirsiniz. Çaba ve iyi bir yaklaşım için

+0

Teşekkürler!Ancak, bu yöntemi uygulayarak, herhangi bir ürün bl> skin> face gibi bir kategoriye sahipse, iki girişi gösterir 1) bl> skin ve 2) bl> skin> face, bununla nasıl başa çıkacağınız veya bu sorunu nasıl çözdüğünüz hakkında herhangi bir fikriniz var mı? – PHP

+0

Ürün, her iki kategoride ise, bu veri sonucu doğrudur. Bu durumda görmeyi umduğunuz şeyleri tarif edebilir misiniz? –

+0

Yalnızca bl> skin> face b'cz yüzü görüntülenmelidir. Ürünün ait olduğu son alt kategori (cilt). (Neden kategori de gösteriyor?) – PHP

7

İlk yük kadar

$product = Mage::getModel('catalog/product')->load($id); 

veya özniteliği tarafından

(SKU) Şimdi

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', '52429'); 

Eğer kategori kimlikleri yükleyebilirsiniz kimliğine göre ürün modeli

Ya

$categoryIds = $product->getCategoryIds(); 

Ardından tüm kategorisi Bu bence gereken tek şey her kategori

foreach($categories as $category) { 
    $category->getParentCategory(); 
} 

üst öğesini almak için Şimdi

foreach($categoryIds as $categoryId) { 
    $categories[] = Mage::getModel(’catalog/category’) 
    ->setStoreId(Mage::app()->getStore()->getId()) 
    ->load($categoryId); 
} 

nesneleri almak için.

+0

+1, Ama mysql tarafından magento veritabanına doğrudan erişmek zorunda çünkü herhangi bir kategori almak için ilgili tüm tablo bilmeniz gerekir. – PHP

+1

Bunu tavsiye etmem. Ama sana iyi şanslar diliyorum! Eğer başarılı olursanız çözümü gönderin, muhtemelen başkalarına ilginç gelecektir. Elbette muhtemelen daha hızlı ve/veya daha iyi çalışacak olan magento kaynak modellerine erişerek bunu yapmanın başka bir yolu var. Ama şimdi anlamaya vaktim yok. –

İlgili konular