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

मेरी समस्या यह है कि मैग्नेटो साइटों में से एक पर हम चल रहे हैं 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"; ?>लेकिन यह तरीका थोड़ा अक्षम है!

EDIT 21/03/14: मुझे अभी भी यह समस्या आ रही है। मैंने महसूस किया है कि getProductUrl()साइट के कुछ टेम्प्लेट फ़ाइलों पर वांछित URL को पुनर्प्राप्त किया गया है, लेकिन अन्य नहीं। उदाहरण के लिए, मैं मुखपृष्ठ पर एक संग्रह लोड कर रहा हूं और यह मुझे मेरे इच्छित URL दे रहा है। लेकिन getProductUrl()मुझे वह URL नहीं दे रहा है जो मैं किसी श्रेणी दृश्य पर समान कोड के साथ चाहता हूं।


क्या आपने "इंडेक्स यूआरएल रीराइट्स" को फिर से लिखने की कोशिश की?
oleksii.svarychevskyi

हाँ कृपया अपने डेटा को फिर से जमा करें और कैश को हटा दें
कीउल शाह

मैंने दोनों को आजमाया है। मैं सूचकांक प्रबंधन में फिर से जुड़ गया हूं और मैंने कैश को फ्लश कर दिया है, कैश को वैसे भी अक्षम कर दिया गया था।
सारा

व्यवस्थापन दर्ज करें-> catalof-> url फिर से लिखना प्रबंधन। क्या url rerites हैं? यदि हाँ ग्रिड को फ़िल्टर करने का प्रयास करें: लक्ष्य पथ -> [श्रेणी / some_category_id]
mageUz

उत्तर में देरी के लिए बहुत खेद है। प्रश्न में उत्पाद के लिए एक URL फिर से लिखना है, इसलिए यदि आप site.com/shopcat/product-url-key.html या site.com/catalog/product/view/id/2309/s/shopcat/ पर जाएं श्रेणी / 373 आपको अभी भी एक ही उत्पाद पृष्ठ पर मिलती है, यह सिर्फ इतना है कि किसी कारण के लिए फॉर्च लूप गलत प्रकार के 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);

दूसरे शब्दों में, मॉडल को लंबे बदसूरत यूआरएल के साथ यूआरएल कुंजी देने के लिए पता है $collection->addUrlRewrite();


प्रश्न - आपको addUrlRewrite में $ श्रेणी-> getId () की आवश्यकता क्यों है? मैं देखता हूं कि यह किसी भी तरह से काम करता है (जैसे इसके बिना भी)। धन्यवाद!
रोनेन नेस

2
हाय @Ness, यह निर्भर करता है कि आपके पास सिस्टम / कॉन्फ़िगरेशन / कैटलॉग / कैटलॉग / सर्च इंजन ऑप्टिमाइज़ेशन में "उत्पाद URL के लिए श्रेणी का उपयोग करें" चालू हैं। यदि आप नहीं करते हैं, तो आप इसे अनदेखा कर सकते हैं और बस addUrlRewrite () का उपयोग कर सकते हैं। यदि आपके पास श्रेणी पथ चालू हैं, तो श्रेणी ID को फ़ंक्शन में पास करने का अर्थ है कि उत्पाद URL जो प्रदान किया गया है वह श्रेणी पथ द्वारा पूर्वनिर्मित उत्पाद URL है।
सारा

@ मेरी हाँ यह मेरे लिए काम करता है।
धरा भट्टी

8

एक उत्पाद URL प्राप्त करना

संभावित रूप से उन 3 विधियों के कारण भ्रमित हो सकते हैं जिनका आप उपयोग कर सकते हैं, जिनमें से सभी Mage_Catalog_Model_Prass में हैं:

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

समझाने का सबसे अच्छा तरीका बस कई कॉल के परिणाम दिखाना है। ऐसे उत्पाद को दिया जाता है, जिसकी URL कुंजी मॉन्ड्रियन-लार्ज-कॉफी-टेबल-सेट- मल्टीकोल पर 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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.