Rumah >pembangunan bahagian belakang >tutorial php >Membangunkan modul tersuai untuk Magento

Membangunkan modul tersuai untuk Magento

WBOY
WBOYasal
2023-08-31 21:49:07940semak imbas

Pembangunan Modul Tersuai Magento ialah bahagian teras mana-mana pembangunan Magento atau projek Magento kerana pada mana-mana peringkat anda mungkin mahu menyepadukan fungsi/modul anda sendiri ke dalam projek Magento sedia ada.

Dalam siri ini, saya akan membincangkan butiran pembangunan modul tersuai Magento.

Jika anda ingin membangunkan Magento dengan lebih lanjut, lihat pelbagai sambungan Magento yang berguna di Pasaran Envato.

为 Magento 开发自定义模块

Dalam siri ini, saya merujuk kepada Magento Community Edition 1.7, walaupun versi tersuai Struktur modul adalah sama dalam semua versi Magento. Sebelum memulakan pembangunan modul sebenar, mari kita cepat memahami struktur asas Magento.

Setiap kali anda memasang Magento baharu, anda akan melihat struktur direktori Magento berikut:

为 Magento 开发自定义模块

Pengenalan kepada struktur Magento MVC

Seperti mana-mana rangka kerja utama lain seperti Joomla, CakePHP, CodeIgniter, dll., Magento juga mengikuti seni bina berasaskan MVC, walaupun ini berbeza sedikit daripada seni bina PHP MVC teras. Di sini saya akan menerangkan perbezaan dalam seni bina Magento dengan membandingkannya dengan seni bina PHP MVC yang mudah.

Seni Bina PHP MVC

Dalam corak MVC biasa, aliran aplikasi kelihatan seperti ini:

  1. Terdapat satu titik masuk utama - index.php - dan keseluruhan mekanisme penghalaan aplikasi ditentukan dari sini.
  2. index.php - 整个应用程序路由机制从这里确定。
  3. 根据此路由机制和请求的 URL 模式,应用将调用适当的控制器。
  4. 然后控制器调用适当的视图。
  5. 最后,视图文件从模型文件收集数据并显示数据。

Magento MVC 架构

Magento 的 MVC 架构在 MVC 模式的基础上添加了几层,但应用程序的基本控制流程如下:

  1. 有一个主入口点 - index.php - 整个应用程序将从这里初始化。
  2. 将根据请求的 URL 调用适当的控制器。
  3. 控制器定义页面并加载这些页面的布局文件。
  4. 布局文件告诉控制器要使用哪些块文件。
  5. 块文件从模型和帮助程序文件中收集数据并将其传递到模板文件。
  6. 模板文件接收数据并呈现 html。

最初,这可能很难理解,因为它包含一些额外的层。为了更熟悉控制流程,让我们开发一个自定义的“Hello World”模块。

开始使用模块之前

  • 我假设您已经拥有版本 1.7 或 1.7+ 的 Magento 工作副本(否则版本在现阶段并不重要)
  • 禁用缓存。 要禁用缓存,请转至 Magento 管理面板 > 系统 > 缓存管理 > 从左侧复选框中选择所有缓存类型 > 选择操作:从右上角下拉列表中禁用 > 单击提交。

Magento 模块的结构

代码池

Magento 包含三种类型的代码池,Magento 的所有自定义模块和核心模块都驻留在其中。

  1. 核心池包含默认情况下随 Magento 安装一起提供的所有核心模块。这些模块由 Magento 开发人员编写。建议不要修改这些模块,因为每当您升级 Magento 安装时,所有核心模块都将被覆盖,并且您的修改将会丢失。
  2. 社区池包含由第三方程序员开发并通过 Magento Connect 安装的所有模块(即自定义模块)。这些模块通常扩展核心模块并提供自己的功能,这些功能通常可以在 Magento 中的任何地方使用。
  3. 本地池包含将用于特定项目但不会在 Magento Connect 中读取的所有自定义模块

因此,我们有两种池选择:社区池或本地池。由于我们正在开发自己的项目,因此我们将使用本地池,尽管使用社区池也没有限制。

结构

Magento 模块由以下组件组成:

  • 包含用于在模板中显示数据的函数。
  • 模型包含模块的业务逻辑。
  • 资源模型包含用于数据库交互的函数。
  • 控制器定义页面布局并阻止文件,并在请求网址时加载。
  • etc包含 XML 格式的配置文件,它告诉 Magento 模块有多少个文件以及模块如何交互。
  • 帮助程序包含用于定义常见业务逻辑(例如图像调整大小、验证)的函数。这些函数可以在 Magento 应用程序的任何地方使用
  • sql包含用于创建、修改或删除 SQL 表的 SQL 脚本。

模块命名

我们需要为我们的模块命名。一般来说,Magento 模块名称由两部分组成:_。为 Magento 模块命名的最佳做法是选择 <namespace></namespace> 作为作者或公司名称,并选择 <module></module>Berdasarkan mekanisme penghalaan ini dan corak URL yang diminta, apl akan memanggil pengawal yang sesuai.

Pengawal kemudian memanggil paparan yang sesuai. 🎜Akhir sekali, fail paparan mengumpul data daripada fail model dan memaparkan data. 🎜Seni Bina Magento MVC🎜 🎜Seni bina MVC Magento menambah beberapa lapisan pada corak MVC, tetapi aliran kawalan asas aplikasi adalah seperti berikut: 🎜 🎜 🎜Terdapat satu titik masuk utama - index.php - dan keseluruhan aplikasi akan dimulakan dari sini. 🎜Pengawal yang sesuai akan dipanggil berdasarkan URL yang diminta. 🎜Pengawal menentukan halaman dan memuatkan fail susun atur untuk halaman tersebut. 🎜Fail susun atur memberitahu pengawal yang menyekat fail untuk digunakan. 🎜Sekat fail mengumpul data daripada fail model dan pembantu dan hantarkannya ke fail templat. 🎜Fail templat menerima data dan memaparkan html. 🎜Pada mulanya, ini mungkin sukar difahami kerana ia mengandungi beberapa lapisan tambahan. Untuk lebih mengenali aliran kawalan, mari bangunkan modul "Hello World" tersuai. 🎜 🎜Sebelum anda mula menggunakan modul🎜
    🎜Saya menganggap anda sudah mempunyai salinan Magento yang berfungsi dengan versi 1.7 atau 1.7+ (jika tidak, versi itu tidak penting pada peringkat ini) 🎜Lumpuhkan caching. Untuk melumpuhkan cache, pergi ke Panel Pentadbiran Magento > Sistem > Pengurusan Cache > Pilih semua jenis cache dari kotak semak kiri > Pilih Tindakan: Lumpuhkan dari menu lungsur kanan atas > Klik Serah.
🎜Struktur modul Magento🎜 🎜Kolam Kod🎜 🎜Magento mengandungi tiga jenis kumpulan kod di mana semua modul tersuai dan teras Magento berada. 🎜 🎜 🎜Kolam Teras mengandungi semua modul teras yang disertakan dengan pemasangan Magento secara lalai. Modul ini ditulis oleh pembangun Magento. Adalah disyorkan untuk tidak mengubah suai modul ini kerana setiap kali anda menaik taraf pemasangan Magento anda, semua modul teras akan ditimpa dan pengubahsuaian anda akan hilang. 🎜Kolam Komuniti mengandungi semua modul (iaitu modul tersuai) yang dibangunkan oleh pengaturcara pihak ketiga dan dipasang melalui Magento Connect. Modul ini biasanya memanjangkan modul teras dan menyediakan kefungsian mereka sendiri, yang biasanya boleh digunakan di mana-mana sahaja di Magento. 🎜Kolam tempatan mengandungi semua modul tersuai yang akan digunakan dalam projek tertentu tetapi tidak akan dibaca dalam Magento Connect 🎜Jadi kami mempunyai dua pilihan kolam: kolam komuniti atau kolam tempatan. Memandangkan kami sedang membangunkan projek kami sendiri, kami akan menggunakan kolam tempatan, walaupun tiada sekatan untuk menggunakan kolam komuniti. 🎜 🎜Struktur🎜 🎜Modul Magento terdiri daripada komponen berikut: 🎜
    🎜 Blok mengandungi fungsi untuk memaparkan data dalam templat. 🎜 Model mengandungi logik perniagaan modul. 🎜 Model Sumber mengandungi fungsi untuk interaksi pangkalan data. 🎜 Pengawal mentakrifkan reka letak halaman dan menyekat fail untuk dimuatkan apabila URL diminta. 🎜 dll Mengandungi fail konfigurasi dalam format XML yang memberitahu Magento berapa banyak fail yang ada untuk modul dan cara modul berinteraksi. 🎜 Pembantu mengandungi fungsi untuk mentakrifkan logik perniagaan biasa (cth. saiz semula imej, pengesahan). Fungsi ini boleh digunakan di mana-mana sahaja dalam aplikasi Magento 🎜 sql Mengandungi skrip SQL untuk mencipta, mengubah suai atau menjatuhkan jadual SQL.
🎜 Penamaan modul🎜 🎜Kami perlu memberi nama modul kami. Secara umumnya, nama modul Magento terdiri daripada dua bahagian: _. Amalan terbaik untuk menamakan modul Magento ialah memilih <namespace></namespace> sebagai nama pengarang atau syarikat dan <module></module> sebagai nama sebenar Nama modul. 🎜

Berikutan konvensyen penamaan ini, saya memberi nama modul kami Chiragdodia_Mymodule. Kami akan merujuk kepada nama ini sepanjang siri ini.

Persediaan dan konfigurasi kod

Mari buat direktori berdasarkan struktur di atas. Pergi ke direktori pemasangan Magento dan navigasi ke app/code/localapp/code/local  并创建如下所示的目录。

为 Magento 开发自定义模块

下一步,我们将通过在 app/etc/modules 目录中创建配置文件 Chiragdodia_Mymodule.xml 来配置并激活我们的模块。 该目录包含所有模块的配置文件。

<?xml version="1.0"?>
<config>
    <modules>
        <Chiragdodia_Mymodule>
        <active>true</active>
        <codePool>local</codePool>
        </Chiragdodia_Mymodule>
    </modules>
</config>

该文件将告诉 Magento 我们模块的位置。在 active 标签中,我们指定了 true 来启用我们的模块。如果到目前为止一切都正确,那么您将在 Magento 管理面板 > 系统 > 配置 > 高级 > 高级 > 禁用模块输出列表中找到您的模块。从这里您可以启用和禁用您的模块。

入门:开发

接下来我们将创建模块配置文件。该文件将告诉 Magento 有关我们模块的所有信息。这包括我们的模块包含多少个文件、什么类型的文件(模型、帮助程序、数据库类)等等。

转到 app/code/local/Chiragdodia/Mymodule/etc  并创建一个 config.xml 将包含以下内容的文件

<?xml version="1.0"?>
<config>
    <modules>
        <Chiragdodia_Mymodule>
            <version>0.1.0</version>    <!-- Version number of your module -->
        </Chiragdodia_Mymodule>
    </modules>
    <frontend>
        <routers>
            <mymodule>
                <use>standard</use>
                <args>
                    <module>Chiragdodia_Mymodule</module>
                    <frontName>mymodule</frontName>
                </args>
            </mymodule>
        </routers>
    </frontend>
</config>

让我们逐行了解每个标签。这里,第一个标签是 <module></module> ,它包含我们模块的名称和版本。在更新模块时版本号非常重要。

<frontend></frontend> 标签将告诉 Magento 有关调度的控制器的信息。在 <frontend></frontend> 标记内,我们定义了 <routers></routers> ,它告诉 Magento 如何通过路由机制访问我们的控制器。

<mymodule></mymodule> 标签中,我们在 <module></module> <frontname></frontname> 中的标签和前端名称。通过使用前端名称,我们可以在前端访问我们的模块,例如 yoursitename.com/index.php/mymodule/index

通过调用 yoursitename.com/index.php/mymoduleyoursitename.com/index.php/mymodule/index Magento 将查找模块控制器的索引操作文件。因此,我们需要创建控制器文件。

转到 app/code/local/Chiragdodia/Mymodule/controllers  并创建文件 IndexController.php  包含以下内容。

请注意,在 Magento 中,每个文件的名称和类名称都区分大小写。在创建文件和类时,请务必小心命名您的作品,这一点非常重要。

<?php
class Chiragdodia_Mymodule_IndexController extends Mage_Core_Controller_Front_Action
{
    public function indexAction()
    {
        echo "Hello tuts+ World";
    }
}

现在打开 URL yoursite.com/index.php/mymodule/index 它将打印 “Hello tuts+ World”。 太棒了 - 我们终于完成了第一个 hello world 模块。

控制器调度

这里我们扩展了类 Mage_Core_Controller_Front_Action ,其中包含在URL路由中使用的所有方法。 Magento 类名反映了类文件的位置。因此,类 Mage_Core_Controller_Front_Action  位于位置 Mage > Core > Controller > Front > Action.php

查看我们的控制器的类名称,即 Chiragdodia_Mymodule_IndexController。 Magento 控制器的命名方式应反映 (<module>tag)_(Action Controllername)(keyword Controller).</module>

  • tag = Chiragdodia_Mymodule(我们已在 config.xml 中定义了此标签) b>
  • 操作 控制器名称 = 索引
  • 操作控制器后跟 Controller 关键字

根据此模式,我们的控制器的名称是 Chiragdodia_Mymodule_IndexController

现在查看遵循以下路由模式的 URL 模式yoursite.com/index.php/frontendname/actionControllername/actionmethod

dan buat direktori seperti yang ditunjukkan di bawah. 🎜
Membangunkan modul tersuai untuk Magento🎜 Seterusnya, kami akan mencipta fail konfigurasi Chiragdodia_Mymodule.xml untuk mengkonfigurasi dan mengaktifkan modul kami. 🎜Direktori ini mengandungi fail konfigurasi untuk semua modul. 🎜
<?php
class Chiragdodia_Mymodule_IndexController extends Mage_Core_Controller_Front_Action
{
    public function indexAction()
    {
        echo "Hello tuts+ World";
    }
    public function testAction()
    {
        echo "test action";
    }
}
🎜Fail ini akan memberitahu Magento lokasi modul kami. Dalam teg active, kami menentukan true untuk mendayakan modul kami. Jika semuanya betul setakat ini, anda akan menemui modul anda dalam senarai 🎜🎜Magento Admin Panel > System > Configuration > Advanced > Advanced > Disable Module Output. Dari sini anda boleh mendayakan dan melumpuhkan modul anda. 🎜

Bermula: Pembangunan

🎜Seterusnya kami akan mencipta fail konfigurasi modul. Fail ini akan memberitahu Magento semua maklumat tentang modul kami. Ini termasuk bilangan fail yang terkandung dalam modul kami, jenis fail (model, pembantu, kelas pangkalan data), dsb. 🎜 🎜Pergi ke app/code/local/Chiragdodia/Mymodule/etc🎜 🎜 dan buat config.xml🎜 🎜Fail akan mengandungi kandungan berikut🎜 rrreee 🎜Mari kita lihat setiap teg baris demi baris. Di sini, teg pertama ialah <module></module>🎜 🎜 yang mengandungi nama dan versi modul kami. Nombor versi adalah sangat penting semasa mengemas kini modul. 🎜 Teg 🎜<frontend></frontend> akan memberitahu maklumat Magento tentang pengawal yang dijadualkan. Di dalam teg <frontend></frontend>, kami mentakrifkan <routers></routers> yang memberitahu Magento cara mengakses pengawal kami melalui mekanisme penghalaan . 🎜 🎜Dalam teg <mymodule></mymodule>, kami takrifkan dalam <module></module>🎜 🎜<frontname></frontname>. Kami boleh mengakses modul kami pada bahagian hadapan dengan menggunakan nama bahagian hadapan, contohnya yoursitename.com/index.php/mymodule/index. 🎜 🎜Dengan memanggil yoursitename.com/index.php/mymodule atau yoursitename.com/index.php/mymodule/index Magento akan Cari fail tindakan indeks untuk pengawal modul. Oleh itu, kita perlu mencipta fail pengawal. 🎜 🎜Pergi ke app/code/local/Chiragdodia/Mymodule/controllers🎜 🎜 dan buat fail IndexController.php Mengandungi kandungan berikut. 🎜 🎜Sila ambil perhatian bahawa dalam Magento, setiap nama fail dan nama kelas adalah sensitif huruf besar-besaran. Apabila membuat fail dan kelas, adalah penting untuk berhati-hati menamakan ciptaan anda. 🎜 rrreee 🎜Sekarang buka URL yoursite.com/index.php/mymodule/index🎜 🎜Ia akan mencetak 🎜"Hello tuts+ World". 🎜Hebat - akhirnya kami menamatkan modul hello world pertama kami. 🎜 🎜Penjadualan Pengawal🎜 🎜Di sini kami melanjutkan kelas 🎜 🎜Mage_Core_Controller_Front_Action🎜 🎜, yang mengandungi semua kaedah yang digunakan dalam penghalaan URL. Nama kelas Magento mencerminkan lokasi fail kelas. Oleh itu, kelas Mage_Core_Controller_Front_Action🎜 🎜 terletak di lokasi Mage > Core > Controller > Front > Action.php🎜 🎜Lihat nama kelas pengawal kami, iaitu Chiragdodia_Mymodule_IndexController. Pengawal Magento hendaklah dinamakan dalam cara yang mencerminkan (<module>tag)_(Action Controllername)(keyword Controller).</module>🎜
  • tag = Chiragdodia_Mymodule (kami telah mentakrifkan teg ini dalam config.xml) 🎜
b>
  • Tindakan Nama Pengawal = indeks
  • Pengawal tindakan diikuti dengan kata kunci Pengawal
  • 🎜Mengikut corak ini, nama pengawal kami ialah Chiragdodia_Mymodule_IndexController🎜 🎜🎜🎜Sekarang lihat corak URL yang mengikuti corak penghalaan yoursite.com/index.php/frontendname/actionControllername/actionmethod🎜
    • 前端名称 = mymodule
    • actionControllername = 索引
    • actionmethodname = 索引

    根据此网址模式,我们模块的网址为 yoursite.com/index.php/mymodule/index/index。您还可以使用 yoursite.com/index.php/mymodule 访问它,因为只要您未指定 actionControlleractionmethod 名称,Magento 就会加载默认情况下的索引控制器和索引操作。

    现在让我们再创建一个操作:testAction 。

    <?php
    class Chiragdodia_Mymodule_IndexController extends Mage_Core_Controller_Front_Action
    {
        public function indexAction()
        {
            echo "Hello tuts+ World";
        }
        public function testAction()
        {
            echo "test action";
        }
    }
    

    我们可以使用 URL yoursite.com/index.php/mymodule/index/test 访问 testAction。 如前所述

    • 前端名称 = mymodule
    • actionControllername = 索引
    • actionmethodname = 测试

    这就是控制器在 Magento 中的工作原理。

    一开始,一次理解所有内容可能很困难,因此我已将所有源代码包含到此模块中,以便您可以在将其用作指南的同时查看它并实现自己的工作。

    下一步是什么?

    在下一部分中,我们将通过创建布局和块文件来填充模块中的一些布局。我们将了解布局文件在 Magento 中如何工作以及块在 Magento 上下文中扮演什么角色。

    在此之前,请创建您自己的模块,并让我知道任何给您带来麻烦的事情。

    Atas ialah kandungan terperinci Membangunkan modul tersuai untuk Magento. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn