$ _product-> getProductUrl () URL anahtarı olmadan URL yolu veriyor


15

Birkaç farklı Magento sitesindeki bir sayfada belirli bir kategorinin ürün koleksiyonunu alıyorum. Koleksiyon almak için kodum:

        $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;

Benim sorunum Magento sitelerinden birinde çalıştırılmakta olan ProductUrl()varlık bir URL gibi http://www.my site.com/catalog/product/view/id/2309/s/shopcat/category/373/ve daha fazla değil gibi olmasıdır http://www.site.com/shopcat/product-url-key.html. Ancak diğer tüm sitelerde istediğimiz gibi görünüyor.

Bunun neden olabileceğini bilen var mı? Teşekkürler! Ben getUrlPath()de kullanmayı denedim ama bu bir şey dönmedi. Biliyorum böyle bir şey yaparak bunu başarabilirim <?php echo $this->getBaseUrl().$shopProduct->getUrlKey().".html"; ?>ama bu yöntem biraz verimsiz görünüyor!

EDIT 21/03/14: Bu sorunu hala yaşıyorum. getProductUrl()Sitenin bazı şablon dosyalarında istenen URL'yi aldım , diğerleri değil. Örneğin, ana sayfaya bir koleksiyon yüklüyorum ve bana istediğim URL'leri veriyor. Ancak getProductUrl()bana kategori görünümünde aynı kodla istediğim URL'leri vermiyor.


"Dizin URL'si yeniden yazılıyor" ifadesini yeniden dizine eklemeyi denediniz mi?
oleksii.svarychevskyi

evet Lütfen verilerinizi yeniden birleştirin ve önbelleği kaldırın
Keyul Shah

İkisini de denedim. Dizin Yönetimi'nde yeniden dizin oluşturdum ve önbelleği temizledim, önbellek yine de devre dışı bırakıldı.
Sarah

Admin-> catalof-> url yeniden yazma yönetimini girin. URL reritleri var mı? Evetse, ızgarayı filtrelemeye çalışın: Hedef yol -> [category / some_category_id]
mageUz

Yanıttaki gecikme için çok üzgünüm. Söz konusu ürün için bir URL yeniden yazma ayarı var, bu nedenle site.com/shopcat/product-url-key.html veya site.com/catalog/product/view/id/2309/s/shopcat/ adresine giderseniz kategori / 373 yine de aynı ürün sayfasına ulaşırsanız, foreach döngüsü nedense yanlış URL türünden geçiyor.
Sarah

Yanıtlar:


18

Koleksiyonu şu şekilde almaya çalışın:

$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);

Başka bir deyişle, modelin uzun çirkin URL yerine URL anahtarını vermesini bildirin $collection->addUrlRewrite();.


soru - addUrlRewrite için neden $ category-> getId () gereklidir? Her iki şekilde de çalıştığını görüyorum (örneğin, onsuz bile). Teşekkürler!
Ronen Ness

2
Merhaba @Ness, Sistem / Yapılandırma / Katalog / Katalog / Arama Motoru Optimizasyonlarında "Ürün URL'leri için Kategori yollarını kullan" seçeneğine sahip olduğunuza göre değişir. Bunu yapmazsanız, bunu yok sayabilir ve yalnızca addUrlRewrite () yöntemini kullanabilirsiniz. Kategori yollarını etkinleştirdiyseniz, kategori kimliğini işleve geçirmek, oluşturulan ürün URL'sinin, kategori yolunun başındaki ürün URL'si olduğu anlamına gelir.
Sarah

@Marius Evet benim için çalışıyor.
Dhara Bhatti

8

Ürün URL'si Alma

Tümü Mage_Catalog_Model_Product içinde bulunan 3 yöntemden dolayı potansiyel olarak kafa karıştırıcı:

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

Açıklamanın en iyi yolu, birkaç aramanın sonuçlarını göstermektir. URL anahtarı http: //made.local alan adında mondrian-large-coffee-table-set- multicour olan bir ürün göz önüne alındığında sonuçlar şunlardır:

$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'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.