mirror of
https://github.com/LCTT/TranslateProject.git
synced 2024-12-26 21:30:55 +08:00
72dbbf3959
sources/tech/20191114 Creating Custom Themes in Drupal 8.md
230 lines
8.7 KiB
Markdown
230 lines
8.7 KiB
Markdown
[#]: collector: (lujun9972)
|
||
[#]: translator: ( )
|
||
[#]: reviewer: ( )
|
||
[#]: publisher: ( )
|
||
[#]: url: ( )
|
||
[#]: subject: (Creating Custom Themes in Drupal 8)
|
||
[#]: via: (https://opensourceforu.com/2019/11/creating-custom-themes-in-drupal-8/)
|
||
[#]: author: (Bhanu Prakash Poluparthi https://opensourceforu.com/author/bhanu-poluparthi/)
|
||
|
||
Creating Custom Themes in Drupal 8
|
||
======
|
||
|
||
[![][1]][2]
|
||
|
||
_A theme in a website is a set of files that defines the overall look and the user experience of a website. It usually comprises all the graphical elements such as colours and window decorations that help the user to customise the website. Drupal provides the user with a bunch of basic themes for a website that are very generic. However, these default themes do not suit all types of users. So there is a need to build themes that meet one’s requirements._
|
||
|
||
Creating and customising themes in Drupal 8 is easy because of a modern template engine for PHP named Twig, which is a part of the Symfony 2 framework. Moving from a PHP template to Twig, and from the INI format to YAML, are some of the main changes in Drupal 8 theming. These changes in Drupal 8 have improved the security and inheritance, making theming more distinguished.
|
||
|
||
With reference to Figure 1,
|
||
|
||
* _.info_ provides information about your theme.
|
||
* _html.tpl.php_ displays the basic HTML structure of a single Drupal page.
|
||
* _page.tpl.php_ is the main template that defines the contents on most of the pages.
|
||
* _style.css_ is the CSS file that sets the CSS rules for the template.
|
||
* _node.tpl.php_ defines the contents of the nodes.
|
||
* _block.tpl.php_ defines the contents in the blocks.
|
||
* _comment.tpl.php_ defines the contents in the comments.
|
||
* _Template.php_ is used to hold preprocessors for generating variables before they are merged with the markup inside .tpl.php files.
|
||
* _Theme-settings.php_ is used to modify the entire theme settings form.
|
||
* _.libraries.yml_ defines your libraries (mostly your JS, CSS files).
|
||
* _.breakpoints.yml_ defines the points to fit different screen devices.
|
||
* _.theme_ is the PHP file that stores conditional logic and data preprocessing of the variables before they are merged with markup inside the .html.twig file.
|
||
* _/includes_ is where third-party libraries (like Bootstrap, Foundation, Font Awesome, etc) are put. It is a standard convention to store them in this folder.
|
||
|
||
|
||
|
||
The basic requirement to create a new Drupal theme is to have Drupal localhost installed on your system.
|
||
|
||
![Figure 1: Drupal 7 theme structure \(https://www.drupal.org/docs/7/theming/ overview-of-theme-files\)][3]
|
||
|
||
**Drupal 8 theme structure**
|
||
A custom theme can be made by following the steps mentioned below.
|
||
|
||
_**Step 1: Creating the custom themes folder**_
|
||
Go to the Drupal folder in which you can find a folder named Theme.
|
||
|
||
* Enter the folder ‘theme’.
|
||
* Create a folder ‘custom’.
|
||
* Enter the folder ‘custom’.
|
||
* Create a folder ‘osfy’.
|
||
|
||
|
||
|
||
Start creating your theme files over here. The theme name taken here is osfy.
|
||
|
||
_**Step 2: Creating a YML file**_
|
||
To inform the website about the existence of this theme, we use _.yml_ files. The basic details required in the YML are mentioned below:
|
||
1\. Name
|
||
2\. Description
|
||
3\. Type
|
||
4\. Core
|
||
|
||
```
|
||
name: osfy
|
||
description: My first responsive custom theme.
|
||
type: theme
|
||
package: custom
|
||
base theme: classy
|
||
core: 8.x
|
||
|
||
regions:
|
||
head: head
|
||
header: header
|
||
content: content
|
||
sidebar: sidebar
|
||
footer: Footer
|
||
|
||
Stylesheets-remove:
|
||
-”Remove Stylesheets”
|
||
```
|
||
|
||
We can proceed once the theme appears in the uninstalled section of your website’s _Appearance_ tab.
|
||
Open the Drupal website and check for the new theme in the _Appearance_ section. It will be under the uninstalled list of themes in the _Appearance_ tab.
|
||
|
||
**Note:** 1\. Base theme indicates which base theme your custom theme is going to inherit. The default base theme provided by Drupal is ‘Stable’.
|
||
|
||
2\. Regions defines the regions in which your blocks are to be placed in your theme. If not declared, Drupal uses default regions from the core.
|
||
|
||
---
|
||
|
||
_**Step 3: Adding the .libraries.yml file:**_
|
||
We have indicated all the libraries comprising JavaScript and CSS styling, and now we will define them in the _libraries.yml_ file.
|
||
|
||
```
|
||
global-components:
|
||
version: 1.x
|
||
css:
|
||
theme:
|
||
css/style.css: {}
|
||
includes/bootstrap/css/bootstrap.css: {}
|
||
```
|
||
|
||
We will use _style.css_ for the theme styling and bootstrap.css for responsive display using Bootstrap libraries. Style.css resides in the core/css folder, whereas bootstrap.css resides in the _includes/bootstrap/css_ folder.
|
||
|
||
![Figure 2: Drupal 8 theme structure][4]
|
||
|
||
_**Step 4: Creating theme regions**_
|
||
To better understand how Twig has made things easier, use the following code:
|
||
|
||
```
|
||
<?php print render($title_prefix); ?>
|
||
<?php if ($title): ?>
|
||
<h1 class="title" id="page-title">
|
||
<?php print $title; ?>
|
||
</h1>
|
||
<?php endif; ?>
|
||
|
||
{{ title_prefix }}
|
||
{% if title %}
|
||
<h1 class="title" id="page-title">
|
||
{{ title }}
|
||
</h1>
|
||
{% endif %}
|
||
```
|
||
|
||
The template file functions are:
|
||
|
||
_html.html.twig_ – Theme implementation for the basic structure of a single page
|
||
_page.html.twig_ – Theme implementation to display a single page
|
||
_node.html.twig_ – Default theme implementation to display a node
|
||
_region.html.twig_ – Default theme implementation to display a region
|
||
_block.html.twig_ – Default theme implementation to display a block
|
||
_field.html.twig_ – Theme implementation for a field
|
||
|
||
To create the page.html.twig file, give the following commands:
|
||
|
||
```
|
||
/**
|
||
* @file
|
||
* Default theme implementation to display a single page.
|
||
*
|
||
* example code for basic header, footer and content page
|
||
**/
|
||
|
||
<div id="page">
|
||
{% if page.head %}
|
||
<section id="head">
|
||
<div class= "container">
|
||
{{ page.head }}
|
||
</div>
|
||
</section>
|
||
{% endif %}
|
||
<header id="header">
|
||
<div class="container">
|
||
{{ page.header }}
|
||
</div>
|
||
</header>
|
||
<section id="main">
|
||
<div class="container">
|
||
<div class="row">
|
||
<div id="content" class="col-md-10 col-sm-10 col-xs-12">
|
||
{{ page.content }}
|
||
</div>
|
||
{% if page.sidebar %}
|
||
<aside id="sidebar" class="sidebar col-md-2 col-sm-2 col-xs-12">
|
||
{{ page.sidebar}}
|
||
</aside>
|
||
{% endif %}
|
||
</div>
|
||
</div>
|
||
</section>
|
||
{% if page.footer %}
|
||
<footer id="footer">
|
||
<div class="container">
|
||
{{ page.footer }}
|
||
</div>
|
||
</footer>
|
||
{% endif %}
|
||
</div>
|
||
```
|
||
|
||
_**Step 5: Enabling the theme**_
|
||
To place content in the respective regions, in the Manage administrative menu, navigate to _Structure > Block layout > Custom block library (admin/structure/block/block-content)_. Click Add custom block. The Add custom block page appears. Fill in the fields and click on _Save_.
|
||
The block design used here is as in Figure 2.
|
||
|
||
**A few more things to do**
|
||
|
||
* Place a _logo.svg_ file in the theme folder. Drupal will look for it by default and enable the logo for the theme.
|
||
* To show your theme picture in the admin interface next to your theme name, place an image screenshot.png in your theme directory itself.
|
||
* Use your creativity from here onwards to style and customise the appearance of your theme.
|
||
* While writing the code for Twig files, remember to comment all the important information for future reference.
|
||
|
||
|
||
|
||
To make your theme work on your Drupal localhost, go to _/admin/appearance_ where you can find the theme ‘osfy’. Choose the option ‘Set as default’.
|
||
|
||
You can start using your theme from now.
|
||
|
||
![Avatar][5]
|
||
|
||
[Bhanu Prakash Poluparthi][6]
|
||
|
||
The author is an open source enthusiast and has been a part of
|
||
the Drupal organisation since 2017. He was an intern at Google
|
||
Summer of Code 2017 and a mentor at Google Code-In 2018.
|
||
|
||
[![][7]][8]
|
||
|
||
--------------------------------------------------------------------------------
|
||
|
||
via: https://opensourceforu.com/2019/11/creating-custom-themes-in-drupal-8/
|
||
|
||
作者:[Bhanu Prakash Poluparthi][a]
|
||
选题:[lujun9972][b]
|
||
译者:[译者ID](https://github.com/译者ID)
|
||
校对:[校对者ID](https://github.com/校对者ID)
|
||
|
||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||
|
||
[a]: https://opensourceforu.com/author/bhanu-poluparthi/
|
||
[b]: https://github.com/lujun9972
|
||
[1]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/11/d8-1.jpg?resize=696%2C397&ssl=1 (d8)
|
||
[2]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/11/d8-1.jpg?fit=788%2C449&ssl=1
|
||
[3]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/11/Figure-1-Drupal-7-theme-structure.jpg?resize=350%2C308&ssl=1
|
||
[4]: https://i2.wp.com/opensourceforu.com/wp-content/uploads/2019/11/Screenshot-from-2019-11-14-16-13-53.png?resize=350%2C298&ssl=1
|
||
[5]: https://secure.gravatar.com/avatar/a0a27865017dd4456f47f0a9e7d964a6?s=100&r=g
|
||
[6]: https://opensourceforu.com/author/bhanu-poluparthi/
|
||
[7]: https://opensourceforu.com/wp-content/uploads/2019/11/assoc.png
|
||
[8]: https://feedburner.google.com/fb/a/mailverify?uri=LinuxForYou&loc=en_US
|