Theming Magento 2 Core Principles
Theming Magento 2 Core Priciples#
Resources#
Magento Frontend Developer Guide
Configuration#
- Usually in
System -> Stores
Cache to disable: (System -> Cache Management
)
* config
* layout
* blocks_html
* full page cache
Increase admin session lifetime: Stores -> Config -> Advanced -> Admin -> Security Panel
Set Wysiwyg editor on/off: Stores -> Config -> General -> Content Management -> Wysiwyg
Enable Demo store notice: Stores -> Config -> General -> Design -> HTML Head
Important the complexity in theming must be balanced between the ability to share between multiple storefronts
Theme#
Consistent look and feel Used to override module layouts and templates
Themes control:
- Visual aspects: fonts, css, js, images
- Functional aspects: blocks, templates and data shown in blocks
File Structure#
app/code
- Magento and third-party program codeapp/design
- Design for magento storefrontsapp/etc
- Base configapp/i18n
- Config for language filespub/
- Static files (should not be modified manually)pub/media
- All uploaded mediapub/static
- Theme specific CSS, JS, fonts and imagesvar
- Temporary items: reports, cache, sessions and import/export files
Changes:
- Composer support
- Magento UI library
- Less compilation
- theme.xml
Easier to upgrade, better modularity, better organisation and improved security
Theme folder#
app/design/frontend/<Vendor>/<theme>
Contents of theme dir:
<Vendor>_<Module>/
web/
css/
source/
layout/
override/
templates
etc/
-etc
is mandatory when theme does not have a parenti18n/
media/
web/
- theme specific js, styles (.less) and image filescss/
source/
fonts/
images/
js/
composer.jso
registration.php
- declares the theme as a system componenttheme.xml
- file used to recognise the theme
Magento 2 theme is in a single directory, instead of skin
and app/design
composer.json
integrate with composer as an optional step. More info on composer integration in magento 2
Admin
theme can also be edited with themes, not just frontend
Configuration#
- Websites - can have different themes of share a theme
Applying a theme Stores -> Configuration -> Design -> Design Theme Select
Inheritance#
You can extend an existing
Can add minor customisations for holiday designs
Static files also have a fallback but only when compile pub directory with the command line tool
Only override files that require changes
Inheritance logic: searches current directory, ancestor themes, module view files then library
Slight differences between countries. Retail outlets similar but less flashy than the main store.
If themes share a lot of things, it may be best to create a base theme.
Overriding files#
Create a file of the same name and in the relevant location
Don’t ever change core themes as changes will not be lost during an upgrade Enables easy identification of customised files
RWD#
Responsive web design
Theme Creation#
Creating custom themes#
- Create vendor directory:
app/design/frontend/MyVendor
- Create a custom theme:
app/design/frontend/MyVendor/my_theme
- Declare parent theme in
theme.xml
, createregistration.php
- Make new directories and customisations here (
i18n
,layout
,templates
,media
,web
)
NB! Never edit files directly in:
app/code/Magento
app/design/frontend/Magento
lib
File types#
Static - files used by browser to render page (fonts, CSS, JS, images) Dynamic - files used to generate HTML (less files, templates, layouts)
Deployment#
Static files#
Developer mode: generates on demand default/production: static files are not generated or cached
Modes#
Default mode#
- Errors logged to file reports
- Static view files created by request (if not in cache)
Developer mode#
- Slowest mode
- static files are not cache and are written to pub.static each time
- exceptions displayed in browser
- system logging in
var/report
is verbose
ensure to flush cache and disable
Production mode#
- Static view files are deployed once
- Errors are never displayed to user
Static asset deployment#
bin/magento setup:static-content:deploy
or delete <mage dir>/pub/static