2012-12-21 29 views
15

मुझे मददगार, उनके तरीकों और उत्पाद विशेषताओं के साथ स्वयं को परिचित करने में सहायता चाहिए। विशेष रूप से: $_helper->productAttribute($product, $attributeHtml, $attributeName)उत्पाद पेजों के लिए उत्पाद एट्रिब्यूट() विधि को समझने में सहायता की आवश्यकता है

यहां फ़ाइलें मैं उपयोग कर रहा हूँ/समीक्षा कर रहे हैं:

app\code\core\Mage\catalog\helper\output.php 
app\design\frontend\[theme name]\template\catalog\product\view\media.phtml 

कोड की निम्न पंक्ति उत्पाद छवि के लिए एचटीएमएल उत्पन्न करता है।

echo $_helper->productAttribute($_product, $_img, 'image'); 

सहायक वर्ग कोड कोड के निम्नलिखित टुकड़ों में विधि का वर्णन करता है। क्या लौटाया जा रहा है, क्या कदम हैं, और मैं टेम्पलेट फ़ाइल की पिछली पंक्ति में वर्णित आईएमजी एचटीएमएल को प्रतिबिंबित करने के बजाय इस विधि का उपयोग क्यों करूं?

public function getHandlers($method) 
{ 
    $method = strtolower($method); 
    return isset($this->_handlers[$method]) ? $this->_handlers[$method] : array(); 
} 

public function process($method, $result, $params) 
{ 
    foreach ($this->getHandlers($method) as $handler) { 
     if (method_exists($handler, $method)) { 
      $result = $handler->$method($this, $result, $params); 
     } 
    } 
    return $result; 
} 

public function productAttribute($product, $attributeHtml, $attributeName) 
{ 
    /* Code that is not relevant to this example */ 

    $attributeHtml = $this->process('productAttribute', $attributeHtml, array(
     'product' => $product, 
     'attribute' => $attributeName 
    )); 

    return $attributeHtml; 
} 

किसी भी मदद की सराहना की जाती है।

+0

हैंडलर जोड़ना संभव है, और इन हैंडलर को निष्पादित किया जा रहा है। क्या आप यह देखने के लिए डीबग नहीं कर सकते कि और क्या हो रहा है? यह एक सार तत्व हो सकता है जो अन्य तत्वों के लिए अधिक उपयोगी हो सकता है :) – EricG

+0

उत्कृष्ट सुझाव। मैं अभी भी Magento के लिए डीबग करने के लिए एक कुशल तरीका पता लगा रहा हूँ और सुझावों के लिए खुला हूँ। सार के रूप में, यह समझ में आता है। क्या हो रहा है इसके लिए कदम भी सराहना की जाएगी। :) – MSD

+0

Google क्रोम में एक उत्कृष्ट डीबगर है। इंस्पेक्टर (Ctrl-Shift-J) खोलें और स्रोतों पर जाएं। आप वहां सभी स्रोतों में खोजने के लिए Ctrl-Shift-F का उपयोग कर सकते हैं। या मैन्युअल रूप से src खोलें, और ब्रेकपॉइंट डालें। फिर इसके माध्यम से कदम :) – EricG

उत्तर

27

बहुत अच्छा सवाल!

तो वास्तव में इस सहायक के उद्देश्य के बारे में थोड़ा सा। इसके नाम से आप पहले ही एक निष्कर्ष निकाल सकते हैं कि इसका उपयोग डेटा के आउटपुट के लिए किया जाता है। विधि का नाम भी स्वयं व्याख्यात्मक है, यह केवल उत्पाद विशेषता मान आउटपुट करता है हैंडलर पर निर्भर करता है। वर्तमान में दो विधियां हैं, productAttribute(), जिसका उपयोग उत्पाद विशेषता मानों और categoryAttribute() को आउटपुट करने के लिए किया जाता है, जिसका उपयोग श्रेणी वाले लोगों के लिए किया जाता है। श्रेणी और उत्पाद से कोर टेम्पलेट्स में सभी डेटा इस विधि के बावजूद आउटपुट किया जाता है (मूल्य विशेषता को छोड़कर), जहां तक ​​मुझे याद है कि इसे 1.4.x संस्करण में से एक में जोड़ा गया था, लेकिन यह सुनिश्चित नहीं है। मुख्य विचार विशेषता के डेटा को फ़िल्टर करना संभव बनाना था। उदाहरण के लिए आप श्रेणी विवरण में {{widget ... }} निर्माण का उपयोग कर सकते हैं, यह विशेष तरीकों के माध्यम से महसूस किया जाता है।

दोनों विधियां वास्तव में समान कार्यक्षमता करती हैं, लेकिन विभिन्न संस्थाओं के लिए। उन्हें 3 तर्कों को प्राप्त करने के दोनों: उस विशेषता मॉडल पुन: प्राप्त करने के लिए प्रयोग किया जाता है कोड - - मूल्य कि फ़िल्टर हो जाता है

  • विशेषता कोड

    • इकाई
    • विशेषता मान (श्रेणी या उत्पाद, विधि नाम पर निर्भर करता है)

    पहले इस विधियों के अंदर, Magento मूल्य में एचटीएमएल मार्कअप के भत्ते की जांच करता है, यदि नहीं, तो यह escapeHtml() विधि के साथ पाठ से बच निकलता है। इसके अलावा यदि विशेषता में व्यवस्थापक में इनपुट के रूप में textarea है, तो सभी नए लाइन वर्ण <br /> टैग के साथ प्रतिस्थापित किए गए हैं।

    यदि एचटीएमएल की अनुमति है, तो Magento कॉन्फ़िगरेशन में {{widget ...}} जैसे विशेष निर्माण के भत्ते के लिए जांच करता है (इस निर्माण का आधिकारिक नाम निर्देश है)। यदि निर्देशों की अनुमति है, तो विशेष निर्देशक प्रोसेसर तत्काल हो जाता है और मूल्य संसाधित हो जाता है।

    सभी कोर प्रोसेसिंग के बाद, Magento हैंडलर को आमंत्रित करता है।

    यह हैंडलर अतिरिक्त कार्यक्षमता हैं जिनका उपयोग कोर मॉड्यूल द्वारा नहीं किया जाता है, लेकिन आप कुछ अच्छे अनुकूलन प्राप्त करने के लिए अपने स्वयं के अनुकूलन का उपयोग कर सकते हैं। यहां उदाहरण दिया गया है: आप अपरकेस में उत्पाद नाम के सभी आउटपुट बनाना चाहते हैं।तो फिर आप अपने खुद के हैंडलर जोड़ सकते हैं, के लिए इस उद्देश्य के लिए इस सरल चरणों का पालन करें:

    1. catalog_helper_output_construct

      <config> 
          <frontend> 
           <events> 
            <catalog_helper_output_construct> 
             <observers> 
              <your_module> 
               <class>your_module/observer</class> 
               <method>handleHelperOutputInitialization</method> 
              </your_module> 
             </observers> 
            </catalog_helper_output_construct> 
           </events> 
          </frontend> 
      </config> 
      
    2. के लिए एक पर्यवेक्षक को परिभाषित करें अपने पर्यवेक्षक कक्षा बनाएं, यह भी मैं भी हैंडलर के रूप में यह कर देगा । कोड बहुत सरल है:

      class Your_Module_Model_Observer 
      { 
          public function handleHelperOutputInitialization($observer) 
          { 
           $helper = $observer->getEvent()->getHelper(); 
           $helper->addHandler('productAttribute', $this); 
          } 
      
          public function productAttribute($helper, $value, $parameters) 
          { 
           $attribute = $parameters['attribute']; 
           if ($attribute->getAttributeCode() == 'name') { 
            return strtoupper($value); 
           } 
           return $value; 
          } 
      } 
      
    3. सुनिश्चित करें कि हैंडलर कक्षा में अपने विधि नाम बिल्कुल, मूल्य प्रोसेसर की विधि नाम के समान है इस उदाहरण यह productAttribute() है में बनाओ।

    Magento सीखने का आनंद लें!

  • +0

    आपकी पूरी प्रतिक्रिया के लिए बहुत बहुत धन्यवाद। बिल्कुल एक टन सीखा। काश मैं इसे ऊपर उठा सकता है। – MSD

    +2

    @MSD यदि आप इसे ऊपर नहीं उठा सकते हैं तो आप हमेशा एक उत्तर स्वीकार कर सकते हैं। जवाब स्वीकार करने पर विचार करें यदि इससे आपको प्रश्न हल करने में मदद मिली है। – Kalpesh

    +1

    यह समाधान Magento 2.0.0.0-dev47 के बाद पुराना है (ईवेंट हटा दिया गया है)। एक प्लगइन अब इस्तेमाल किया जाना चाहिए। – Quisse