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

ฉันลองทั้งคู่แล้ว ฉันทำดัชนีใหม่ในการจัดการดัชนีและฉันได้ล้างแคชแล้วแคชก็ถูกปิดการใช้งานอยู่ดี
ซาร่าห์

ป้อนผู้ดูแลระบบ -> catalof-> การจัดการ url rewrite มีการทำซ้ำ URL หรือไม่? ถ้าใช่พยายามกรองกริด: พา ธ เป้าหมาย -> [หมวดหมู่ / some_category_id]
mageUz

ขออภัยมากสำหรับความล่าช้าในการตอบกลับ มีการตั้งค่าการเขียน URL ซ้ำสำหรับผลิตภัณฑ์ที่เป็นปัญหาดังนั้นหากคุณไปที่site.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 ฉันเห็นว่ามันใช้ได้ทั้งสองทาง (เช่นแม้ไม่มี) ขอบคุณ!
Ronen Ness

2
สวัสดี @Ness มันขึ้นอยู่กับว่าคุณเปิด "ใช้หมวดหมู่พา ธ สำหรับ URL ผลิตภัณฑ์" ในระบบ / การกำหนดค่า / แคตตาล็อก / แคตตาล็อก / การเพิ่มประสิทธิภาพเครื่องมือค้นหา หากไม่เป็นเช่นนั้นคุณสามารถเพิกเฉยได้และใช้ addUrlRewrite () หากคุณเปิดเส้นทางหมวดหมู่การส่งรหัสหมวดหมู่ไปยังฟังก์ชันหมายความว่า URL ผลิตภัณฑ์ที่แสดงผลนั้นเป็น URL ผลิตภัณฑ์ที่จัดทำโดยเส้นทางหมวดหมู่
Sarah

@Marius ใช่มันใช้งานได้สำหรับฉัน
Dhara Bhatti

8

รับ URL ผลิตภัณฑ์

อาจเกิดความสับสนเนื่องจาก 3 วิธีที่คุณสามารถใช้ได้ซึ่งทั้งหมดอยู่ใน Mage_Catalog_Model_Product:

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

วิธีที่ดีที่สุดในการอธิบายคือเพียงแสดงผลลัพธ์ของการโทรหลายสาย รับผลิตภัณฑ์ที่มีคีย์ URL เป็น mondrian-large-coffee-table-set-multicolour บนโดเมนของ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'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.