如何在Magento2中创建主题(第一部分)
嘿,伙计。你已经积累多少Magento2知识了,有没有想要和大家分享的?我在Magento2中发现了一些有趣的功能。不论你是插件或主题开发人员,你都应该花时间读读这篇文章。因为你将明白更多关于Magento2主题和模版结构的知识。
我把这个教程分成了两个部分。今天的这篇是第一部分,关于主题包中的基础元素。第二部分将展示如何在Magento2中自定义它。
1、主题包中的基础元素
a.Magento2中的主题结构
Magento2的MVC结构比Magento1中更加明了。Magento2模块将添加View元素到模块文件结构里。以Catalog为例:app/code/Magento/Catalog/
注意,View元素和Controller,Model在同一位置。展开View文件夹,你将看到:
你可以看到,这个结构下有3个元素,他们是从 标签移出来的。 文件结构展开以后包含layout, templates, web。例如,frontend有3个基础文件夹:
Layout(布局)文件夹包含所有模块的布局文件(类似于Magento 1.x,布局文件包含在主题文件夹的Layout里)。当然,这些布局的代码有不同的结构。我将在后面具体的部分说明。
Template(模板)文件夹有所有的.phtml文件,和Magento1中一样由php和html代码混合而成,用来渲染成html。
Web文件夹是Magento2中新出现的文件夹,你可以从下图看到它的组成:
不难看出,它里面包含了CSS,JS和Images文件夹。也就是说,在Magento2中,旧的skin文件夹被划分到每个模块中去了,使得模块更加独立。
b.Layout
在Magento2中,每个模块有默认的布局,可以被重写或被另一个布局扩展。
例如:app/code/Magento/Catalog/view/frontend/layout/default.xml
Magento用特别的句柄来分离布局文件。
句柄的声明和之前规则一样catalog_product_view是一个根据模块和控制器动作命名的句柄。定义页面则需要更加具体的声明:catalog_product_view_type_simple_id_128。或者我们可以调用其它句柄。这里是关于Catalog模块布局文件位置的示例:
模块中有两种布局,Base layout和Theme layout。
Base layout是每个模块默认的布局区域。如果不是你自定义的模块,我们是不建议你直接修改这些文件的。
例如:app/design/frontend/Magento/blank/Magento_Checkout/layout/
__app/code/<Namespace>/<Module>|__/view|__/<area>|__/layout|–<layout_file1>.xml|–<layout_file2>.xml
Theme layouts是模块的外部主题,允许通过报告主题文件中对应的<Namespace>_<lModule>来定制默认的主题布局。
例如:app/design/frontend/Magento/blank/Magento_Checkout/layout/
创建一个布局文件要遵循下面的规则:
每个布局文件调用一个句柄,其它被调用; 布局文件的名字就是布局句柄的名字,例如:checkout_cart_index 布局文件在布局文件夹中被调用例如:
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <update handle="page_one_column" /> <referenceContainer name="content"> <!-- ... --> </referenceContainer> </layout>
下面描述布局文件的读取和处理顺序:
如果布局文件属于不同的模块,那么执行的顺序将是:独立模块,相关模块,然后按字母顺序排列; 如果文件属于同一个模块,那么就按文件名字的字母顺序排列。布局系统执行的步骤
读取所有默认布局文件组(base),包括关联的那个; 决定继承和重写文件的顺序; 添加所有被展开的布局,替换掉base中的布局,获取父类布局,替换被子类重写的父类布局。下面是布局进程的模型:
由此看以看出,布局文件是由上自下被重写的,父类主题重写模块中的base主题,子主题(一般是我们定义的主题)重写父类。例如:Module_One模块的布局文件layout_2在重写文件夹中的父类主题parent_theme里被声明。因此,系统会用parent_theme > Module_One > override > layout_2.xml替换掉Module_One > layout_2.xml。
布局/块区域:
和magento1一样,它分为基础的布局区域:
Container(容器):分配页面元素的区域
Block(块):容器中默认Magento块元素所在的区域
下面是一个布局内容示例:
<container name="container.1" label="Container 1" as="container_1" output="1" htmlTag="div" htmlId="container-1" htmlClass="container"> <block class="MagentoModuleBlockClass" name="block.1"> <container name="child.container" label="Child Container" as="child"> <block type="MagentoModuleBlockClass" name="block.2"> </container> <block class="MagentoModuleBlockClass" name="block.3"/> </container> <container name="container.2" as="container_2" htmlTag="div" htmlId="container-2" htmlClass="container"/>
c.新语言风格LESS介绍
在定义主题元素之前,我们需要学习新的语言风格-LESS。在Magento2中这个语言很有趣。由于有一些高级的功能,LESS的添加级别要高于CSS。它被翻译成CSS得益于php中的LESS库。我们仍然允许在源码中添加CSS URL直接使用。
LESS语言的预处理是通过lib/internal/Magento/Css/PreProcesso中的库完成的。在LESS文件中的导入方式是:
file.less
@magento_import “<some_id>”; @import “path/to/dir1/some_file”;@import “path/to/file/file1.less”;@import “path/to/file/file2.less”;
想要了解更多关于LESS语言,你可以访问http://lesscss.org/或者http://less.eten.vn/
默认的LESS库文件结构是:
lib/web/ ├── css/ │ ├── docs/ (Library documentation) │ ├── source/ │ │ ├── lib/ (Library source files) │ │ │ ├── abstract.less │ │ │ ├── actions-toolbar.less │ │ │ ├── breadcrumbs.less │ │ │ ├── buttons.less │ │ │ ├── dropdowns.less │ │ │ ├── forms.less │ │ │ ├── icons.less │ │ │ ├── layout.less │ │ │ ├── lib.less │ │ │ ├── loaders.less │ │ │ ├── messages.less │ │ │ ├── navigation.less │ │ │ ├── pages.less │ │ │ ├── popups.less │ │ │ ├── rating.less │ │ │ ├── resets.less │ │ │ ├── responsive.less │ │ │ ├── sections.less │ │ │ ├── tables.less │ │ │ ├── tooltips.less │ │ │ ├── typography.less │ │ │ ├── utilities.less │ │ │ └── variables.less │ │ └── theme.less │ └── styles.less ├── fonts/ │ └── Blank-Theme-Icons/ (Library custom icons font) ├── images/ │ └── blank-theme-icons.png (Library icons sprite) └── jquery/ (Library javascript files)
d.Mage_page元素
之前Magento版本中的Mage_page元素被Mangento_Theme模块替代了。
现在,准备好学习下一章了吗?那么开始第二部分吧!
360magento提供专业的基于magento系统的电商网站开发服务,如有需求或相关咨询,请与我们联系。
相关知识
Magento2主题 · Magento2实战 · 看云
如何在FastReport VCL中创建交互式图表
如何在Excel中创建动态交互式图表?
如何在 Excel 中创建交互图表
magento2中的PHP编码规范以及代码示例
magento2网站开发(magento2开发教程)
如何在15分钟内成功创建电子商务网站
如何在 Excel 中创建图表
如何在体育教学中渗透德育教育
如何在古代园林建筑中命名亭台楼阁?
网址: 如何在Magento2中创建主题(第一部分) https://www.huajiangbk.com/newsview2113553.html
上一篇: Magento vs WooCo |
下一篇: Magento2实战 · 看云 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039