मैं Magento में एक सरल 'हैलो वर्ल्ड' मॉड्यूल कैसे बनाऊँ?

निम्नलिखित कैसे मैगेंटा में पूरा किया जा सकता है?

Magento के कोड संरचना के बारे में कोई अन्य जानकारी भी बहुत मददगार होगी।

Solutions Collecting From Web of "मैं Magento में एक सरल 'हैलो वर्ल्ड' मॉड्यूल कैसे बनाऊँ?"

सबसे पहले, मैं अत्यधिक सुझाव देता हूं कि आप पीएचडी / ई-बुक को PHP आर्किटेक्ट से खरीदें। यह यूएस $ 20 है, परन्तु एकमात्र सीधा शब्द है "यहां बताया गया है कि कैसे मैग्नेटो काम करता है" संसाधन जो मैंने पाया है। मैंने अपनी वेबसाइट पर मैग्नेटो ट्यूटोरियल भी लिखना शुरू कर दिया है।

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

तीसरा, Magento MVC रेलवे , जेगो , कोड इग्नेटर , केक पीएचपी , आदि पर रूबी से बहुत अलग है। एमवीसी मॉडल जो कि PHP डेवलपर्स के साथ लोकप्रिय है ये दिन। मुझे लगता है कि यह ज़ेंड मॉडल पर आधारित है, और पूरी बात बहुत जावा ओओपी जैसी है इसमें दो नियंत्रक हैं जिनके बारे में आपको चिंतित होना चाहिए। मॉड्यूल / फ्रंटनैम नियंत्रक, और उसके बाद MVC नियंत्रक।

चौथा, मैगेंटा आवेदन स्वयं उसी मॉड्यूल सिस्टम का उपयोग करके बनाया गया है जिसका उपयोग आप करेंगे, इसलिए कोर कोड के आसपास एक महत्वपूर्ण सीखने की रणनीति है। साथ ही, मैगेंटा के साथ आप जो भी करेंगे, वह मौजूदा क्लासेस को ओवरराइड कर रहा है। मैं यहाँ क्या कवर कर रहा हूँ नई कार्यक्षमता बना रहा है, ओवरराइड नहीं है इसे ध्यान में रखें जब आप कोड के नमूनों को वहां से देख रहे हों।

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

Magento एक ईएवी डेटाबेस वास्तुकला का उपयोग करता है जब भी संभव हो, उस मॉडल ऑब्जेक्ट का उपयोग करने का प्रयास करें, जो सिस्टम आपको आवश्यक जानकारी प्राप्त करने के लिए प्रदान करता है। मुझे पता है कि यह SQL टेबल में है, लेकिन कच्चे एसक्यूएल प्रश्नों का इस्तेमाल करते हुए डेटा को हथियाने के बारे में सोचने के लिए सबसे अच्छा नहीं है, या आप पागल हो जाएंगे।

अंतिम अस्वीकरण मैं लगभग दो या तीन सप्ताह के लिए Magento का उपयोग कर रहा हूं, इसलिए चेतावनी के लिए यह मेरे सिर में सीधे इसे प्राप्त करने के लिए एक व्यायाम है जितना यह स्टैक अतिप्रवाह की मदद करना है।

एक मॉड्यूल बनाएं

Magento के सभी अतिरिक्त और अनुकूलन मॉड्यूल के माध्यम से किया जाता है। इसलिए, आपको जो पहली चीज करने की ज़रूरत है वह एक नया मॉड्यूल बनायेगा। निम्न में नामित app/modules में एक्सएमएल फ़ाइल बनाएं

 cd /path/to/store/app touch etc/modules/MyCompanyName_HelloWorld.xml 
 <?xml version="1.0"?> <config> <modules> <MyCompanyName_HelloWorld> <active>true</active> <codePool>local</codePool> </MyCompanyName_HelloWorld> </modules> </config> 

MyCompanyName आपके संशोधनों के लिए एक अद्वितीय नाम स्थान है, यह आपकी कंपनी का नाम नहीं है, लेकिन यह अनुशंसित सम्मेलन मेरा मेगेंडा HelloWorld आपके मॉड्यूल का नाम है।

एप्लिकेशन कैश साफ़ करें

अब जब कि मॉड्यूल फ़ाइल जगह में है, हमें इसके बारे में Magento को पता होना चाहिए (और हमारे काम की जांच करें)। व्यवस्थापक आवेदन में

  1. सिस्टम-> कैश प्रबंधन पर जाएं
  2. सभी कैश मेनू से ताज़ा करें चुनें
  3. कैश सेटिंग्स सहेजें पर क्लिक करें

अब, हम यह सुनिश्चित करते हैं कि Magento मॉड्यूल के बारे में जानता है

  1. सिस्टम-> कॉन्फ़िगरेशन पर जाएं
  2. उन्नत क्लिक करें
  3. "मॉड्यूल आउटपुट अक्षम करें" सेटिंग बॉक्स में, "MyCompanyName_HelloWorld" नामक आपके नए मॉड्यूल को देखें

यदि आप प्रदर्शन धीमा कर सकते हैं, तो आप विकास / शिक्षा के दौरान आवेदन कैश को बंद करना चाह सकते हैं। कुछ भी अधिक निराशाजनक नहीं है, फिर कैश को साफ़ करें और सोच रहे हैं कि आपके परिवर्तन क्यों नहीं दिख रहे हैं।

निर्देशिका संरचना सेट करें

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

 mkdir -p app/code/local/MyCompanyName/HelloWorld/Block mkdir -p app/code/local/MyCompanyName/HelloWorld/controllers mkdir -p app/code/local/MyCompanyName/HelloWorld/Model mkdir -p app/code/local/MyCompanyName/HelloWorld/Helper mkdir -p app/code/local/MyCompanyName/HelloWorld/etc mkdir -p app/code/local/MyCompanyName/HelloWorld/sql 

और एक कॉन्फ़िगरेशन फ़ाइल जोड़ें

 touch app/code/local/MyCompanyName/HelloWorld/etc/config.xml 

और विन्यास फाइल के अंदर, निम्नलिखित को जोड़ें, जो अनिवार्य रूप से एक "खाली" कॉन्फ़िगरेशन है

 <?xml version="1.0"?> <config> <modules> <MyCompanyName_HelloWorld> <version>0.1.0</version> </MyCompanyName_HelloWorld> </modules> </config> 

चीजों को अधिसूचित करना, यह विन्यास फाइल आपको मैगेंटा को बताएगी कि आप किस कोड को चलाना चाहते हैं

राउटर सेट करना

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

 http://example.com/magento/index.php/helloworld 

इसलिए, आपकी कॉन्फ़िगरेशन फ़ाइल में, निम्न अनुभाग जोड़ें।

 <config> <!-- ... --> <frontend> <routers> <!-- the <helloworld> tagname appears to be arbitrary, but by convention is should match the frontName tag below--> <helloworld> <use>standard</use> <args> <module>MyCompanyName_HelloWorld</module> <frontName>helloworld</frontName> </args> </helloworld> </routers> </frontend> <!-- ... --> </config> 

आप यहाँ क्या कह रहे हैं "नरक के किसी भी यूआरएल है helloworld का नाम …

 http://example.com/magento/index.php/helloworld 

सामने का नाम नियंत्रक MyCompanyName_HelloWorld "का उपयोग करना चाहिए

इसलिए, उपर्युक्त विन्यास के साथ, जब आप उपरोक्त helloworld पृष्ठ को लोड करते हैं, तो आपको एक 404 पृष्ठ मिलेगा। ऐसा इसलिए है क्योंकि हमने हमारे नियंत्रक के लिए कोई फ़ाइल नहीं बनाई है चलिए अब ऐसा करते हैं।

 touch app/code/local/MyCompanyName/HelloWorld/controllers/IndexController.php 

अब पृष्ठ को लोड करने का प्रयास करें। प्रगति! 404 के बजाय, आपको एक PHP / Magento अपवाद मिलेगा

 Controller file was loaded but class does not exist 

इसलिए, हमने बनाई गई फ़ाइल को खोलें, और निम्न कोड में पेस्ट करें। क्लास का नाम आपके राउटर में प्रदान किए गए नाम के आधार पर होना चाहिए।

 <?php class MyCompanyName_HelloWorld_IndexController extends Mage_Core_Controller_Front_Action{ public function indexAction(){ echo "We're echoing just to show that this is what's called, normally you'd have some kind of redirect going on here"; } } 

हम सिर्फ सेटअप क्या है मॉड्यूल / फ्रंटनम नियंत्रक यह डिफ़ॉल्ट नियंत्रक और मॉड्यूल की डिफ़ॉल्ट क्रिया है। यदि आप नियंत्रकों या क्रियाओं को जोड़ना चाहते हैं, तो आपको यह याद रखना होगा कि किसी Magento URL के पेड़ का पहला भाग अपरिवर्तनीय है, वे हमेशा इस तरह से http://example.com/magento/index.php/frontName/controllerName/actionName जायेंगे

इसलिए यदि आप इस यूआरएल से मेल खाना चाहते हैं तो

 http://example.com/magento/index.php/helloworld/foo 

आपके पास एक फ़ू कंट्रोलर होगा, जिसे आप ऐसा कर सकते हैं:

 touch app/code/local/MyCompanyName/HelloWorld/controllers/FooController.php 
 <?php class MyCompanyName_HelloWorld_FooController extends Mage_Core_Controller_Front_Action{ public function indexAction(){ echo 'Foo Index Action'; } public function addAction(){ echo 'Foo add Action'; } public function deleteAction(){ echo 'Foo delete Action'; } } 

कृपया ध्यान दें कि डिफॉल्ट नियंत्रक इंडेक्स नियंत्रक और डिफ़ॉल्ट एक्शन इंडेक्स एक्शन अन्तर्निहित कर सकते हैं, लेकिन अगर कुछ इसके बाद आने पर स्पष्ट हो जाए इसलिए http://example.com/magento/index.php/helloworld/foo नियंत्रक FooController और कार्रवाई सूचकांक एक्शन से मेल खाएगा और सूचकांक नियंत्रक के कार्रवाई fooAction नहीं होगा। यदि आप नियंत्रक सूचकांक नियंत्रक में एक फूएक्शन चाहते हैं तो आपको इस नियंत्रक को स्पष्ट रूप से इस तरह से कॉल करना होगा: http://example.com/magento/index.php/helloworld/index/foo क्योंकि यूआरएल का दूसरा भाग है और हमेशा नियंत्रक नाम होगा यह व्यवहार ज़ेंड फ़्रेमवर्क का एक भाग है जो कि Magento में बंडल किया गया है।

अब आपको निम्नलिखित यूआरएल को हिट करने में सक्षम होना चाहिए और अपने गूंज ब्योरे के परिणाम देखें

 http://example.com/magento/index.php/helloworld/foo http://example.com/magento/index.php/helloworld/foo/add http://example.com/magento/index.php/helloworld/foo/delete 

इसलिए, आपको एक बुनियादी विचार देना चाहिए कि Magento नियंत्रक को किस प्रकार भेजता है। यहां से मैं मौजूदा Magento नियंत्रक वर्गों पर पॉच की सिफारिश करता हूं कि कैसे मॉडल और टेम्पलेट / लेआउट सिस्टम का उपयोग किया जाना चाहिए।

मैं पिछले महीने Magento के साथ कुश्ती कर रहा था या फिर और मैं अभी भी इसे समझने की कोशिश कर रहा हूं। तो यह अंधा का एक मामला है जो अंधे का नेतृत्व करता है दस्तावेज़ीकरण के रास्ते में बहुत कम है और फ़ोरम / विकी सबसे अचरज है। इतना ही नहीं, लेकिन ऐसे कई समाधान हैं जो या तो पुराने या इष्टतम से दूर हैं। मुझे यकीन नहीं है कि आपके पास कोई प्रोजेक्ट है या इसे निकालने की कोशिश कर रहा है, लेकिन यदि आप पूरी तरह से नया बनाने का विरोध करते हुए मौजूदा कार्यक्षमता को संशोधित करने के साथ शुरू करते हैं, तो शायद यह आसान हो। इसके लिए मैं निश्चित रूप से विकी में "डेवलपर्स के लिए अनुशंसित लेख" के साथ जाना चाहता हूं। नई भुगतान विधि एक वास्तविक आंख खोलने वाला था।

डीबगिंग के लिए मैं निश्चित रूप से FirePHP का उपयोग करने और कुछ गलत होने पर आपके HTML स्रोत को देखने की सलाह देता हूं। ओले गूंज डीबग पद्धति वास्तव में सभी अच्छी तरह से काम नहीं करती।

सामान्य वास्तुकला इतना मन-स्तब्ध रूप से जटिल है, भले ही मैं इसे पूरी तरह समझा, मुझे इसे कवर करने के लिए एक किताब लिखनी होगी। सबसे अच्छा मैं कर सकता हूँ आपको सलाह देता है I इच्छा है कि जब मैंने पहली बार शुरू किया था, तो कोई मुझे दिया था …

कोर फाइलों से दूर रहें उन्हें संशोधित न करें, इसके बजाय अपने खुद के मॉड्यूल को लिखें और आपको क्या जरूरत है ओवरराइड करें।

Magento config फाइलों का इस्तेमाल करता है जो एक्सएमएल को तय करता है कि उसे क्या करना चाहिए। मूल कार्यक्षमता के विरोध में इसे अपना सामान चलाने के लिए इसे सही xml की आवश्यकता है। दुर्भाग्यवश, आपको XML बनाने का तरीका नहीं है; आपको उदाहरणों को देखने और कुछ गंभीर परीक्षण करने की आवश्यकता है। चीजों को जटिल बनाने के लिए इन फ़ाइलों की सामग्री ज़्यादातर केस-संवेदी होती है। हालांकि यदि आप इन्हें मास्टर करते हैं तो आप बुनियादी कार्यक्षमता के किसी भी भाग को ओवरराइड कर सकते हैं जो एक बहुत ही शक्तिशाली सिस्टम के लिए बनाता है।

Magento कुछ श्रेणियों के ऑब्जेक्ट्स को वापस करने के लिए Mage::getModel('mymodel') , Mage::getSingleton('mysingleton') , Mage::helper('myhelper') जैसे तरीकों का उपयोग करता है। यह अपने कोर नेमस्पेस में डिफ़ॉल्ट रूप से इन्हें पाता है यदि आप इसे अपनी स्वयं का उपयोग करना चाहते हैं, तो आपको इन्हें अपनी config.xml फ़ाइल में ओवरराइड करना होगा।

आपकी कक्षाओं का नाम उस फ़ोल्डर के अनुरूप होना चाहिए, जिसमें वे हैं

Magento में बहुत सारी ऑब्जेक्ट्स अंततः एक Varien_Object नामक कुछ का विस्तार Varien_Object । यह एक सामान्य प्रयोजन वर्ग (एक प्रकार की स्विस सेना चाकू की तरह) और जीवन में इसका उद्देश्य है कि आप मक्खी पर अपने तरीके / चर परिभाषित करने की अनुमति देते हैं। उदाहरण के लिए आप देखेंगे कि यह एक विधि से दूसरे तरीके से डेटा को पारित करने के लिए महिमाकृत सरणी के रूप में उपयोग किया जाता है

विकास के दौरान सुनिश्चित करें कि आप कैशिंग अक्षम हैं यह मैग्नेशिया को बहुत धीमा कर देगी, लेकिन यह आपको बहुत से सिर आघात (इसे अपने डेस्क पर पीटकर) से बचाएगा।

आप देखेंगे कि $this बहुत इस्तेमाल किया जा रहा है। इसका अर्थ यह है कि आप इसे देखे गए फ़ाइल के आधार पर एक अलग श्रेणी का मतलब है। get_class($this) आपका दोस्त है, विशेष रूप से अग्निशामक के साथ संयोजन के साथ

कागज पर बातें नीचे बहुत। अनगिनत छोटे फैक्टोइड्स हैं कि आप उन्हें मुठभेड़ करने के 1-2 दिन बाद की आवश्यकता होगी।

Magento ओओ प्यार करता है आश्चर्यचकित न करें अगर एक विधि को पता लगाया जाए तो आपको 5-10 विभिन्न वर्गों के माध्यम से ले जाता है।

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

वहाँ अधिक है, लेकिन इससे पहले कि मैं एक निबंध में बदल जाता हूं इससे पहले मैं यहां रोकूंगा