Otrzymuję kolekcję produktów określonej kategorii na stronie w kilku różnych witrynach Magento. Mój kod do pobrania kolekcji to:
$category = new Mage_Catalog_Model_Category();
$category->load($id);
$collection = $category->getProductCollection();
$collection->addAttributeToSelect('*');
$collection->addAttributeToFilter('status', 1);
$collection->addFieldToFilter(array(array('attribute'=>'visibility', 'neq'=>"1" )));
$collection->getSelect()->limit(12);
foreach ($collection as $shopProduct) :
echo $shopProduct->getProductUrl();
endforeach;
Mój problem polega na tym, że na jednej z witryn Magento, z której korzystamy ProductUrl()
, pobierany jest adres URL podobny do podobnego, http://www.my site.com/catalog/product/view/id/2309/s/shopcat/category/373/
a nie podobny http://www.site.com/shopcat/product-url-key.html
. Ale na wszystkich innych stronach pojawia się tak, jak tego chcemy.
Czy ktoś wie, dlaczego tak może być? Dzięki! Próbowałem getUrlPath()
też użyć, ale to nic nie zwróciło. Wiem, że mogę to obejść, robiąc coś takiego, <?php echo $this->getBaseUrl().$shopProduct->getUrlKey().".html"; ?>
ale ta metoda wydaje się nieco nieefektywna!
EDYCJA 21.03.14: Nadal mam ten problem. Uświadomiłem sobie, że getProductUrl()
pobiera pożądany adres URL w niektórych plikach szablonów witryny, ale nie w innych. Na przykład ładuję jedną kolekcję na stronie głównej i zawiera ona adresy URL, które chcę. Ale getProductUrl()
nie daje mi adresów URL, które chcę z tym samym kodem w widoku kategorii.
Odpowiedzi:
Postaraj się uzyskać taką kolekcję:
Innymi słowy, poinformuj model, aby podał klucz adresu URL zamiast długiego, brzydkiego adresu URL
$collection->addUrlRewrite();
.źródło
Uzyskiwanie adresu URL produktów
Potencjalnie mylące ze względu na 3 metody, których można użyć, z których wszystkie znajdują się w Mage_Catalog_Model_Product:
Najlepszym sposobem na wyjaśnienie jest po prostu pokazanie wyników kilku połączeń. Biorąc pod uwagę produkt, którego kluczem URL jest mondrian-large-coffee-table-set-multicolour w domenie http: //made.local, wyniki są następujące:
źródło