Create a theme directory
To create the directory for your theme:
- Go to
<your Magento install dir>/app/design/frontend
. - Create a new directory named according to your vendor name:
/app/design/frontend/<Vendor>
. - Under the vendor directory, create a directory named according to your theme.
app/design/frontend/ ├── <Vendor>/ │ │ ├──...<theme>/ │ │ │ ├── ... │ │ │ ├── ...
The folder name conventionally matches naming used in the theme’s code: any alphanumeric set of characters, as the vendor sees fit, is acceptable. This convention is merely a recommendation, so nothing prevents naming this directory in another way.
Declare your theme
After you create a directory for your theme, you must create theme.xml
containing at least the theme name and the parent theme name (if the theme inherits from one). Optionally you can specify where the theme preview image is stored.
- Add or copy from an existing
theme.xml
to your theme directoryapp/design/frontend/<Vendor>/<theme>
- Configure it using the following example:
<theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/theme.xsd">
<title>New theme</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>
Make your theme a Composer package (optional)
composer.json
provides theme dependency information.
Example of a theme composer.json
:
{
"name": "magento/theme-frontend-luma",
"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"
]
}
}
Add registration.php
To register your theme in the system, in your theme directory add a registration.php
file with the following content:
<?php
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
MagentoFrameworkComponentComponentRegistrar::register(
MagentoFrameworkComponentComponentRegistrar::THEME,
'frontend/<Vendor>/<theme>',
__DIR__
);
Where <Vendor>
is your vendor name, <theme>
is the theme code.
Configure images
Product image sizes and other properties used on the storefront are configured in a view.xml
configuration file. It is required for a theme, but is optional if exists in the parent theme.
If the product image sizes of your theme differ from those of the parent theme, or if your theme does not inherit from any theme, addview.xml
using the following steps:
- Log in to your Magento server as a user with permissions to create directories and files in the Magento installation directory. (Typically, this is the the Magento file system owner.)
- Create the
etc
directory in your theme folder - Copy
view.xml
from theetc
directory of an existing theme (for example, from the Blank theme) to your theme’setc
directory. - Configure all storefront product image sizes in
view.xml
. For example, you can make the category grid view product images square by specifying a size of 250 x 250 pixels, here is how the corresponding configuration would look like:
...
<image id="category_page_grid" type="small_image">
<width>250</width>
<height>250</height>
</image>
...
For details about images configuration in view.xml
, see the Configure images properties for a theme topic.
Create directories for static files
Your theme will likely contain several types of static files: styles, fonts, JavaScript and images. Each type should be stored in a separate sub-directory of web
in your theme folder:
app/design/<area>/<Vendor>/<theme>/ ├── web/ │ ├── css/ │ │ ├── source/ │ ├── fonts/ │ ├── images/ │ ├── js/
In the .../<theme>/web/images
you store the general theme related static files. For example, a theme logo is stored in ...<theme>/web/images
. It is likely that your theme will also contain module-specific files, which are stored in the corresponding sub-directories, like .../<theme>/<Namespace_Module>/web/css
and similar. Managing the module-specific theme files is discussed in the following sections of this Guide.
Your theme directory structure now
At this point your theme file structure looks as follows:
app/design/frontend/<Vendor>/ ├── <theme>/ │ ├── etc/ │ │ ├── view.xml │ ├── web/ │ │ ├── images │ │ │ ├── logo.svg │ ├── registration.php │ ├── theme.xml │ ├── composer.json