Magento2模板主题创建手册

最近有点忙,耽搁了,我会继续翻译一些基础类的开发教程给大家.


对主题的管理和设置在Magento 2中有很多改进。在Magento 1.9中引入theme.xml定义文件,以及一个新的回退系统(fallback system),是其中两个最重要的改进。Magento 2的回退系统以类似的方式工作(Magento 1. x),但是有一个额外的优势,你可以选择无限的父主题来继承/回退.
假设你想要根据新的Magento “Blank”主题创建一个全新的主题。首先, 你需要创建文件夹于 app/design/frontend , 例如 magentochina/default.然后需要在这个文件夹创建文件 theme.xml,该文件可以直接从
app/design/frontend/Magento/blank/theme.xml 复制过来,然后重命名称为你的主题,并选择父级主题。本文中中我们选择Magento默认的blank主题为父级主题.


##Magento2模板主题创建手册

  • 创建主题文件夹 Creating a Magento theme folder
  • 声明主题 Declare your theme
  • Composer包 Composer package
  • 注册文件 registration.php file
  • 创建静态文件夹及文件 Creating static files, folders
  • 配置产品目录图片 Configure catalog product images
  • 声明主题Logo Declare Theme Logo
  • 基本布局元素 Basic layout elements
  • 布局文件类型和约定 Layout files types and conventions.

你的 theme.xml 文件内容看起来会是这样:

<theme xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:noNamespaceSchemaLocation=”../../../../lib/internal/
Magento/Framework/Config/etc/theme.xsd”>
<title>Magentochina Default</title> <!-- 创建的主题名-->
  <parent>Magento/blank</parent> <!--继承的父级主题-->
</theme>

##主题结构
###主题文件夹结构

app/design/frontend/magentochina/
├── default/
│   ├── etc/
│   │   ├── view.xml
│   ├── web/
│   │   ├── images
│   │   │   ├── logo.svg
│   ├── registration.php
│   ├── theme.xml
│   ├── composer.json
  • 名应为开发商名
  • 名为主题名

一个最基本的模板文件夹结构会如文上所示.
我们了解了最基础的知识,让我们开始创建主题吧.let’s go.
##创建Magento2主题文件夹
首先我们创建文件夹
切换目录到 app/design/frontend
创建开发商文件夹 app/design/frontend/ 例如: app/design/frontend/magentochina
创建主题文件夹 app/design/frontend// 例如: app/design/frontend/magentochina/default

app/design/frontend/
 ├── magentochina/
 │   │   ├──...default/
 │   │   │   ├── ...
 │   │   │   ├── ...

##声明主题
当我们创建好 app/design/frontend/magentochina/default 主题之后,在该文件夹下再创建 theme.xml文件定义主题的基本信息,例如名字,父级主题及演示图片等.

<theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/theme.xsd">
 <title>Magentochina default</title> <!-- your theme's name -->
 <parent>Magento/blank</parent> <!-- the parent theme, in case your theme inherits from an existing theme -->
 <media>
     <preview_image>media/preview.jpg</preview_image> <!-- the path to your theme's preview image -->
 </media>
 </theme>

##Composer包
Composer是PHP依赖管理的一种工具。它允许您声明项目依赖的库,并且为您管理(安装/更新)。
要将您的主题作为一个包分发,在主题目录中添加一个 composer.json 文件并打包在服务器上注册这个包。
composer.json 文件演示:

{
"name": "magentochina/default",
"description": "N/A",
"require": {
    "php": "~5.5.0|~5.6.0|~7.0.0",
    "magento/theme-frontend-blank": "100.0.*",
    "magento/framework": "100.0.*"
},
"type": "magento2-theme",
"version": "100.0.1",
"license": [
    "OSL-3.0",
    "AFL-3.0"
],
"autoload": {
    "files": [
        "registration.php"
    ]
}
}

##主题注册文件registration.php
您可以添加以下内容来将主题注册到Magento 2

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::THEME,
'frontend/magentochina/default',
__DIR__
);

你需要更改magentochina为你的开发商名,default为你的主题名.
##创建Magento2 主题的静态文件及文件夹
在设计中有许多静态文件,如javascript、css、图像和字体。它们存储在主题包 web 的单独文件夹中。
这是文件结构

app/design/<area>/magentochina/default/
├── web/
│ ├── css/
│ │ ├── source/ 
│ ├── fonts/
│ ├── images/
│ ├── js/

注意
在Magento 2开发主题或扩展,当你更新任何文件再 app/design//magentochina/default/ 文件夹之下时,你必须重建静态文件夹于 pub/staticvar/view_preprocessed,否则你仍然没有变化。
##配置目录产品图片
正如您在上面提到的主题结构中所看到的,有一个名为 etc/view.xml 的文件。这是配置文件。Magento主题必须需要这个文件,但如果这个文件存在于父主题,则是可选的。
我们到 app/design//magentochina/default/ 文件夹下创建 etc/view.xml 文件,当然你可以可以直接从父级主题Blank下 app/design/frontend/Magento/blank/etc/view.xml 复制该文件过来.
好的,让我们来更新一下产品目录的图片配置。

<image id="category_page_grid" type="small_image">
  <width>250</width>
  <height>250</height>
</image>

在view.xml文件中,图片属性在元素范围内配置:

<images module="Magento_Catalog">
    ...
<images/>

图片属性是为每个图片类型配置的,该类型由 **< Image>**元素的 id和类型属性定义。

<images module="Magento_Catalog">
<image id="unique_image_id" type="image_type">
<width>100</width> <!-- Image width in px --> 
    <height>100</height> <!-- Image height in px -->
</image>
<images/>

##定义主题Logo
Magento 2主题默认使用<theme_dir>/web/images/logo.svg作为logo,当你需要更改该Logo的图片类型和大小时,就需要单独配置.

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
    <referenceBlock name="logo">
        <arguments>
            <argument name="logo_file" xsi:type="string">images/custom_logo.png</argument>
            <argument name="logo_img_width" xsi:type="number">300</argument> 
            <argument name="logo_img_height" xsi:type="number">300</argument>
        </arguments>
    </referenceBlock>
</body>
</page>

##基本布局元素
Magento页面设计的基本组件是块和容器。
容器的存在是为了将内容结构分配到页面的唯一目的。除了包含元素的内容外,容器没有其他内容。容器的例子包括头、左列、主列和页脚。

##布局文件类型和约定
模块和主题布局文件
以下术语用于区分不同应用程序组件提供的布局:
基本布局:由模块提供的布局文件。传统的位置:

  • 基本布局:由模块提供的布局文件。默认位置:
  • 页面配置和通用布局文件:< module_dir>/view/frontend/layout
  • 页面布局文件:< module_dir>/view/frontend/page_layout
  • 主题布局:由主题提供的布局文件。默认位置:
  • 页面配置和通用布局文件: < theme_dir>/< Namespace>_< Module>/layout
  • 页面布局文件: < theme_dir>/< Namespace>< Module>/page_layout
    ##创建主题扩展文件
    在Magento系统中,您只需创建一个扩展的布局文件,其中包含您想要的更改,而不是复制大量的页面布局或页面配置代码,然后修改您想要更改的内容。

添加扩展页配置或通用布局文件:

<theme_dir>
 |__/<Namespace>_<Module>
   |__/layout
     |--<layout1>.xml
     |--<layout2>.xml

例如,自定义布局中定义<Magento_Catalog_module_dir>/view/frontend/layout/catalog_product_view.xml,您需要在定制主题中添加具有相同名称的布局文件,如:

<theme_dir>/Magento_Catalog/layout/catalog_product_view.xml

<theme_dir>
 |__/<Namespace>_<Module>
   |__/page_layout
     |--<layout1>.xml
     |--<layout2>.xml

##覆盖基础布局
如果块有一种方法可以取消原来调用的方法的效果,那么重写并不必要。在这种情况下,您可以通过添加一个布局文件来定制布局,其中将调用canceling方法。

要添加一个覆盖的基本布局文件(要覆盖模块提供的基本布局):在以下位置放置一个具有相同名称的布局文件:

<theme_dir>
  |__/<Namespace_Module>
    |__/layout
      |__/override
         |__/base
           |--<layout1>.xml
           |--<layout2>.xml

这些文件覆盖以下布局:

  • <module_dir>/view/frontend/layout/.xml

  • <module_dir>/view/frontend/layout/.xml
    ##覆盖主题布局
    添加覆盖主题文件(覆盖父主题布局):

    <theme_dir>
    |/<Namespace_Module>
    |
    /layout
    |/override
    |
    /theme
    |/<Parent_Vendor>
    |
    /<parent_theme>
    |–.xml
    |–.xml
    这些文件覆盖以下布局:

  • <parent_theme_dir>/_/layout/.xml

  • <parent_theme_dir>/_/layout/.xml

注意!

更改块名称或别名。块的名称不应该更改,也不应该更改同一父元素中的块的别名。
改变处理继承。例如,您不应该更改页面类型的父句柄。

恭喜!现在你有了第一个 简单的Magento 2主题。稍后您可以尝试创建一个复杂的主题。
翻译也是非常好的学习方式,希望下列表中还有我们没有翻译,而你又想分享的内容,请发表文章之后,在下面附上地址。
###如果觉得本站翻译得内容对您有帮助,又没有时间帮助翻译回馈社区.请打赏我们,您的支持是我们的动力:

####转载说明:非常欢迎转载,但是必须保证文章的完整性并附上原文地址和翻译原文的地址,保证阅读者不会产生歧义.