Я получаю коллекцию товаров определенной категории на странице нескольких сайтов Magento. Мой код для получения коллекции:
$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;
Моя проблема в том, что на одном из сайтов Magento, на котором мы работаем, получаемый ProductUrl()
файл похож на URL, http://www.my site.com/catalog/product/view/id/2309/s/shopcat/category/373/
а не на него http://www.site.com/shopcat/product-url-key.html
. Но на всех других сайтах он появляется так, как мы хотим.
Кто-нибудь знает, почему это может быть? Благодарность! Я getUrlPath()
тоже пытался использовать, но это ничего не возвращало. Я знаю, что могу обойти это, делая что-то вроде, <?php echo $this->getBaseUrl().$shopProduct->getUrlKey().".html"; ?>
но этот метод кажется немного неэффективным!
РЕДАКТИРОВАТЬ 21/03/14: У меня все еще есть эта проблема. Я понял, что getProductUrl()
получает требуемый URL в некоторых файлах шаблона сайта, но не в других. Например, я загружаю одну коллекцию на домашнюю страницу, и она дает мне нужные мне URL. Но getProductUrl()
не дает мне URL-адреса, которые я хочу с тем же кодом в представлении категории.
Ответы:
Попробуйте получить коллекцию так:
Другими словами, дайте модели знать, чтобы дать ключ URL вместо длинного уродливого URL с
$collection->addUrlRewrite();
.источник
Получение URL-адреса продуктов
Потенциально сбивает с толку из-за 3 методов, которые вы можете использовать, все из которых находятся в Mage_Catalog_Model_Product:
Лучший способ объяснить это просто показать результаты нескольких звонков. Для продукта с URL-ключом mondrian-large-coffee-table-set-multicolour в домене http: //made.local получаются следующие результаты:
источник