Вопрос по – Magento: Как получить полный URL продукта, используя категорию

0

Я пытаюсь найти решение, чтобы убедиться, что Magento всегда показывает полный URL-адрес каждого продукта, включая путь к категории. Я хочу, чтобы полный URL-адрес также присутствовал в результатах поиска. Для этого я поместил каждый продукт только в одну категорию.

Может ли это быть сделано с помощью Url Rewrite custom через magento? Является ли 301 перенаправление с использованием .htaccess, для /product.html в категорию / подкатегория / product.html хорошей идеей?

Спасибо угрюмый

Ваш Ответ

1   ответ
4

мы используем помощника, который попытается получить URL-адрес продукта с категорией. Вы также можете переписать метод продукта, но это будет неприятно всякий раз, когда другой модуль переписывает какой-либо продукт, поэтому мы используем вспомогательный подход.

Вот наш метод:

public static function getFullUrl (Mage_Catalog_Model_Product $product , 
        Mage_Catalog_Model_Category $category = null , 
        $mustBeIncludedInNavigation = true ){

    // Try to find url matching provided category
    if( $category != null){
        // Category is no match then we'll try to find some other category later
        if( !in_array($product->getId() , $category->getProductCollection()->getAllIds() ) 
                ||  !self::isCategoryAcceptable($category , $mustBeIncludedInNavigation )){
            $category = null;
        }
    }
    if ($category == null) {
        if( is_null($product->getCategoryIds() )){
            return $product->getProductUrl();
        }
        $catCount = 0;
        $productCategories = $product->getCategoryIds();
        // Go through all product's categories
        while( $catCount < count($productCategories) && $category == null ) {
            $tmpCategory = Mage::getModel('catalog/category')->load($productCategories[$catCount]);
            // See if category fits (active, url key, included in menu)
            if ( !self::isCategoryAcceptable($tmpCategory , $mustBeIncludedInNavigation ) ) {
                $catCount++;
            }else{
                $category = Mage::getModel('catalog/category')->load($productCategories[$catCount]);
            }
        }
    }
    $url = (!is_null( $product->getUrlPath($category))) ?  Mage::getBaseUrl() . $product->getUrlPath($category) : $product->getProductUrl();
    return $url;
}

/**
 * Checks if a category matches criteria: active && url_key not null && included in menu if it has to
 */
protected static function isCategoryAcceptable(Mage_Catalog_Model_Category $category = null, $mustBeIncludedInNavigation = true){
    if( !$category->getIsActive() || is_null( $category->getUrlKey() )
        || ( $mustBeIncludedInNavigation && !$category->getIncludeInMenu()) ){
        return false;
    }
    return true;
}

Если категория указана, она пытается получить URL относительно этого.

Если ни одна категория не указана или не удается найти URL с указанным, метод пытается получить URL-адрес продукта относительно первой категории, к которой относится продукт, и проверяет, является ли она приемлемой (активной, с помощью ключа URL-адреса). и соответствие критериям навигации).

Наконец, если он возвращается к оригиналу$product->getProductUrl() Магенто метод.

Вы должны будете использовать его в шаблонах (категории, товары в корзине, недавно просмотренные и т. Д.) С этим вызовом:

echo $this->helper('yourcompany/yourmodule')::getFullProductUrl($_product);

Edit:

Я принял во внимание замечания Захари и немного подправил их, добавив некоторые проверки и опции. Надеюсь, теперь это круто. Примеры :

echo $this->helper('yourcompany/yourmodule')::getFullProductUrl($_product, $aCategory);

попытается найти URL-адрес продукта в $ aCategory, а затем перейти к URL-адресам других категорий и, наконец, к URL-адресу базы продуктов

echo $this->helper('yourcompany/yourmodule')::getFullProductUrl($_product, someCategory, false);

Также будут рассмотрены категории, которые не включены в навигацию.

Error: User Rate Limit Exceeded Moody
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededmysite/base-categoryError: User Rate Limit Exceededmysite/base-category/item.html)

Похожие вопросы