سؤال

كيف يمكن تحقيق ما يلي في Magento؟

  • عرض رسالة "Hello World" باستخدام وحدة تحكم / عرض / نموذج. لذلك، إذا ذهبت إلى http://example.com/myController سوف تظهر سلسلة "مرحبا العالم". القدرة على إظهار هذه السلسلة داخل قالب موقع الويب الخاص بي (على سبيل المثال، رأس، تذييل الصفحة، إلخ) سيكون مكافأة.

  • كيف أضيف طريقة إلى وحدة التحكم هذه (أو وحدة تحكم جديدة إذا لزم الأمر)، والذي يتفاعل مع نموذج، ويقوم بإجراء الاستعلام Select * FROM articles where id='10' وإرجاع الصف (يحتوي على الأعمدة id, title, content) إلى وحدة تحكم؟ ثم استخدم وحدة التحكم لتضمين طريقة عرض، والتي من شأنها أن تعرض هذا الصف. حتى الذهاب إلى http://example.com/myController/show_row (أو شيء مماثل) سيعرض الصف في طريقة عرض. (لا حاجة لتكون خيالية، فقط echo $row->id; أو شيء مماثل من شأنه أن يعمل.)

كما أن أي معلومات أخرى حول هيكل رمز Magento ستكون مفيدة للغاية.

هل كانت مفيدة؟

المحلول

أولا وقبل كل شيء، أوصي بشدة بشراء PDF / كتاب إلكتروني من PHP Architect. وبعد إنها 20 دولارا أمريكيا، ولكنها واضحة فقط "هنا كيف يعمل Magento Works" لقد تمكنت من العثور عليها. لقد بدأت أيضا الكتابة دروس ماجينتو في موقعي الخاص.

ثانيا، إذا كان لديك خيار، فلن يكون لديك مبرمج من ذوي الخبرة أو الوصول إلى مبرمج من ذوي الخبرة (من الناحية المثالية في PHP و جافا)، اختيار عربة أخرى. وبعد ماجنتو مهندس جيدا، لكن تم تصميمه ليكون حل عربة تسوق يمكن للمبرمجين الآخرين ببناء وحدات أعلى من. لم يتم تصميمه ليتم فهمه بسهولة من قبل الأشخاص ذكيون، ولكنهم غير مبرمجين.

ثالثا، Magento MVC مختلفة جدا عن روبي على القضبان, جانغو, Codeigniter., cakephp., ، إلخ. نموذج MVC شائع مع مطوري PHP هذه الأيام. أعتقد أنه يعتمد على zend. نموذج، والشيء كله يشبه java جدا. هناك اثنين تحكم تحتاج إلى أن تشعر بالقلق. وحدة تحكم الوحدة / تشغيل FrontName، ثم وحدة تحكم MVC.

رابعا، تم بناء تطبيق Magento نفسه باستخدام نفس نظام الوحدة النمطية التي ستستخدمها، لذا فإن المفاتيح حول التعليمات البرمجية الأساسية هو تكتيك تعليمي مفيد. أيضا، الكثير مما ستفعله مع Magento هو تجاوز الفصول الحالية. ما أنا أغطي هنا هو خلق وظائف جديدة، وليس تجاوز. ضع هذا في الاعتبار عندما تنظر إلى عينات التعليمات البرمجية هناك.

سأبدأ بسؤالك الأول، أظهر لك كيفية إعداد وحدة تحكم / جهاز تحكم للرد على عنوان URL محدد. هذه ستكون رواية صغيرة. قد يكون لدي وقت لاحق لمواضيع النموذج / القالب ذات الصلة، ولكن الآن، أنا لا. ومع ذلك، سأتحدث لفترة وجيزة عن سؤال SQL الخاص بك.

magento يستخدم an. إمرأة بنية قاعدة البيانات. كلما كان ذلك ممكنا، حاول استخدام الكائنات النموذجية التي يوفرها النظام للحصول على المعلومات التي تحتاج إليها. أعلم أنه كل شيء هناك في جداول SQL، ولكن من الأفضل عدم التفكير في البيانات الاستيلاء باستخدام استعلامات SQL RAW، أو ستجري مجنونا.

إخلاء المسؤولية النهائية. لقد كنت أستخدم Magento لمدة أسبوعين أو ثلاثة أسابيع، لذلك إفراغ التحذير. هذا تمرين للحصول على هذا على التوالي في رأسي بقدر ما هو للمساعدة في تجاوز سعة مكدس.

إنشاء وحدة نمطية

تتم جميع الإضافات والتخصيصات إلى Magento من خلال الوحدات النمطية. لذلك، أول شيء ستحتاج إليه هو إنشاء وحدة نمطية جديدة. إنشاء ملف XML في 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 هي مساحة اسم فريدة من نوعها للتعديلات الخاصة بك، لا يجب أن تكون اسم شركتك، لكن الاتفاقية الموصى بها MAGENTO. 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>

تبسيط الأشياء، وسيتيح لك ملف التكوين هذا معرفة 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 مع Frontname من HelloWorld ...

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

يجب استخدام وحدة تحكم FrontName 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";
    }
}

ما لدينا فقط الإعداد هو وحدة تحكم الوحدة / فرونتي. هذه هي وحدة التحكم الافتراضية والعمل الافتراضي للوحدة. إذا كنت ترغب في إضافة وحدات تحكم أو إجراءات، عليك أن تتذكر أن الشجرة الجزء الأول من عنوان URL Magento غير قابل للتغيير، فسيذهب دائما بهذه الطريقة 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';
    }
}

يرجى ملاحظة أن IndexController الافتراضي للتحكم الافتراضي وفهر الإجراء الافتراضي يمكن أن يكون ضمنيا ولكن يجب أن يكون واضحا إذا حدث شيء ما. وبالتالي http://example.com/magento/index.php/helloworld/foo سيتطابق مع Foocontroller لوحدة التحكم وفهر العمل وليس الإجراء المزخرفي من IndexController. إذا كنت ترغب في الحصول على الخمور، في فهرس التحكم، يجب عليك الاتصال بهذه وحدة التحكم هذه صراحة مثل هذه الطريقة:http://example.com/magento/index.php/helloworld/index/foo لأن الجزء الثاني من عنوان URL هو وسوف يكون دائما اسم التحكم. هذا السلوك هو ميراث إطار Zend المجمعة في Magento.

يجب أن تكون الآن قادرا على ضرب عناوين 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 الحالية لمعرفة كيفية استخدام النماذج ونظام القالب / التخطيط.

نصائح أخرى

لقد كنت مصارعة مع Magento في الشهر الماضي أو نحو ذلك، ما زلت أحاول معرفة ذلك. لذلك هذه حالة أعمى يقود الأعمى. هناك القليل في طريقة الوثائق والمنتدى / الويكي فوضوي في أحسن الأحوال. ليس ذلك فحسب، بل هناك عدة حلول إما قديمة أو بعيدة عن الأمثل. لست متأكدا مما إذا كان لديك مشروع أو مجرد محاولة لمعرفة ذلك، ولكن من المحتمل أن تكون أسهل إذا بدأت بتعديل الوظيفة الحالية بدلا من إنشاء شيء جديد تماما. لذلك سأذهب بالتأكيد مع "المقالات الموصى بها للمطورين" في الويكي. طريقة الدفع الجديدة كانت واحدة فتحة حقيقية.

لتصحيح الأخطاء كنت أوصي بالتأكيد باستخدام firephp. والنظر في مصدر HTML الخاص بك عندما يحدث خطأ ما. طريقة تصحيح OLE ECHO لا تعمل حقا كل ذلك بشكل جيد.

الهندسة المعمارية العامة مجمع مانع للغاية، أنه حتى لو كنت أفهمها تماما، سأحتاج إلى كتابة كتاب لتغطيةه. أفضل ما يمكنني فعله هو أن أعطيك المشورة وأتمنى أن يكون لي شخص ما قد أعطاني عندما بدأت لأول مرة ...

الابتعاد عن الملفات الأساسية. لا تقم بتعديلها، وبدلا من ذلك اكتب الوحدة الخاصة بك وتجاوز ما تحتاجه.

يستخدم Magento ملفات التكوين التي تتكون من XML لتحديد ما يجب القيام به. من أجل الحصول عليه لتشغيل الاشياء الخاصة بك بدلا من الوظائف الأساسية التي تحتاجها XML الصحيح. لسوء الحظ، لا يوجد دليل حول كيفية بناء XML تحتاج إلى إلقاء نظرة على الأمثلة والقيام ببعض الاختبارات الجادة. لتعقيد أشياء محتوى هذه الملفات حساسة إلى حد كبير. ومع ذلك، إذا كنت تتقن هذه، فيمكنك تجاوز أي جزء من الوظائف الأساسية التي تجعل نظام قوي للغاية.

يستخدم Magento طرق مثل Mage::getModel('mymodel'), Mage::getSingleton('mysingleton'), Mage::helper('myhelper') لإرجاع كائنات من فئات معينة. يجد هذه افتراضيا في مساحة اسمها الأساسية. إذا كنت تريد ذلك استخدام الخاصة بك، فأنت بحاجة إلى تجاوز هذه في حياتك config.xml ملف.

يجب أن يتوافق اسم الفصول الدراسية مع المجلد الذي يقومون به.

الكثير من الأشياء في Magento تمتد في النهاية شيئا يسمى Varien_Object. وبعد هذا فئة للأغراض العامة (نوعا مثل سكين الجيش السويسري) والغرض منه في الحياة هو السماح لك بتحديد أساليبك / المتغيرات الخاصة بك على الطاير. على سبيل المثال، سترى أنه يستخدم كصفيف ممسوح لتمرير البيانات من طريقة إلى أخرى.

أثناء التطوير تأكد من تعطيل تخزين التخزين المؤقت. ستجعل Magento بطيئا مبعيدا، لكنه سيخلصك الكثير من الصدمات الرأسية (من ضجيجه على مكتبك).

سوف ترى $this يجري استخدامها كثيرا. هذا يعني فئة مختلفة اعتمادا على الملف الذي تراه. get_class($this) هو صديقك، خاصة بالتزامن مع FIREPHP.

جوت الأشياء أسفل على الورق. كثير. هناك عدد لا يحصى من الفصائل التي تحتاجها 1-2 أيام بعد مواجهتها.

ماجنتو يحب OO. لا تفاجأ ما إذا كانت تتبع الطريقة تأخذك من خلال 5 إلى 10 فصول مختلفة.

قراءة دليل المصمم هنا. وبعد إنه يعني في الغالب مصممي الرسومات، لكنك يحتاج لفهم أين ولماذا ينتهي الإخراج من الوحدة النمطية الخاصة بك. لذلك لا تنس أن تقوم بتشغيل "تلميحات مسار القالب" في قسم المطور من لوحة الإدارة.

هناك المزيد، لكنني سأوقف هنا قبل أن يتحول هذا إلى أطروحة.

سأكون أفضل يوصي mage2gen., ، سيساعدك ذلك على توليد الغلايات ويمكنك التركيز على منطق الأعمال الأساسية. هذا يساعد فقط في تسريع الأشياء.

وحدة Magento هي مجموعة من الدلائل التي تحتوي على كتل ووحدات التحكم والمساعدات والموديلات اللازمة لإنشاء ميزة مخزن محددة. إنها وحدة التخصيص في منصة Magento. يمكن إنشاء وحدات Magento لأداء وظائف متعددة مع المنطق الداعم للتأثير على تجربة المستخدم ومظهر مخزن. لديها دورة حياة تسمح لهم بتثبيتها أو حذفها أو تعطيلها. من منظور كل من التجار ومطوري الإرشاد، الوحدات هي الوحدات المركزية من منصة Magento.

إعلان الوحدة

علينا أن نعلن الوحدة باستخدام ملف التكوين. AS Magento 2 البحث عن وحدة التكوين في الدليل وما إلى ذلك من الوحدة النمطية. حتى الآن سنقوم بإنشاء Module.xml.

سيبدو الرمز مثل هذا:

<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Cloudways_Mymodule" setup_version="1.0.0"></module> </config>

تسجيل الوحدة النمطيةيجب تسجيل الوحدة النمطية في نظام Magento 2 باستخدام فئة مسجل مكون Magento. الآن سنقوم بإنشاء تسجيل الملفات .php في الدليل الجذر الوحدة النمطية:

app/code/Cloudways/Mymodule/registration.php

سيبدو الرمز مثل هذا:

?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Cloudways_Mymodule',
__DIR__
);

تحقق حالة الوحدة النمطيةبعد اتباع الخطوات المذكورة أعلاه، كنا قد أنشأنا وحدة نمطية بسيطة. الآن سنتحقق من حالة الوحدة النمطية وما إذا كانت تم تمكينها أو تعطيلها باستخدام سطر الأوامر التالي:

php bin/magento module:status

php bin/magento module:enable Cloudways_Mymodule

مشاركة ملاحظاتك بمجرد مرتكم عملية كاملة

كنت أحاول جعل الوحدة النمطية من Magaplaza Hello World Tutorial، ولكن حدث خطأ ما. لقد استوردت رمز هذه الوحدة https://github.com/astorm/magento2-hello-world. من جيثب وعملت. من تلك الوحدة، قمت بإنشائها فئات الفئات الفرعية AJAX حدد الوحدة النمطية المنسدلة. بعد تثبيته في دليل AAP / التعليمات البرمجية لتركيب Magento2 الخاص بك اتبع عنوان URL هذا .. http://www.example.com/hello_mvvm/hello/world.يمكنك تنزيل التعليمات البرمجية الخاصة بها من هنا https://github.com/sanaullahahamad/magento2_cat_subcat_ajax_select_dropdowns. ووضعها في مجلد AAP / التعليمات البرمجي الخاص بك. من تشغيل هذه الأوامر ...

php bin/magento setup:update
php bin/magento setup:static-content:deploy -f
php bin/magento c:c

الآن يمكنك التحقق من وظائف الوحدة النمطية مع عنوان URL التالي http: // {www.example.com}} / hello_mvvm / hello / world

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top