Magento版本的MVC

Magento Alan 11年前 (2014-06-25) 4873次浏览 0个评论 扫描二维码

如果您熟悉传统的CakePHP或Symfony这些MVC模型框架的话,可能会了解到通用的MVC称为基于惯例(convention-based)的MVC。在这种MVC框架下,添加现代战争模型或控制器等只需按框架标准创建文件(类),系统可以自动识别。而Magento使用的则是基于配置(configuration-based)的MVC,对于这种情况,除了创建文件(类)外,还需要告诉Magento我们添加了一个新类。
每个Magento模块在etc目录下都有一个config.xml文件,该文件中包含所有的模块配置内容。例如,假设我们想象添加一个包含新模型的新模块,我们需要在配置文件中定义一个节点来告诉Magento到哪里去查找我们的模型,举例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<global>
 
    
 
    <models>
 
        <group_classname>
 
            <class>Namespace_Modulename_Model</class>
 
        <group_classname>
 
    </models>
 
    ...
 
</global>

尽管这看起来有些画蛇添足,但这也留给我们更多的灵活性和更大的操作空间。比如我们想要通过rewrite节点来重写另一个类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<global>
 
    
 
    <models>
 
        <group_classname>
 
            <rewrite>
 
                <modulename>Namespace_Modulename_Model</modulename>
 
            </rewrite>
 
        <group_classname>
 
    </models>
 
    ...
 
</global>

Magento会加载所有的config.xml文件并在运行时合并这些文件,创建一个单独的配置树(configuration tree)。
此外,模块还可带有一个system.xml文件,用于指定Magento后台的配置选项,让终端用户可以用来配置模块的功能,system.xml文件示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<config>
 
    <sections>
 
        <section_name translate="label">
 
            <label>Section Description</label>
 
            <tab>general</tab>
 
            <frontend_type>text</frontend_type>
 
            <sort_order>1000</sort_order>
 
            <show_in_default>1</show_in_default>
 
            <show_in_website>1</show_in_website>
 
            <show_in_store>1</show_in_store>
 
            <groups>
 
                <group_name translate="label">
 
                    <label>Demo Of Config Fields</label>
 
                    <frontend_type>text</frontend_type>
 
                    <sort_order>1</sort_order>
 
                    <show_in_default>1</show_in_default>
 
                    <show_in_website>1</show_in_website>
 
                    <show_in_store>1</show_in_store>
 
                    <fields>
 
                        <field_name translate="label comment">
 
                            <label>Enabled</label>
 
                            <comment>
 
                                <![CDATA[Comments can contain
 
                                <strong>HTML</strong>]]>
 
                            </comment>
 
                            <frontend_type>select</frontend_type>
 
                            <source_model>adminhtml/system_config_source_yesno</
 
                            source_model>
 
                            <sort_order>10</sort_order>
 
                            <show_in_default>1</show_in_default>
 
                            <show_in_website>1</show_in_website>
 
                            <show_in_store>1</show_in_store>
 
                        </field_name>
 
                    </fields>
 
                </group_name>
 
            </groups>
 
        </section_name>
 
    </sections>
 
</config>

下面让我们来了解各个节点的作用:

  • section_name: 这个随机名称用于确定配置区块(section),在这一节点内我们需指定该配置区块所有的字段(field)和组(group)。
  • group: 顾名思义,group用于对配置选项进行分组,并在一个折叠区块内进行显示。
  • label: 用于定义字段、区块或组所使用的标题或标签。
  • tab: 用于定义在哪个区块显示该标签。
  • frontend_type: 这个节点允许我们指定在自定义选项中使用哪些选项:
    • button
    • checkboxes
    • checkbox
    • date
    • file
    • hidden
    • image
    • label
    • link
    • multiline
    • multiselect
    • password
    • radio
    • radios
    • select
    • submit
    • textarea
    • text
    • time
  • sort_order: 指定字段、组或者区块的位置。
  • source_model: 某些字段如select字段可以从源模型中获取选项,Magento已经提供了在Mage/Adminhtml/Model/System/Config/Source下提供了几个类供使用,例如:
    • YesNo
    • Country
    • Currency
    • AllRegions
    • Category
    • Language

通过使用XML文件,我们可以在Magento后台中为我们的模块创建复杂的配置选项,而无需担心要在模板中添加字段或验证数据。Magento还提供了一个全面的表单字段验证模型,只需使用<validate>标签,有如下验证字段:

  • validate-email
  • validate-length
  • validate-url
  • validate-select
  • validate-password

Magento的所有其它部分我们可以继承source_model, frontend_type和validator方法,甚至创建一个新的方法。后面我们会讲解。但现在我们还是先来了解模型、视图、文件布局和控制器的相关概念吧。

喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址