4

Magentoの製品IDに基づいてカテゴリパスのカテゴリ名を取得しようとしています。

私の製品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;
}

ありがとう.....

4

4 に答える 4

7

データベース クエリを減らすには、各カテゴリの負荷ではなく、カテゴリ コレクションを使用する必要があります。

編集:コードサンプルを書きました。$categoryId としてパスの名前を取得するカテゴリのカテゴリ ID があると仮定します。

$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().'/';
}
于 2013-01-02T10:11:00.900 に答える
3

この問題を処理するmagentoカタログのURL書き換えを検討する必要があると思います... magento管理者では、カタログ>> URL書き換え管理にある必要があります

編集:

他のページでそれを実行したいので、次のように簡単に実行できます。

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

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

$category_url = $store->getBaseUrl().$category->getUrlPath();
于 2013-01-02T10:53:46.130 に答える