और सबसे पहले, मैं अत्यधिक अनुशंसा करता हूं कि आप PHP वास्तुकार से पीडीएफ / ई-बुक खरीदें । यह यूएस $ 20 है, लेकिन एकमात्र सीधा है "यहां बताया गया है कि मैगेंटो कैसे काम करता है" संसाधन मैं खोजने में सक्षम रहा हूं। मैंने अपनी वेबसाइट पर Magento के ट्यूटोरियल्स लिखना भी शुरू कर दिया है ।
दूसरा, यदि आपके पास कोई विकल्प है, और एक अनुभवी प्रोग्रामर नहीं हैं या आपके पास एक अनुभवी प्रोग्रामर (आदर्श रूप से PHP और जावा में) तक पहुंच नहीं है, तो दूसरी गाड़ी चुनें । Magento अच्छी तरह से इंजीनियर है, लेकिन यह एक खरीदारी कार्ट समाधान होने के लिए इंजीनियर था जो अन्य प्रोग्रामर मॉड्यूल को शीर्ष पर बना सकते हैं। यह उन लोगों द्वारा आसानी से समझा नहीं जा सकता था जो स्मार्ट हैं, लेकिन प्रोग्रामर नहीं हैं।
तीसरा, मैगेंटो एमवीसी रूबी ऑन रेल्स , Django , कोडइग्निटर , केकपीएचपी आदि से बहुत अलग है । MVC मॉडल जो इन दिनों PHP डेवलपर्स के साथ लोकप्रिय है। मुझे लगता है कि यह Zend मॉडल पर आधारित है , और पूरी बात बहुत जावा OOP जैसी है। वहाँ दो नियंत्रकों आप के बारे में चिंतित होने की जरूरत है। मॉड्यूल / फ्रंटनेम नियंत्रक, और फिर एमवीसी नियंत्रक।
चौथा, Magento एप्लिकेशन को उसी मॉड्यूल सिस्टम का उपयोग करके बनाया गया है जिसका आप उपयोग कर रहे हैं, इसलिए कोर कोड के आसपास पोकिंग एक उपयोगी शिक्षण रणनीति है। इसके अलावा, आप Magento के साथ क्या कर रहे हैं, इसका एक बहुत मौजूदा वर्गों से आगे निकल रहा है । मैं जो यहां कवर कर रहा हूं वह नई कार्यक्षमता पैदा कर रहा है, ओवरराइडिंग नहीं। इसे ध्यान में रखें जब आप कोड के नमूने देख रहे हों।
मैं आपके पहले प्रश्न के साथ शुरू करने जा रहा हूं, जो आपको दिखाता है कि किसी विशिष्ट URL पर प्रतिक्रिया देने के लिए नियंत्रक / राउटर को कैसे सेटअप किया जाए। यह एक छोटा उपन्यास होगा। मेरे पास बाद में मॉडल / टेम्पलेट संबंधित विषयों के लिए समय हो सकता है, लेकिन अभी के लिए, मैं नहीं। हालाँकि, मैं संक्षेप में आपके SQL प्रश्न पर बात करूँगा।
Magento एक EAV डेटाबेस आर्किटेक्चर का उपयोग करता है । जब भी संभव हो, आपके द्वारा आवश्यक जानकारी प्राप्त करने के लिए सिस्टम द्वारा प्रदान की जाने वाली मॉडल ऑब्जेक्ट का उपयोग करने का प्रयास करें। मुझे पता है कि यह एसक्यूएल तालिकाओं में है, लेकिन कच्चे एसक्यूएल प्रश्नों का उपयोग करके डेटा को हथियाने के बारे में सोचना अच्छा नहीं है, या आप पागल हो जाएंगे।
अंतिम अस्वीकरण मैं लगभग दो या तीन सप्ताह से मैगनेटो का उपयोग कर रहा हूं, इसलिए कैवेट एम्प्टर। यह मेरे सिर में सीधे जाने के लिए एक अभ्यास है जितना कि स्टैक ओवरफ्लो में मदद करना है।
एक मॉड्यूल बनाएँ
Magento के सभी परिवर्धन और अनुकूलन मॉड्यूल के माध्यम से किए जाते हैं। तो, पहली बात यह है कि आपको एक नया मॉड्यूल बनाना होगा। app/modules
निम्नानुसार एक XML फ़ाइल बनाएँ
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 को इसके बारे में जानने की ज़रूरत होगी (और हमारे काम की जाँच करें)। एडमिन एप्लिकेशन में
- सिस्टम-> कैश प्रबंधन पर जाएं
- सभी कैश मेनू से ताज़ा करें चुनें
- कैश सेटिंग्स सहेजें पर क्लिक करें
अब, हम यह सुनिश्चित करते हैं कि Magento मॉड्यूल के बारे में जानता है
- सिस्टम-> कॉन्फ़िगरेशन पर जाएं
- उन्नत पर क्लिक करें
- "मॉड्यूल को अक्षम करें" सेटिंग बॉक्स में, "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>
चीजों को सक्रिय करते हुए, यह कॉन्फ़िगरेशन फ़ाइल आपको Magento को बताएगी कि आप किस कोड को चलाना चाहते हैं।
राउटर सेट करना
अगला, हमें मॉड्यूल के राउटर को सेटअप करने की आवश्यकता है। यह सिस्टम को बताएगा कि हम किसी भी URL को किस रूप में संभाल रहे हैं
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>
आप यहाँ क्या कह रहे हैं "किसी भी URL के साथ helloworld का नाम ...
http://example.com/magento/index.php/helloworld
फ्रंटनेम नियंत्रक MyCompanyName_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
तो अगर आप इस url का मिलान करना चाहते हैं
http://example.com/magento/index.php/helloworld/foo
आपके पास एक FooController होना चाहिए, जिसे आप इस तरह से कर सकते हैं:
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 और कार्रवाई indexAction से मेल खाएगा और IndexController की कार्रवाई fooAction नहीं। यदि आप नियंत्रक इंडेक्सकंट्रोलर में एक फ़्यूएशन रखना चाहते हैं, तो आपको इस नियंत्रक को स्पष्ट रूप से इस तरह से कॉल करना होगा:
http://example.com/magento/index.php/helloworld/index/foo
क्योंकि url का दूसरा भाग है और हमेशा कंट्रोलरनाम होगा। यह व्यवहार मैगेंटो में बंडल Zend फ्रेमवर्क की एक विरासत है।
अब आपको निम्नलिखित URL को हिट करने और अपने इको स्टेटमेंट के परिणाम देखने में सक्षम होना चाहिए
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 कंट्रोलर क्लासेस में poke की सिफारिश की है कि यह देखने के लिए कि कैसे मॉडल्स और टेम्पलेट / लेआउट सिस्टम का उपयोग किया जाना चाहिए।