ottenere categoria di prodotto percorso
Domanda
per scopi di progettazione ho bisogno di recuperare il percorso della categoria di prodotti di ogni singolo prodotto. Sono stato in grado di recuperare il percorso della categoria ed esplodere il primo livello utilizzando il seguente codice nel catalogo / prodotto / list.phtml:
<?php $currentCat = Mage::registry('current_category'); ?>
<?php $exp = explode("/", $currentCat->getPath());?>
d'altra parte ho cercato di recuperare categoria percorso di ogni esposizione dei prodotti nei risultati di ricerca al fine di visualizzare colori diversi per ogni prodotto in base alla loro categoria principale, ma senza buoni risultati.
qualsiasi aiuto sarà apprezzato. Con rispetto.
Soluzione
Il seguente codice vi darà un array a partire dalla categoria principale (id: 1)., Poi la categoria negozi di radice e quindi il percorso verso il basso per la categoria il prodotto è in
$category = Mage::getModel('catalog/product')->load([id])->getCategory();
$path = explode('/', $category->getPath());
Come sempre, questo è abbastanza un pezzo 'pesante' di codice solo per la progettazione.
Si potrebbe essere meglio di estendere la raccolta del prodotto nella classe Mage_Catalog_Block_Product_List
, metodo _getProductCollection
unendo la tabella catalog_category_entity
alla query di raccolta e aggiungendo il campo path
ai campi di selezione
Altri suggerimenti
Per ottenere il percorso dal catalogo Root
public function getCategoryPath($sku)
{
$product = Mage::getModel('catalog/product')->loadByAttribute('sku',$sku);
$pathArray = array();
$collection1 = $product->getCategoryCollection()
->setStoreId(Mage::app()->getStore()->getId())
->addAttributeToSelect('path')
->addAttributeToSelect('is_active');
foreach($collection1 as $cat1){
$pathIds = explode('/', $cat1->getPath());
$collection = Mage::getModel('catalog/category')->getCollection()
->setStoreId(Mage::app()->getStore()->getId())
->addAttributeToSelect('name')
->addAttributeToSelect('is_active')
->addFieldToFilter('entity_id', array('in' => $pathIds));
$pahtByName = '';
foreach($collection as $cat){
$pahtByName .= '/' . $cat->getName();
}
$pathArray[] = $pahtByName;
}
return $pathArray;
}
Ho usato seguente codice per trovare categorie di prodotti per la mollica di pane in fase di atterraggio alla pagina del prodotto al di fuori del sito. (Quando non riesce if ($category = $this->getCategory())
)
$cate
è l'ultimo prodotto della categoria è stato trovato in ed è possibile utilizzare le funzioni di categoria per ottenere il percorso.
Magento / app / code / core / Mage / Catalogo / Helper / Data.php
Aggiungi dove si trova prodotto per chi proviene da qualche altra parte di categoria
Ha bisogno FIX: TODO: verifica se il prodotto ha categoria prima di loop
if(empty($path)) {
if ($this->getProduct()) {
$collection = Mage::getModel('catalog/category')->getCollection()
->setStoreId(Mage::app()->getStore()->getId())
->addAttributeToSelect('name')
->addAttributeToSelect('is_active')
->addFieldToFilter('entity_id', array('in' => $this->getProduct()->getCategoryIds()));
$categories = array();
$cate = "";
foreach ($collection as $category) {
$cate = $category;
$pathInStore = $category->getPathInStore();
$pathIds = array_reverse(explode(',', $pathInStore));
}
$categories = $cate->getParentCategories();
if($categories) {
foreach($pathIds as $categoryId) {
$path['category'.$categoryId] = array(
'label' => $categories[$categoryId]->getName(),
'link' => $this->_isCategoryLink($categoryId) ? $categories[$categoryId]->getURL() : ''
);
}}
}
}
Grazie per le risposte che mi hanno aiutato a raggiungere questo obiettivo.