$ _product-> getProductUrl (), надаючи URL-адресу без ключа URL


15

Я отримую колекцію продуктів певної категорії на сторінці в кількох різних сайтах 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-адреси"?
oleksii.svarychevskyi

так, Будь ласка, повторно налаштуйте свої дані та видаліть кеш
Keyul Shah

Я спробував і те, і інше. Я перевстановився в індекс-менеджмент, і я кеш-пам'ять очистив, кеш все одно був відключений.
Сара

Введіть адміністратор-> Каталоф-> управління перезаписом URL-адреси. Чи є rerits URL-адреси? Якщо так, спробуйте відфільтрувати сітку: Цільовий шлях -> [категорія / some_category_id]
mageUz

Дуже шкода за затримку у відповіді. Існує налаштування переписування URL-адреси для відповідного продукту, тому якщо ви перейдете на сайт.com / shopcat/ product-url- key.html або site.com/catalog/product/view/id/2309/s/shopcat/ категорію / 373 ви все ще потрапляєте на ту саму сторінку продукту, це просто те, що цикл foreach чомусь пробирається через неправильний тип URL-адреси.
Сара

Відповіді:


18

Спробуйте отримати колекцію так:

$collection = $category->getProductCollection();
$collection->addAttributeToSelect('*');
$collection->addAttributeToFilter('status', 1);
$collection->addFieldToFilter(array(array('attribute'=>'visibility', 'neq'=>"1" )));
//Where the magic happens
//this will add the url rewrite.
//addUrlRewrite can also be left without a parameter to generate url without category.
$collection->addUrlRewrite($category->getId()); 
$collection->getSelect()->limit(12);

Іншими словами, нехай модель знає, щоб дати ключ URL замість довгого некрасивого URL-адреси $collection->addUrlRewrite();.


питання - навіщо вам потрібна $ category-> getId () у addUrlRewrite? Я бачу, що це працює в будь-якому випадку (наприклад, навіть без нього). Спасибі!
Ронен Несс

2
Привіт @Ness, це залежить від того, чи у вас ввімкнено "Використовувати шляхи до категорій для URL-адрес продукту" у системі / Конфігурація / Каталог / Каталог / Оптимізації пошукової системи. Якщо ви цього не зробите, ви можете проігнорувати це і просто використовувати addUrlRewrite (). Якщо увімкнено шляхи до категорії, передача ідентифікатора категорії у функцію означає, що URL-адреса продукту, яка отримується, - це URL-адреса продукту, попередньо визначена шляхом до категорії.
Сара

@Marius Так, це працює для мене.
Дхара Бхатті

8

Отримання URL-адреси продуктів

Потенційно заплутаний через 3 методи, які ви можете використовувати, всі вони є в Mage_Catalog_Model_Product:

public function getUrlPath($category=null)
public function getUrlInStore($params = array())
public function getProductUrl($useSid = null)

Найкращий спосіб пояснити - це просто показати результати кількох дзвінків. Враховуючи продукт, URL-ключ якого є mondrian-big-coffee-table-set- multi-colorur у домені http: //made.local, результати:

$product->getUrlPath();
    'mondrian-large-coffee-table-set-multicolour'

$product->getUrlPath($category);
    'tables/mondrian-large-coffee-table-set-multicolour'

// you cannot stop this method adding ___store to the URL, even by setting _store_to_url to false
$product->getUrlInStore();
    'http://made.local/tables/mondrian-large-coffee-table-set-multicolour?___store=default'

// you cannot stop this method adding ___store to the URL, even by setting _store_to_url to false
// note - see the "using _ignore_category" section below for an arguable bug with using this param
$product->getUrlInStore(array('_ignore_category' => true));
    'http://made.local/mondrian-large-coffee-table-set-multicolour?___store=default'

$product->getProductUrl();
    'http://made.local/tables/mondrian-large-coffee-table-set-multicolour'

$product->getProductUrl(true);
    'http://made.local/tables/mondrian-large-coffee-table-set-multicolour'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.