2013-01-02 142 views
4

我想根據magento中的產品ID獲取類別路徑中的類別名稱。Magento:類別名稱,而不是類別路徑中的類別標識。

假設我的產品Id = 1,並且我定義了category5(id = 5),並且我得到類似2/3/5的路徑。而不是這種類型的路徑,我需要類別路徑,如category2/category3/category5。這意味着我需要路徑中的類別名稱而不是類別ID。我通過使用下面的代碼得到了這個,但它花費了很多時間。我需要縮短處理時間。

請給我如何減少處理時間的建議。

$category_model = Mage::getModel('catalog/category'); 
$product_model = Mage::getModel('catalog/product'); 
$all_cats = array(); 
$product_model->reset(); 
$_product = $product_model->load($entityId); 
$all_cats = $product_model->getCategoryIds($_product); 
$main_cnt = count($all_cats); 
$cat_str_main = ''; 
$j = 0; 
foreach($all_cats as $ac) 
{ 
    $root_category = $category_model->load($ac); 
    $cat_path = $root_category->getPath(); 
    $cat_arr = explode("/",$cat_path); 
    $cnt = count($cat_arr); 
    $cat_str = ''; 
    $main_str = ''; 
    $i=0; 
    foreach($cat_arr as $ids) 
    { 
       $root_category = $category_model->load($ids); //load root catalog 
     if($i == 2) 
     { 
      $cat_str = $category_model->getName(); 
     } 
     else if($i > 2) 
     { 
      $cat_str = $cat_str."/".$category_model->getName(); 
     } 
     $i = $i+1; 
    } 
    if($j < 1) 
    { 
     $cat_str_main = $cat_str; 
    } 
    else 
    { 
     $cat_str_main = $cat_str_main .",".$cat_str; 
    } 
    $j = $j+1; 
} 

感謝.....

+0

它是你的問題解決? – Rathinam

回答

7

你應該使用類集合,而不是負荷爲每個類別減少數據庫查詢。

編輯: 我寫過你的代碼示例。我假設你有類別的類別ID其中,你想要得到的路徑$的categoryId的名字:

$category = Mage::getModel('catalog/category')->load($categoryId); 
$collection = $category->getResourceCollection(); 
$pathIds = $category->getPathIds(); 
$collection->addAttributeToSelect('name'); 
$collection->addAttributeToFilter('entity_id', array('in' => $pathIds)); 
$result = ''; 
foreach ($collection as $cat) { 
    $result .= $cat->getName().'/'; 
} 
+0

請建議我如何使用類別收集和地點?因爲我是新來的magento @mpaepper – user123

+0

感謝您的建議,我會努力,但如果您有時間指導我更多 – user123

+0

@ user123我添加了一個代碼示例,以顯示如何使用類別集合,如果您有一個類別標識檢索路徑名稱 – mpaepper

3

我想你應該看看它處理這個問題對你的Magento目錄URL重寫.. 。在您的Magento管理應當在目錄>> URL重寫管理

編輯:

因爲你想要做一些其他的頁面,您可以簡單地做:

$store = Mage::app()->getStore(); 

$product_url = $store->getBaseUrl().$product->getUrlPath(); 

$category_url = $store->getBaseUrl().$category->getUrlPath(); 
+0

感謝您的答覆,但我需要我的一些PHP頁面上所需的輸出,所以請告訴我我怎麼做這個@nasaralla – user123

+0

檢查我編輯的答案 – Nasaralla

0

這是比@mpapper建議更快速的解決方案。我只加載一次該集合,然後不詢問數據庫。

echo "################################", PHP_EOL; 
$collection = Mage::getResourceModel('catalog/category_collection'); 
/* @var $collection Mage_Catalog_Model_Resource_Category_Collection */ 
$pattern = '1/2/'; 
$collection->addNameToResult() 
     ->addPathFilter($pattern . '.+'); 


$categories = array(); 

foreach ($collection as $id => $_cat) { 
    /* @var $_cat Mage_Catalog_Model_Category */ 
    $path = explode('/', $_cat->getPath()); 

    $namedPath = []; 

    foreach ($path as $_id) { 
     $subcat = $collection->getItemById($_id); 
     if ($subcat) { 
      $namedPath[] = $subcat->getName(); 
     } 
    } 
    $categories[implode('/', $namedPath)] = $id; 
} 
print_r($categories); 
echo $collection->count(), $collection->getSelect()->assemble(), PHP_EOL; 
相關問題