Согласованные URL-адреса продуктов Magento - PullRequest
0 голосов
/ 17 декабря 2010

Magento, похоже, имеет несколько различных форматов, которые работают для URL-адресов продуктов, в том числе:

/catalog/product/view/id/123/s/my-product-slug/
/my-product-slug/
/top-category/sub-category/my-product-slug/
etc...

Я хочу просто использовать один из них, который всегда является третьим, объединяя все слагаемые родительской категории вместе до слагаемого продукта. Есть ли способ настроить Magento на использование только одного из этих форматов?

Использование таких методов, как getProductUrl(), похоже, дает разные результаты в зависимости от того, на какой странице / контексте вы находитесь, может кто-нибудь сказать мне, почему это так?

И вообще кто-нибудь знает какую-либо документацию или сообщения в блоге и т. Д., Которые могут помочь мне немного лучше понять маршрутизацию в Magento?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 07 января 2011

clockworkgeek был довольно близко и привел меня к моему ответу ...

Я попытался использовать $product->setCategoryId() и обнаружил, что $product->getCategoryId() ничего не возвращает и что метод Mage_Catalog_Model_Product_Url::getUrl зависит отgetCategoryId метод в модели продукта для определения URL продукта.Оказывается, getCategoryId явно определено в модели продукта (это не магический метод, как я предполагал), который возвращает значение Mage::registry('current_category').В общем, я зарегистрировал и незарегистрированную current_category для удовлетворения своих потребностей.

Тем не менее, мой вопрос остается частично без ответа.Я понял, как взломать и получить то, что я хотел, но технически грязные URL-адреса типа /catalog/product/view/id/123/s/my-product-slug/ все еще работают, и я бы предпочел, чтобы все варианты URL-адресов направлялись к категориям.Было бы замечательно иметь возможность определить единый канонический стиль URL в Magento.Если у кого-то есть какие-либо дополнительные сведения об этом, пожалуйста, дайте мне знать!

2 голосов
/ 19 декабря 2010

Для принудительной установки этого URL я уверен, что ваш продукт должен содержать идентификатор категории.

$product->setCategoryId(7)->getProductUrl();

Конечно, 7 это просто пример. Продукт может относиться ко многим категориям, поэтому вам придется решить, как выбрать одну из них, возможно, выбрав первую.

list($categoryId,) = $product->getCategoryIds();
$product->setCategoryId($categoryId)->getProductUrl();
0 голосов
/ 17 декабря 2010

Я не уверен, что это то, что вам нужно, и не могу проверить прямо сейчас, но попробуйте это:

$product_url = "http://www.domain.com/".$product->getUrlPath();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...