2012-12-30 12 views
16

मैं एक स्क्रिप्ट विकसित कर रहा हूं (Magento के बाहर, मॉड्यूल नहीं) जिसका उद्देश्य सभी उपलब्ध उत्पादों, उनकी कीमतों और कुछ अन्य विशेषताओं की एक टेक्स्ट सूची आउटपुट करना है । हालांकि, सूची मूल्य नियम उत्पाद की कीमतों पर लागू नहीं लगते हैं। यदि मैं निम्न में से किसी एक का उपयोग करता हूं:Magento: कैटलॉग नियमों के साथ किसी उत्पाद की कीमत कैसे प्राप्त करें

$_product->getPrice() 
$_product->getFinalPrice() 

मुझे सामान्य मूल्य मिलता है (नियम लागू किए बिना)।

अगर मैं का उपयोग करें:

$_product->getSpecialPrice() 

मैं अशक्त मिलता है जब तक कि उत्पाद वास्तव में एक विशेष मूल्य स्वयं उत्पाद में डाला है (अर्थात, अगर विशेष मूल्य सूची के नियमों के साथ संबंधित नहीं है)।

मैं भी

Mage::getModel('catalogrule/rule')->calcProductPriceRule($product,$product->getPrice()) 

के रूप में फेबियन Blechschmidt द्वारा दिए गए जवाब में सुझाव दिया कोशिश की, लेकिन दिलचस्प बात यह सामान्य मूल्य केवल तभी उत्पाद किसी भी सूची नियम से प्रभावित होता है, अशक्त अन्यथा लौटने देता है।

कुछ समय पहले StackOverflow और Magento Forums में एक समान प्रश्न था, लेकिन प्रदान किया गया उत्तर (जो कोड को सम्मिलित करना है) मेरे लिए काम नहीं करता है (कीमतें वही रहती हैं)।

Mage::app()->loadAreaPart(Mage_Core_Model_App_Area::AREA_FRONTEND,Mage_Core_Model_App_Area::PART_EVENTS); 

क्या किसी को यह समझने का विचार है कि इसे कैसे प्राप्त किया जाए?

मैं Magento 1.6.2.0 का उपयोग कर रहा हूं। अग्रिम धन्यवाद।

+2

शायद आपके डेटा या अनुक्रमण को शामिल करने पर कुछ और चल रहा है। क्या डिस्काउंट मूल्य प्रदर्शित होता है जैसा कि आप सभी कस्टम मॉड्यूल के साथ डिफ़ॉल्ट थीम में अपेक्षा करते हैं? – benmarks

+0

हां, रियायती कीमतें सामने की ओर ठीक दिखती हैं। समस्या यह थी कि यह एक Magento मॉड्यूल नहीं था, लेकिन एक "बाहरी" स्क्रिप्ट। ऐसा लगता है कि Magento अतिरिक्त सामान लोड करता है जो सब कुछ ठीक से काम करने के लिए आवश्यक है। दूसरे शब्दों में, Magento में सब कुछ वास्तव में एक मॉड्यूल होना चाहिए ... – faken

+1

* "Magento में सब कुछ वास्तव में एक मॉड्यूल होना चाहिए" * - वास्तव में नहीं। हालांकि कई मॉड्यूल हैं जो ऐप निष्पादित होने पर कई तरीकों से बातचीत करते हैं। मैं जांचूंगा कि 'Mage_CatalogRule_Model_Observer' तत्काल है। शायद आपको रिमोट स्क्रिप्ट के प्रासंगिक हिस्सों को पेस्ट करना चाहिए ('mage :: ऐप()' तात्कालिकता, 'loadAreaPart()' कॉल, उत्पाद भार, आदि) – benmarks

उत्तर

10

मैं इस समस्या की खोज की। रियायती कीमतें स्टोर फ्रंटेंड में ठीक दिखती हैं। समस्या यह थी कि मैं एक स्क्रिप्ट Magento (इस प्रकार नहीं एक Magento मॉड्यूल) को "बाहरी" विकसित कर रहा था, की तरह कुछ:

<?php 

set_time_limit(0); 
ignore_user_abort(); 
error_reporting(E_ALL^E_NOTICE); 
header("Content-Type: text/plain; charset=utf-8"); 

require_once "app/Mage.php"; 

// Get default store code 
$default_store = Mage::app()->getStore(); 
... 

सब कुछ ठीक से काम करने ऐसा लगता है कि एक उचित Magento बूटस्ट्रैप का पालन करना होगा, और विकसित करने के लिए एक मॉड्यूल के रूप में सब कुछ। मेरी लिपि इतनी सरल थी कि मैंने सोचा कि एक पूर्ण मॉड्यूल को कोड करना आवश्यक नहीं होगा। दूसरे शब्दों में, Magento में सब कुछ वास्तव में एक मॉड्यूल होना चाहिए।

समापन, मॉड्यूल दृष्टिकोण का उपयोग कर, सभी तरीकों अपेक्षित तरीके से:

$_product->getPrice() 
$_product->getFinalPrice() 
$_product->getSpecialPrice() 

आप सभी आपके इनपुट के लिए धन्यवाद।

18

धन्यवाद आप के लिए, मैं एक नया साइट पाया: http://www.catgento.com/magento-useful-functions-cheatsheet/

और वे उल्लेख किया:

Mage::getModel('catalogrule/rule')->calcProductPriceRule($product,$product->getPrice()) 

HTH

+0

हाय, उत्तर के लिए धन्यवाद (मैंने अपनी खोज में उस वेबसाइट को याद किया)। ऐसा लगता है कि मुझे वास्तव में क्या चाहिए लेकिन यह काम नहीं करता है: लौटाई गई कीमतें मूल कीमतों के समान होती हैं (और यदि किसी भी नियम से उत्पाद प्रभावित नहीं होता है, तो यह किसी भी कीमत को वापस नहीं करता है, हालांकि बाद में आसानी से हल किया जा सकता है)। मैं Mage_CatalogRule_Model_Rule और संबंधित कक्षाओं से कोड देख रहा हूं, ऐसा लगता है कि मैं जो चाहता हूं, लेकिन ऐसा नहीं होता है। मैंने कैश, रेनडिएक्स इत्यादि को फ्लश करने की भी कोशिश की, लेकिन परिणाम हमेशा एक ही है। एक बार फिर से धन्यवाद। – faken

+0

यदि यह काम करता है तो पहले से ही $ _product-> लोड ($ _ product-> getId()) उत्पाद को लोड करने का प्रयास करें, तो आपको एक विशेषता याद आती है। इस बिंदु टोपी बंद मत करो। देखें कि कौन सी विशेषता गुम है और इसे संग्रह में जोड़ें। आपके द्वारा पोस्ट किया गया कोड view.phtml या कुछ जैसा दिखता है, तो आप बैकएंड में विशेषता सेटिंग्स को बदल सकते हैं। –

+0

मैंने इसका उपयोग करने की कोशिश की लेकिन मुझे यह त्रुटि मिल रही है: अमान्य विधि Mage_CatalogRule_Model_Rule :: calcProductPriceRule मैं कुछ भी कर सकता हूं? – Klettseb

9

सूची मूल्य नियम भारी समय, दुकान और जाकर ग्राहक पर निर्भर के रूप में, जब आप उत्पाद के अंतिम मूल्य को लागू किए गए मूल्य नियमों के साथ पुनर्प्राप्त करना चाहते हैं तो आपको उन पैरामीटर को सेट करने की आवश्यकता है।

तो, आपके मामले में, यह सुनिश्चित करें कि प्रदान की उत्पाद इच्छित स्टोर और ग्राहक समूह आईडी, जो के रूप में स्थापित किया जा सकता है के साथ पारित हो जाता है बनाने:

Mage::getModel('catalogrule/rule')->calcProductPriceRule($product->setStoreId('STORE_ID')->setCustomerGroupId('CUSTOMER_GROUP_ID'),$product->getPrice()) 
+0

यह काम किया। धन्यवाद। –

+0

बहुत बहुत धन्यवाद। मुझे समस्या थी कि लेंगो फ़ीड निर्यात विस्तार के क्रोनबॉज ने मूल्य निर्यात के लिए कैटलॉग नियमों को सही ढंग से नहीं माना था। लागू उदाहरण के बाद कस्टमर समूह समूह() उत्पाद उदाहरण के लिए यह अच्छी तरह से काम किया। मुझे लगता है कि यह समाधान मैगे :: ऐप() -> loadAreaPart() आदि –

10

इससे मुझे इस समस्या में मदद मिली: http://www.magentocommerce.com/boards/viewthread/176883/ । जेर्नेज का समाधान व्यावहारिक लगता है, लेकिन यह उन नियमों को संभाल नहीं करता है जो 'स्टॉप प्रोसेसिंग' का उपयोग करके अन्य नियमों को ओवरराइट करते हैं और इसलिए एक से अधिक नियम लागू कर सकते हैं।

$original_price = $_product->getPrice(); 
$store_id = 1; // Use the default store 
$discounted_price = Mage::getResourceModel('catalogrule/rule')->getRulePrice( 
         Mage::app()->getLocale()->storeTimeStamp($store_id), 
         Mage::app()->getStore($store_id)->getWebsiteId(), 
         Mage::getSingleton('customer/session')->getCustomerGroupId(), 
         $_product->getId()); 

// if the product isn't discounted then default back to the original price 
if ($discounted_price===false) { 
    $discounted_price=$original_price; 
} 
+0

द्वारा स्टोर फ्रंटेंड को अनुकरण करने के लिए बहुत बेहतर है, हालांकि Faken का जवाब इसे करने का सही तरीका है। यदि आप विद्रोही बनना चाहते हैं, तो यह काम करता है। –

संबंधित मुद्दे