Drupal 8 User Guide
Drupal 8 User Guide
iii
Drupal 8 User Guide
iv
Drupal 8 User Guide
v
Preface
i.1. Copyright
This guide was written by contributors to the Drupal open-source project. It is copyright
2015-2016 by the individual contributors, and can be used in accordance with the Creative
Commons License, Attribution-ShareAlike 2.0 (CC BY-SA 2.0). Each page in this document (in-
cluding this one) has an Attributions statement at the bottom, listing the people who con-
tributed to writing and editing that page. See also Section A.1, “Guide-Wide Attributions” for
guide-wide editing, translating, and project management information.
The CC BY-SA license (very similar to the GPL) allows anyone to copy, modify, and redistribute
modifications of all or part of this work, as long as the following is complied with:
• You provide appropriate credit (see the license for more information).
• You provide a link to the license.
• You indicate whether changes have been made.
• You distribute your work under the same license as this original.
Attributions
This page was adapted and edited by Jennifer Hodgdon, and Jojy Alphonso at Red Crackle, from
"Documentation copyright and licensing", copyright 2000-2016 by the individual contributors
to the Drupal Community Documentation.
Copyright notice: Copyright 2015-2016 by the individual contributors; see Section i.1, “Copy-
right” for details. Licensed under CC BY-SA 2.0.
This guide assumes that you have already decided you want to learn and use Drupal. If you
need to learn more before deciding, see Section 1.1, “Concept: Drupal as a Content Manage-
ment System”.
Depending on which aspects of Drupal you would like to learn, you will need some back-
ground knowledge to understand this guide: general Internet skills and knowledge are as-
vi
Preface
sumed, and the guide concentrates on how to use the software itself. For instance, the sec-
tions about installing Drupal on a web server assume you can obtain web hosting and fig-
ure out how to transfer files to your chosen web host. Similarly, the sections about content
management assume you can log into a website and fill in a web-based form.
Attributions
i.3. Organization
This user guide contains a series of topics, each of which covers either a task (how to do
something) or a concept (background knowledge, terminology, and the like). Concept topics
have names starting with Concept:, while task topics have names containing verbs, like Edit-
ing Basic Site Information.
The topics are grouped into chapters in a logical order, with concepts and tasks interleaved
so that concepts are presented before related tasks, and tasks build on each other. To take
advantage of this, you are encouraged to read the entire guide in its presented order, pos-
sibly skipping topics that are not of interest or that present information you already know.
Remember to try out the tasks on your own site as you read the guide; most people learn
better by doing rather than reading.
If you prefer, you can also use the index or table of contents to jump straight to a topic that
you’d like to learn about, rather than reading the entire guide. To facilitate this approach,
each topic lists the prerequisite knowledge that you’d need in order to understand it, if any
(with links to the topics that present that knowledge); task topics also list site prerequisites
(things that you would need to have configured or created on your site in order to perform
the task). Also, most topics have sections at the end where you can find related information
and/or tasks for expanded understanding, to continue your learning.
You may also want to refer to the Glossary section as you read — it gives brief definitions
of most of the terminology used in the guide, with links to topics having more detailed ex-
planations.
Attributions
vii
Preface
i.4. Reporting Problems
Goal
Report a problem with this guide, such as:
Steps
1. Make a note of the topic or topics that contain the problem you have found.
2. Log in to Drupal.org (you will need to create a user account if you do not already have
one).
3. Visit the User Guide issues page on Drupal.org.
4. Verify that the problem you found has not already been reported in another issue:
• If there are only a few open issues, scan the Summary column to see if any of their
descriptions match the problem you found. You may also need to read some of the
issues to make sure, which you can do by clicking the links in the Summary column.
• If the open issue list is long, enter either a keyword related to the problem you found
or the title of the topic where the problem occurs in the Search for box, and click Search
to reduce the issue list. Then either scan the summaries or read the issues to see if
they match your problem.
5. If you determine that your problem has not already been reported, click Create a new
issue, and fill in the issue report as follows:
viii
Preface
Attributions
• This guide is organized into topics; see Section i.3, “Organization” for details. Many topics
include a Prerequisite knowledge section, which lists other topics whose content knowledge
is needed in order to understand the topic you are reading. Some background knowledge
that is not covered in the guide is also assumed; see Section i.2, “Audience and Goal” for
details.
• Many task topics list Site prerequisites, which are tasks that you’ll need to have completed
on your site before you’ll be able to do the task in the topic you are reading.
• The specifics of the site prerequisites relate to the scenario used throughout this guide of
building a site for a farmers market (see Section i.6, “Guiding Scenario” for details). You can
adapt the tasks to your own scenario, but you will also need to remember the changes
you made when deciding if your site satisfies the site prerequisites for a task.
• For all task topics after Section 3.4, “Running the Installer”, there is also an implicit prereq-
uisite: you must have installed the content management software on your site, and be
logged in to a user account with sufficient permissions to do the task (such as the user
account created when you installed your site, which automatically has full permissions).
ix
Preface
• If you read all the topics in order, and perform all of the steps in the task topics as you go
(staying logged in), you should have the background knowledge and site prerequisites in
place for each topic as you read it.
Text conventions
The following conventions are used in the text of this guide:
• The URL example.com means the base URL of your website. See the Navigation section
below for more details on how URLs internal to your site are indicated.
• Text you should see in the user interface of your site is shown in italics, such as: Click Save
configuration. This only applies to text in the user interface that comes from the software,
not to text that was entered in a previous topic. For example, in a topic about editing, you
might see this instruction: Click Edit in the row of the About page (Edit would be in italics,
but About would not be, because the About page was created in a previous topic).
• URLs, file names, and newly-introduced terminology are also shown in italics.
• Text that you should type at a shell command line is shown in monospace type, such as:
drush cr
• Within this guide, the word directory is always used to refer to file directories (which some
people prefer to call folders).
Navigation
To do most of the task topics in this guide, you will need to navigate to one or more pages in
the administrative interface of your site. You might see something like this in the instructions
(this will make more sense after you have the base software installed):
Navigation instructions like this assume that you have the core Toolbar module installed,
and this example means that in the menu bar at the top of your site, you would need to click
Manage to expose the menu choices, then click Structure, then :_Taxonomy_, and that at the
end, you would be on a page with URL http://example.com/admin/structure/taxonomy (if your
site base URL is http://example.com).
In the Manage administrative menu, navigate to Configuration > System > Site information
(admin/config/system/site-information).
In this example, after clicking on Manage and Configuration, you would need to find the Sys-
tem section of the page, and within that, click Site information. After that, you’d end up on
http://example.com/admin/config/system/site-information.
x
Preface
One other note: if you are using the standard administrative core Seven theme, many "Add"
buttons in the administrative interface are displayed with + signs on them. For instance, on
admin/content, the Add new content button appears as + Add new content. However, this is
theme-dependent and is not really part of the text on the button (for instance, it would not
necessarily be read by a screen reader), so in this guide, the convention is to not mention
the + sign on the buttons.
Filling in forms
Many of the task topics in this guide include steps where you will fill out a web form. In most
cases, a screen capture image of the form will be included, along with a table of the values
you will need to enter into each form field. For example, you might see a table that starts out
like this, explaining the site information form you would see if you navigated to Configuration
> System > Site information (admin/config/system/site-information):
To use this table, find the field labeled Site name in the form, and enter the name of your site
in this field. An example site name of "Anytown Farmers Market" is suggested in the table,
which relates to the scenario of building a website for a farmers market that you’ll find all
through this guide (see Section i.6, “Guiding Scenario” for details).
Attributions
i.6. Guiding Scenario
When reading this guide, it is helpful to have a website building project in mind. The follow-
ing project scenario provides context and links together the examples in this guide:
You are making a website for a farmers market. The site needs to display information about
the location and hours of the market, and an About page with the history of the market.
xi
Preface
It also needs to list the vendors. Vendors should be able to edit their listings (including a
logo or photo), and post recipes. Site visitors should be able to browse recipes, or locate
recipes using ingredients that they purchased at the market. Some visitors to your site speak
another language, so the main pages and vendor pages need to be translated.
Attributions
xii
Chapter 1. Understanding Drupal
A content management system (CMS) is a software tool that lets users add, publish, edit, or
remove content from a website, using a web browser on a smartphone, tablet, or desktop
computer. Typically, the CMS software is written in a scripting language, and its scripts run
on a computer where a database and a web server are installed. The content and settings
for the website are usually stored in a database, and for each page request that comes to
the web server, the scripts combine information from the database and assets (JavaScript
files, CSS files, image files, etc. that are part of the CMS or have been uploaded) to build the
pages of the website.
The combination of the operating system that the CMS runs on, the scripting language it is
written in, the database it stores its information in, and the web server that runs the scripts to
retrieve information and return it to the site visitor’s web browser is known as the stack that
the CMS runs on; the commonly used combination of the Linux operating system, Apache
web server, MySQL database, and PHP scripting language is known as the LAMP stack.
What is Drupal?
Drupal is a flexible CMS based on the LAMP stack, with a modular design allowing features
to be added and removed by installing and uninstalling modules, and allowing the entire
look and feel of the website to be changed by installing and uninstalling themes. The base
Drupal download, known as Drupal Core, contains the PHP scripts needed to run the basic
CMS functionality, several optional modules and themes, and many JavaScript, CSS, and im-
age assets. Many additional modules and themes can be downloaded from the Drupal.org
website.
Other operating systems, web servers, and databases can also be made to work; however,
the scripts that the software uses are written in PHP, so that cannot be changed.
1
Understanding Drupal
When building a website, you have your choice of using one of the many existing CMS pack-
ages and hosted services, developing your own CMS, or building the site without using a
CMS. Here are some of the reasons you might choose to use Drupal:
• Building a small, simple site with static HTML pages is not difficult, and you can get a simple
site up very quickly. Setting up a site in a CMS generally requires more time initially, but
brings you the benefits of on-line editing (easier for less experienced content maintainers),
uniformity (harder to maintain using static HTML for larger sites), and the possibility of
more complex features requiring a database.
• Some CMS software is special-purpose; for instance, there are packages and hosted ser-
vices that you can use to build a blog or a club membership website. Drupal, in contrast,
is a general-purpose CMS. If you are building a special-purpose site, you might choose to
use a special-purpose CMS; however, if your site falls even slightly outside the intended
purpose, you will probably be better off using a general-purpose CMS rather than trying
to adapt a special-purpose CMS.
• Building your own CMS-type software can seem attractive. However, using a general-pur-
pose CMS like Drupal as a starting point is usually a better idea, because the basic CMS
functionality (such as user accounts and content management) has thousands of devel-
oper hours behind it, including many years of user testing, bug fixing, and security hard-
ening.
• Some CMS software packages are expensive to purchase a license for. Some are free or
have a free version, but have restrictive licenses that do not allow you to make modifica-
tions and extensions. You might prefer to use a package (like Drupal) that has a less re-
strictive software license, and is developed by a world-wide community. See Section 1.6,
“Concept: The Drupal Project” for more on this topic.
Related topics
Additional resources
2
Understanding Drupal
Attributions
Written and edited by Kristof van Tomme at Pronovix, Jennifer Hodgdon, and Michael Lenahan
at erdfisch.
1.2. Concept: Modules
Prerequisite knowledge
What is a module?
A module is a set of PHP, JavaScript, and/or CSS files that extends site features and adds
functionality. You can turn the features and functionality on by installing the module, and
you can turn it off by uninstalling the module; before uninstalling, you may need to remove
data and configuration related to the feature or functionality. Each module that is installed
adds to the time needed to generate pages on your site, so it is a good idea to uninstall
modules that are not needed.
You can download additional contributed modules from the Drupal.org Module Downloads, or
create your own custom modules.
Related topics
3
Understanding Drupal
Additional resources
Drupal.org community documentation page "Module developer’s guide"
Attributions
1.3. Concept: Themes
Prerequisite knowledge
Section 1.1, “Concept: Drupal as a Content Management System”
What is a Theme?
A theme is a set of files that define the visual look and feel of your site. The core software
and modules that run on your site determine which content (including HTML text and other
data stored in the database, uploaded images, and any other asset files) is displayed on the
pages of your site. The theme determines the HTML markup and CSS styling that wraps the
content.
The core software provides several basic themes with the core distribution. These themes
have largely been designed and built by the community over the last several years and will
all be good choices for building your first sites and becoming more familiar with how the
core software works.
Drupal is a well-established CMS so the market for 3rd party themes - both free and paid
- is very robust.
If none of the 3rd party options suit your needs, you’ll need to create a custom theme. A
custom theme can be as simple as a single CSS file that adds styling to the markup provided
by the core software. Guidance for creating custom themes in Drupal 8 can be found in the
Drupal.org community documentation page "Theming Drupal".
Related topics
• Section 11.4, “Finding Themes”
• Section 11.5, “Downloading and Installing a Theme from Drupal.org”
• Section 1.2, “Concept: Modules”
Additional resources
Drupal.org community documentation page "Theming Drupal"
4
Understanding Drupal
Attributions
1.4. Concept: Distributions
Prerequisite knowledge
• Section 1.1, “Concept: Drupal as a Content Management System”
• Section 1.2, “Concept: Modules”
• Section 1.3, “Concept: Themes”
Full-featured Distributions
A full-featured distribution is a project that provides a complete solution to set up a site
for a specialized purpose such as academic, business, government, nonprofit, publish-
ing, social, etc. For example, you could use an existing distribution for farmers markets
to build your own website, or you could share your set-up for the farmers market site
as a distribution for others to use.
Other Distributions
Distributions can also be quick-start tools that developers and site builders can use as
a starting point.
Related topics
Section 14.1, “Connecting with the Community”
Additional resources
Drupal.org Drupal Distribution Downloads
Attributions
Adapted and edited by Diána Lakatos and Antje Lorch, from "Distributions" and "Download
& Extend — Distributions" copyright 2000-2016 by the individual contributors to the Drupal
Community Documentation.
5
Understanding Drupal
The data and information on your site is divided up into four types, which are edited, trans-
lated, and stored differently. These four types are:
Content
Information (text, images, etc.) meant to be displayed to site visitors. This type of infor-
mation tends to be relatively permanent, but can normally be edited.
Configuration
Information about your site that is not content, but is also relatively permanent, and is
used to define how your site behaves or is displayed. It is sometimes also displayed to
site visitors, but tends to be smaller pieces of text (like field labels, the name of your site,
etc.) rather than larger chunks that you’d normally think of as Content.
State
Information of a temporary nature about the current state of your site, such as the time
when cron jobs were last run.
Session
Information about individual site visitors' interactions with the site, such as whether they
are logged in and their cookies. This is technically a subtype of State information, since
it is also temporary.
Related topics
Attributions
Adapted by Jennifer Hodgdon from "Overview of Configuration (vs. other types of information)",
copyright 2000-2016 by the individual contributors to the Drupal Community Documentation
Prerequisite knowledge
6
Understanding Drupal
The community encompasses many smaller groups who perform many different tasks such
as developing a particular piece of Drupal-related software, writing documentation, main-
taining the security of Drupal software, translating Drupal software into a particular lan-
guage, using Drupal for some specific purpose, and coming together to meet in person
within a particular geographical area.
For more on how you can connect to and communicate with the world-wide community, see
Section 14.1, “Connecting with the Community” and Section 14.2, “Getting Support”.
Related topics
• Section 1.7, “Concept: Drupal Licensing”
• Section 13.3, “Concept: Security and Regular Updates”
• Section 14.1, “Connecting with the Community”
• Section 14.2, “Getting Support”
Additional resources
• Drupal project governance
7
Understanding Drupal
Attributions
Prerequisite knowledge
Section 1.1, “Concept: Drupal as a Content Management System”
• All files (PHP, JavaScript, images, Flash, etc.) that are part of a project on Drupal.org have
to be under GPL version 2 or later.
• All Drupal contributors retain copyright on their code, but agree to release it under the
same license as Drupal.
• Drupal modules and themes are a derivative work of Drupal. If you distribute them, you
must do so under the terms of GPL version 2 or later.
• All content on Drupal.org itself is copyrighted by its original contributors, and is licensed
under the Creative Commons Attribution-ShareAlike license 2.0.
• Sample code on Drupal.org is also available under GPL version 2 or later.
Related topics
Section 14.1, “Connecting with the Community”
Additional resources
• Drupal.org page on "Licensing"
• "Drupal 8 LICENSE.txt" page on api.drupal.org
• GNU General Public License, version 2
• GNU General Public License, version 3
8
Understanding Drupal
Attributions
Adapted by Diána Lakatos at Pronovix from "Licensing" copyright 2000-2016 by the individual
contributors to the Drupal Community Documentation.
9
Chapter 2. Planning Your Site
What is a region?
Besides its primary content, a web page contains other content such as site branding (site
name, slogan, and logo), navigation aids (menus, links, and icons), formatted text, and im-
ages. Each theme provides a set of named regions, such as Header, Content, and Sidebar,
where site builders may choose to place their content.
The available regions depend on the theme design. Only the Content region, which contains
the primary content, is required; others are optional. The core Bartik theme provides the
eighteen regions highlighted in the following image.
Related topics
• Section 8.1, “Concept: Blocks”
10
Planning Your Site
Additional resources
Attributions
Goal
Plan the navigation and layout of the site, for both mobile and desktop browsers.
Prerequisite knowledge
Steps
It is a good idea to plan the site layout before you start building the site and writing content;
however, your plan may need to be revised either before you start implementing it or after
you have some of the site built with draft content in place, based on budgetary concerns or
stakeholder feedback.
1. Make a list of the information that your site should present to visitors. In the farmers
market scenario, this might include:
• Location of the market, with directions and a map
• Hours and days the market is open
• History of the market
• List of vendors
• Details about each vendor
• Searchable list of recipes
• Details about each recipe
11
Planning Your Site
In making these page layout plans, you might find that you need to revise your plan for
which information should be on which pages. For example, you might decide that the
address, hours, and recently-added recipes list would all fit well in the right sidebar area
of all pages, when the site is viewed on desktop-sized browsers. On the other hand, you
might decide that for mobile browsers, you would instead put the address and hours
in a short format at the top of each page, but only display the recent recipe list at the
bottom of the home page.
Attributions
12
Planning Your Site
Content entities are grouped into entity types, which have different purposes and are dis-
played in very different ways on the site. Most entity types are also divided into entity sub-
types, which are divisions within an entity type to allow for smaller variations in how the en-
tities are used and displayed. Here is a table of some common content entity types:
13
Planning Your Site
What is a field?
Within entity items, the data is stored in individual fields, each of which holds one type of
data, such as formatted or plain text, images or other files, or dates. Field types can be
defined by the core software or by modules.
Fields can be added by an administrator on entity sub-types, so that all entity items of a
given entity sub-type have the same collection of fields available. For example, the Vendor
content type in the farmers market example might have fields for the vendor name, a logo
image, website URL, and description, whereas the Basic page content type might only have
fields for the title and page body. When you create or edit entity items, you are specifying
the values for the fields on the entity item.
Related topics
• Section 2.5, “Planning your Content Structure”
• Section 5.2, “Creating a Content Item”
• Section 6.1, “Adding a Content Type”
• Section 6.5, “Concept: Taxonomy”
• Section 7.1, “Concept: Users, Roles, and Permissions”
• Section 8.1, “Concept: Blocks”
14
Planning Your Site
Attributions
Smaller sections of pages can also be generated as composites. For instance, recipe con-
tent items could have a field that keeps track of which vendor submitted the recipe (see Sec-
tion 6.4, “Concept: Reference Fields”), with the vendor details edited in separate vendor con-
tent items. This would allow you to do the following on your site:
• On each Recipe page, there could be an area that displays some information about the
vendor that submitted the recipe, such as their name and market stall number.
• Each vendor page could have a section that lists the recipes they have submitted.
The key idea is that each piece of information is only edited in one place. When vendor infor-
mation is updated, all recipe pages that display that vendor information are automatically
updated; when a recipe is submitted by a vendor, it is automatically displayed on the vendor
page. The core Views module is the usual way to use modular content to create composite
pages and page sections; see Section 9.1, “Concept: Uses of Views” for more information. Al-
so, view modes are useful for defining different ways to display each content item; see Sec-
tion 6.10, “Concept: View Modes and Formatters” for more information.
Related topics
• Section 2.5, “Planning your Content Structure”
• Section 6.1, “Adding a Content Type”
• Section 6.3, “Adding Basic Fields to a Content Type”
• Section 6.4, “Concept: Reference Fields”
• Section 6.10, “Concept: View Modes and Formatters”
15
Planning Your Site
Attributions
Goal
Make a plan for the content structure of the site (which type and subtype of entity to use for
which content), and which pages will contain listings of content.
Prerequisite knowledge
• Section 2.3, “Concept: Content Entities and Fields”
• Section 2.4, “Concept: Modular Content”
• Section i.6, “Guiding Scenario”
Steps
1. Brainstorm about what content your site needs to contain, which could include content
that visitors would be looking for, as well as content that you want to show to visitors.
The result could be the description in Section i.6, “Guiding Scenario”.
2. For each identified piece of content, decide which content entity type would be the best
fit. In doing this, you’ll need to consider where and how the content will be used and
edited on the site. For example, in the farmers market site scenario, you might want to
display the hours and location of the farmers market on the sidebar of every page. For
that content, a single custom block makes sense. As another example, you might decide
that pages displaying information about each vendor should be content items managed
by the core Node module, because you want vendors to be able to edit their own listings.
The core Node module permission system lets you do this easily.
These decisions do not necessarily always have only one right answer; for instance, you
could decide that vendor pages should be user profiles instead of content items, but if
you did that the content would be tied to a specific user account, and it would not be as
easy to later change the ownership of a vendor page to a different user account.
3. Within each content entity type you identified, decide what division into entity sub-types
would make sense. For example, in the farmers market site example, you would proba-
bly decide that under the Content item entity type, there should be one content type for
basic pages (Home and About), one for vendor pages, and one for recipe pages.
4. For each entity sub-type you decided on, decide what fields are needed. For instance,
the Vendor content type might need fields for the vendor name, web page URL, image,
and description.
16
Planning Your Site
5. Decide on what entity listings are needed, which could be entire pages or smaller areas
on the page. For each listing, you’ll need to determine what entity items should be listed.
Then you’ll need to decide in what order and with what filtering options they should be
displayed; for example, you might want to give the site visitor the option to search by
keyword, to filter the list down to a subset, or to sort the list. You’ll also need to decide
what information from the entity items should be shown, which might result in adding
to the list of fields you determined in the previous step. The farmers market site, for
example, needs to have a Recipes listing page that lists content items of type Recipe,
with the ability to filter by ingredients, so that means that the Recipe content type needs
an Ingredients field.
6. For each identified field on each entity subtype, identify what type of data it should con-
tain (such as plain text, formatted text, a date, an image file, etc.), and how many values
should be allowed. Most fields are single-valued, but for example, a Recipe should allow
for multiple values in its Ingredients field.
7. Consider which fields would be best as references to taxonomy term entities: fields
whose values should be chosen from a list of allowed values. Allowed values that are
expected to change and grow over time, are good candidates. An example is the Ingre-
dients field for the Recipe content type.
8. Consider which fields should reference other content entities. An example is that since
vendors will be submitting recipes, a field will be needed on the Recipe content type that
references the Vendor content item for the vendor who submitted the recipe.
Here’s an example of the resulting content structure for the farmers market scenario exam-
ple site:
17
Planning Your Site
Page or page area Entity type and sub- Filter/sort/pagina- Fields displayed
type tion
Vendors page Vendor content items All vendors, alphabet- Image, vendor name,
ical, paged trimmed body
Recipes page Recipe content items Filter by ingredients, Image, recipe name
alphabetical, paged
Recent recipes side- Recipe content items List 5 most recent Image, recipe name
bar
Related concepts
Section 6.5, “Concept: Taxonomy”
Attributions
Prerequisite knowledge
Section 1.1, “Concept: Drupal as a Content Management System”
Depending on the size and processes of the organization, multiple people in different roles
can be part of the process. For example, content creators collect information and write con-
tent, editors review, edit, ask for changes, and publish the content once it’s considered ready
to be shared with the audience.
In your site, content types can have either a Published or an Unpublished flag to track their
workflow states, that you can set for each content item when saving:
18
Planning Your Site
Most content entity types support revision tracking, if it is enabled by an administrator for
the entity sub-type. If you have revision tracking enabled, the software will store old versions
of the content each time it’s revised, and add notes about what is changed. This allows you
to look at the history and revert to older versions.
Using the Unpublished flag and Revisions, you can build an editorial workflow that lets con-
tent creators and editors work on the live site without displaying the content to visitors.
When the content is ready to be published, all they need to do is save it as Published.
Related topics
• Section 5.2, “Creating a Content Item”
• Section 5.3, “Editing a Content Item”
Additional resources
Talking about online content, organizations would also want to consider post-publication
phases of the editorial workflow: content teams might need to update already published
content. Some organizations might need a more complex workflow with the options to con-
figure which content type goes through the workflow process, set up user roles and permis-
sions, set different workflow states (for example draft, needs review, published).
For more complex workflows, you can add install or more modules from the contributed
Workbench Suite module to your site.
Attributions
19
Chapter 3. Installation
Disk space
A minimum installation requires 15 MB. 60 MB is needed for a website with many contributed
modules and themes installed. Keep in mind you need much more for the database, files
uploaded by the users, media, backups, and other files.
Web server
Apache (Recommended)
Apache is the most commonly used web server. The core software will work on Apache
2.x hosted on UNIX/Linux, OS X, or Windows that have the Apache mod_rewrite module
installed and enabled. The Apache VirtualHost configuration must contain the directive
AllowOverride All to allow the .htaccess file to be used.
Nginx
Nginx is a commonly used web server that focuses on high concurrency, performance
and low memory usage. The core software will work on Nginx 1.1 or greater hosted on
UNIX/Linux, OS X, or Windows. The ngx_http_rewrite_module must be installed and en-
abled.
Hiawatha
Hiawatha is a web server with a strong focus on security. It also aims at being easy to use
and lightweight. Research performed by independent researchers proves that Hiawatha
offers a performance comparable to other web servers under normal conditions, but
much better while under attack. URL Toolkit must be installed and configured to rewrite
URLs.
Microsoft IIS
Microsoft IIS is a web server and set of feature extension modules for use with Microsoft
Windows. The core software will work with IIS 5, IIS 6, or IIS 7 if PHP is configured cor-
rectly. Because clean URLs are required, you may need to use a third party product. For
IIS 7, you can use the Microsoft URL Rewrite module or a third party solution.
Database
• MySQL - 5.5.3 (MariaDB 5.5.20, Percona 5.5.8) or higher with an InnoDB-compatible pri-
mary storage engine
20
Installation
PHP
Additional resources
Attributions
Adapted by Karl Kedrovsky and Brian Emery from "System requirements", copyright 2000-2016
by the individual contributors to the Drupal Community Documentation.
There are several additional tools available that help you create sites faster, more accurately
and with less effort.
Drush
See below for more about Drush.
Git
Git is a version control system you can use to track changes made to files within your
entire site, or files relating only to the module or theme that you are using. Git makes it
possible to try out changes, and if necessary, revert to a previous version. It can be used
as well to track changes in the configuration files and synchronize the configuration of
different sites. Git has become the standard for web development projects.
Composer
See below for more about Composer.
Devel
The contributed Devel module helps with development tasks such as debugging and in-
specting code, analyzing database queries, and generating dummy content.
Drush is a command-line tool for building and maintaining sites, providing an alternative to
using the administrative interface for many operations. Many site builders and maintainers
prefer to use Drush whenever possible, and consider the time spent installing and learning
to use Drush to be a good investment. Reasons to consider using Drush:
21
Installation
• Drush provides a large number of commands for tasks such as installing the base soft-
ware, modules, and themes; updating software; performing database operations, includ-
ing copying and querying; resetting passwords; and clearing the cache. Some contributed
modules and themes also define Drush commands.
• Doing administrative tasks using Drush is typically faster and less tedious than performing
the same tasks through the administrative interface.
• Since Drush is a command-line interface, you can write scripts that combine Drush com-
mands and other commands on the server, to automate more complicated tasks.
• Drush provides additional functionality not available via the administrative interface; for
example, running database queries.
If you want to use Drush, you will need to have command-line terminal access to the server
where your website will be hosted, and you will need to have a compatible version of the
Drush tool installed on that server. Check the Drush website for installation instructions and
version compatibility. There is also documentation on the available Drush commands on
that site.
The core software is a primary user of Composer, because it makes use of several external-
ly-developed software libraries, which must be downloaded and installed in order for the
core software to work. When you install the core software, you either need to download an
archive that contains compatible versions of the external libraries, or you need to run Com-
poser to download the external libraries after the initial download.
Some contributed modules also make use of externally-developed software libraries; for
example, a Facebook integration module might require Facebook’s integration library to be
installed for the module to work, and a geographical module might make use of a standard
library of geographical functions. To install a module with external dependencies, you will
need to run Composer.
Drupal Console
Drupal Console is a command-line tool that generates boilerplate code and interacts with
a Drupal site. It can generate, for example, block or form code, install modules and
themes, and create dummy content. Drupal Console makes use of the Symfony Console.
Coder
Coder is a command-line tool that checks if your modules and themes comply with coding
standards and other best practices. It can also fix coding standard violations.
22
Installation
Related topics
Section 11.9, “Using Composer and Git to Download Files”
Additional resources
• Drupal.org community documentation page "Development tools"
• Drupal.org community documentation page "Using Composer with Drupal"
Attributions
3.3. Preparing to Install
Goal
Choose an appropriate way to install the core software, and handle any required prerequi-
sites.
Prerequisite knowledge
• Section 3.1, “Concept: Server Requirements”
• Section 3.2, “Concept: Additional Tools”
Site prerequisites
If you want to use Drush to install the core software, Drush must be installed. See Section 3.2,
“Concept: Additional Tools”.
Steps
1. Choose a method for installing the core software.
Try a free online demo
Use an online provider to get a demo installation of the core software in 20 minutes
or less. See the Drupal.org page "Try Drupal".
23
Installation
24
Installation
b. Click the Download Drupal button (of the appropriate version) to be taken to the
Downloads page.
25
Installation
Run the installer if you chose web installer to install the core software. See Section 3.4, “Run-
ning the Installer”.
Additional resources
Drush
Attributions
Written and edited by Drew Gorton, Michael Lenahan at erdfisch, Jennifer Hodgdon, and Jojy
Alphonso at Red Crackle.
Goal
Install the core software and create the admin account by running the included installer.
Prerequisite knowledge
Site prerequisites
Steps
1. If you are using a 1-click install from a hosting provider or demo site, you will most like-
ly see some or all of the following screens as part of the installation process. If you up-
loaded the core files manually, to start the installer, open a browser and visit the URL
that you set up for your hosting.
2. Select a language on the first page of the installer; for example, English. You could op-
tionally choose from any of the other listed languages. The language files for the chosen
language will be downloaded and installed so that the rest of the installation process can
be finished in the chosen language. After choosing a language, click Save and continue.
26
Installation
3. Select an installation profile. Installation profiles provide site features and functions for
a specific type of site as a single download containing the core software, contributed
modules, themes, and pre-defined configuration. Core contains two installation profiles.
Select the core Standard installation profile. Click Save and continue.
4. The next step in the installer will verify that your system meets the minimum require-
ments. If it does not, you’ll be presented with an outline of what needs to be corrected
in order to proceed. If it does, the installer will automatically advance to the next step.
5. Provide details of the database you created in the Section 3.3, “Preparing to Install” chap-
ter. Then click Save and continue.
27
Installation
6. The next step will display a progress bar under the heading Installing Drupal. After the
installer has completed, it will automatically advance to the next step.
28
Installation
7. The final step is to configure some basic information about your new site. Note that the
user account you create in this step is the site’s admin account. See Section 7.2, “Concept:
The User 1 Account” for important information about this unique account. You can safely
name this account "admin", and make sure to choose a secure and unique password.
29
Installation
30
Installation
Related concepts
• Section 11.7, “Concept: Development Sites”
• Section 3.2, “Concept: Additional Tools”
Additional resources
Drupal.org community documentation page "Create A Database"
Attributions
Written and edited by Joe Shindelar at Drupalize.Me, and Jojy Alphonso at Red Crackle.
31
Chapter 4. Basic Site Configuration
Content
Lists and manages existing content, and allows creation of new content.
Structure
Contains a list of links for managing structural elements of the site, such as blocks, con-
tent types, menus, and taxonomy.
Appearance
Manages themes and appearance-related settings.
Extend
Manages the installation and uninstallation of modules.
Configuration
Contains links to settings pages for various site features.
People
Manages users, roles, and permissions.
Reports
Contains links to logs, update information, search information, and other information
about the site’s status.
Help
Lists help topics for installed modules that provide them.
The arrow button on the far right side of the second line of the toolbar (or far left side, if the
site is being viewed using a right-to-left-reading language like Arabic) can be used to switch
32
Basic Site Configuration
the menu from appearing horizontally at the top of the page, to a vertical format on the left
side (or right side, in right-to-left languages). When viewed vertically, the menu becomes an
interactive tree.
This guide has a standard way to describe navigation to administrative pages using the ad-
ministrative toolbar. See Section i.5, “Conventions of the Guide” for more information.
33
Basic Site Configuration
Contextual links have to be activated to be visible. If your site’s theme uses the default styling
for contextual links, a pencil icon is used to indicate that contextual links are present and
activated, and if you click the icon, you will see the contextual links. There are two ways to
activate the pencil icons that provide access to the contextual links:
• If you are using a mouse in a browser, the icon will temporarily appear when you hover
over an area that has related contextual links.
• You can click the master pencil icon (or its Edit link) at the right end of the top bar in the
toolbar, which will activate all of the contextual links on the current page. This icon is only
visible on pages with contextual links.
Attributions
Prerequisite knowledge
Section 4.1, “Concept: Administrative Overview”
34
Basic Site Configuration
Steps
1. In the Manage administrative menu, navigate to Configuration > System > Basic site set-
tings (admin/config/system/site-information) to change the Site name, Slogan, administra-
tive Email address, or the Default front page path.
2. Fill in the available fields as appropriate for your site.
3. After editing the fields, click Save configuration to see the changes applied to the site.
1. In the Manage administrative menu, navigate to Configuration > Regional and language
> Regional settings (admin/config/regional/settings).
2. Select the appropriate country from the Default country select list in the Locale section,
and set which day will be displayed as First day of week on your site.
3. In the Time zones section, select the sitewide Default time zone from the list and configure
user-specific time zones.
35
Basic Site Configuration
4. After editing the fields, click Save configuration to see the changes applied to the site.
Additional resources
Attributions
Written and edited by Sree Veturi, Michael Lenahan at erdfisch, and Antje Lorch.
4.3. Installing a Module
Goal
Install a core module, or a contributed module whose files have already been uploaded to
the site, through the administrative interface or using Drush.
Prerequisite knowledge
36
Basic Site Configuration
Site prerequisites
If you want to use Drush to install modules, Drush must be installed. See Section 3.2, “Concept:
Additional Tools”.
Steps
1. In the Manage administrative menu, navigate to Extend (admin/modules). The Extend page
appears showing all the available modules in your site.
2. Check the boxes for the module or modules you want to install. For example, check the
box for the core Activity Tracker module.
Using Drush
1. In the Manage administrative menu, navigate to Extend (admin/modules). The Extend page
appears showing all the available modules in your site.
2. Find the machine name of the module you want to install, by expanding the information
area for the module. For instance, the core Activity Tracker module’s machine name is
tracker.
3. Run the following Drush command to install the module:
drush en tracker
If you do not see the effect of these changes in your site, you might need to clear the cache.
See Section 12.2, “Clearing the Cache”.
Additional resources
Drush
37
Basic Site Configuration
Attributions
Goal
Uninstall the core Search and History modules, as well as the core Activity Tracker module
if you installed it in Section 4.3, “Installing a Module”, to reduce overhead.
Prerequisite knowledge
Site prerequisites
• You must have at least one unused module on your site that you want to uninstall, such
as the core Search module.
• If you want to use Drush to uninstall modules, Drush must be installed. See Section 3.2,
“Concept: Additional Tools”.
Steps
38
Basic Site Configuration
Note
You cannot uninstall a module if it is required by some other module(s) and/or
functionality. For example, the core File module is required by the core Text Edi-
tor, CKEditor, and Image modules. It can’t be uninstalled unless you uninstall its
dependent module(s) and functionality first. A module that cannot be uninstalled
yet will have a disabled checkbox, restricting you from uninstalling it.
3. Step 2 will prompt you to confirm the module uninstall request. Click Uninstall.
Using Drush
1. In the Manage administrative menu, navigate to Extend (admin/modules). The Extend page
appears showing all the available modules in your site.
2. Find the machine name of the module you want to uninstall, by expanding the informa-
tion area for the module. For instance, the core Activity Tracker module’s machine name
is tracker.
3. Run the following Drush command to uninstall the module:
drush pm-uninstall tracker
39
Basic Site Configuration
Attributions
Written and edited by Surendra Mohan, and Jojy Alphonso at Red Crackle.
Goal
Turn off the ability for people to register user accounts on the site. Also, review and/or edit
the email messages generated by the site for events related to user accounts.
Prerequisite knowledge
Steps
1. In the Manage administrative menu, navigate to Configuration > People > Account settings
(admin/config/people/accounts).
2. Under Registration and cancellation, select Administrators only as the people with permis-
sions to register user accounts. You can check Require email verification when a visitor cre-
ates an account in case you want to change the settings for account registration later on.
40
Basic Site Configuration
3. Optionally, change the default email address from which user account notifications from
the farmers market website will be sent. This will help you maintain a separate email
address from the one used for the website in general. For example, this email address
for user account notifications will be useful for a staff member(s) communicating with
vendors.
4. Optionally, edit the email templates in the Emails section to customize automated emails.
There are seven email templates available with the core. They are meant for different
user-specific occasions. All of them can be personalized and three can be disabled via
checkboxes: activation, blocking, and cancellation.
You can send out your own text (for example, welcoming the new vendors for whom
accounts were just created) by editing the the Welcome (new user created by administrator)
template.
41
Basic Site Configuration
Related concepts
See Chapter 7, Managing User Accounts for more information about user accounts and per-
missions.
Additional resources
Security Guide can help you with a more safety-focused approach to configuration.
Attributions
Written and edited by Laura Vass at Pronovix, and Jojy Alphonso at Red Crackle.
Goal
Edit the settings of the default core Bartik theme to change the color scheme and to add
a logo.
42
Basic Site Configuration
Prerequisite knowledge
Steps
3. Under Color scheme, click inside each color build box and type the proper color codes
you would like to add. For example, use the following colors:
Area Color
Header background top #7db84a (green)
Header background bottom #2a3524 (dark green)
Main background #ffffff (white)
Sidebar background #f8bc65 (light orange)
Sidebar borders #e96b3c (orange)
Footer background #2a3524 (dark green)
Title and slogan #ffffff (white)
Text color #000000 (black)
Link color #2a3524 (dark green)
Note: You can also use the color wheel on the right to select colors of your choice. The
web color codes will be added for you.
43
Basic Site Configuration
4. Under Logo image, uncheck Use the logo supplied by the theme.
5. Under Upload logo image, locate a logo file and upload it to your site. Note: You can also
set a universal logo for all themes under Appearance > Settings (admin/appearance/set-
tings). A custom logo for your theme will override the universal logo.
Once you have selected the file you would like to upload, you will see its filename next
to the Choose File or Browse button in your browser.
6. In order to save your changes and see the updated colors and logo on your site, click
Save configuration at the bottom of the page.
Note: Under Color scheme, there is a Preview section that displays a sample of how your
website will look with the new settings.
44
Basic Site Configuration
7. Click Return to site or Home in the toolbar to verify that you have updated the core Bartik
theme settings for your website.
45
Basic Site Configuration
Attributions
Written and edited by Ann Greazel, Amanda Luker at Advomatic, and Jack Haas.
46
Chapter 5. Basic Page Management
What is a URL?
URL is the abbreviation for "Uniform Resource Locator", which is the page’s address on the
web. It is the "name" by which a browser identifies a page to display. In the example "Visit
us at example.com.", example.com is the URL for the home page of your website. Users use
URLs to locate content on the web.
What is a Path?
A path is the unique, last part of the URL for a specific function or piece of content. For
example, for a page whose full URL is http://example.com/node/7, the path is node/7.
Here are some examples of paths you might find in your site:
• node/7
• taxonomy/term/6
• admin/content/comment
• user/login
• user/3
What is an Alias?
The core software has a feature called "URL Alias" that allows you to provide a more under-
standable name to the content. So, if you have an "About Us" page with the path node/7, you
can set up an alias so that your visitors will see it as http://www.example.com/AboutUs. The
core Path module, which supports URL aliasing, provides this functionality.
Related topics
Attributions
Adapted by Diána Lakatos at Pronovix from "URL aliases", and "Understanding Drupal paths"
copyright 2000-2016 by the individual contributors to the Drupal Community Documentation
47
Basic Page Management
Goal
Create and publish a content item that will be used as the home page of the site.
Prerequisite knowledge
Section 5.1, “Concept: Paths, Aliases, and URLs”
Site prerequisites
The Basic page content type must exist. This is created on your site when you install with the
core Standard installation profile.
Steps
1. In the Manage administrative menu, navigate to Content > Add content > Basic page (node/
add/page). The Create Basic page form appears.
2. Click Edit summary.
3. Fill in the fields as shown below.
Open: Sundays, 9 AM to 2
PM, April to September
48
Basic Page Management
By clicking the Source button in the rich text editor toolbar, you can see the HTML source
code of the text that you are editing.
Related concepts
• Section 10.1, “Concept: User Interface, Configuration, and Content translation”
• Section 5.1, “Concept: Paths, Aliases, and URLs”
• Section 5.3, “Editing a Content Item”
Additional resources
Drupal.org community documentation page "About nodes"
49
Basic Page Management
Attributions
Goal
Update the hours on the Home page content item.
Prerequisite knowledge
Section 5.2, “Creating a Content Item”
Site prerequisites
A content item for the Home page must exist. See Section 5.2, “Creating a Content Item”.
Steps
1. In the Manage administrative menu, navigate to Content (admin/content).
2. If the content item you want to edit was updated or created recently, it should appear
near the top of the content list on that page. If not, you can use the Content type, Title,
or other filters to locate the content item.
3. Click Edit in the row of the content item you want to edit (Home), to open the content
editing form. Update the opening hours in the Body field. See Section 5.2, “Creating a
Content Item” for an explanation of the fields and a screenshot.
4. Check Create new revision in the box on the right, if it is not already checked, and enter a
Revision log message explaining what changes you are making (for example, you might
enter "Updated opening hours"). This text will appear in the revision log for the page.
50
Basic Page Management
As an alternative to the first two steps above, you can also reach the content edit form as
follows:
1. Starting from your site’s home page, use the site’s navigation menus to locate the page
where the content you want to edit is displayed to visitors.
2. Most themes will display an Edit link or tab near the top of that page to people with
permission to edit the page; clicking the link will take you to the full content edit form.
3. You could also use the in-place editor (refer to Section 5.4, “Editing with the In-Place Editor”)
from this page.
Attributions
51
Basic Page Management
Prerequisite knowledge
• Section 2.3, “Concept: Content Entities and Fields”
• Section 5.2, “Creating a Content Item”
• Section 5.3, “Editing a Content Item”
• Section 4.1, “Concept: Administrative Overview”
Site prerequisites
The About page you want to edit must exist. See Section 5.2, “Creating a Content Item”.
Steps
Navigate to the About page to edit content with the in-place editor. If the page has not yet
been added to a navigation menu, you can find and open it by following these steps:
Once the content you want to edit is being viewed in your browser, follow these steps to
use the quick editor:
1. Find the section of the page that displays the content you want to edit, and turn on quick
editing mode using the Quick edit contextual link (see Section 4.1, “Concept: Administrative
Overview” for instructions on how to access contextual links). You will see each editable
field on this content item outlined in blue; also, a hovering dialog box will appear.
52
Basic Page Management
2. Click the Body text area to begin editing. The Body field supports a rich text editor. The
editing toolbar will be displayed in a hovering dialog box.
3. Add some information about City Market. A Save button will appear in the hovering dia-
log box, and the field outline will change color.
4. If you are satisfied with your edits, click Save in the hovering dialog box. If not, click "x"
to discard your edits, and confirm. Either way, quick editing mode will be turned off.
Attributions
Site prerequisites
The content item that you want to designate as the front page of your site must exist. See
Section 5.2, “Creating a Content Item”.
Steps
1. In the Manage administrative menu, navigate to Configuration > System > Basic site set-
tings (admin/config/system/site-information).
2. Under Front page, replace /node with the name of the page you would like to make the
home page. To use the home page that was previously created, provide its path /home.
Click Save configuration.
53
Basic Page Management
3. Navigate to the home page to verify that it displays content as configured by you.
Related concepts
Section 5.6, “Concept: Menu”
Attributions
Written and edited by Ann Greazel, Jack Haas, and Jojy Alphonso at Red Crackle.
5.6. Concept: Menu
What is a menu?
Menus are a collection of links (menu items) used to navigate a website. The core Menu
UI module provides an interface to control and customize the menu system. Menus are
54
Basic Page Management
primarily displayed as a hierarchical list of links. By default, new menu items are placed inside
a built-in menu labeled Main navigation, but administrators can also create custom menus.
Main navigation
Links to sections intended for site visitors. They are usually created by site administra-
tors.
Administration
Links to administrative tasks. This menu mainly contains links supplied by modules on
your site.
User account menu
Links to tasks associated with the user account such as My account and Log out.
Footer
Links to important pages within the site intended for the footer. They are usually created
by site administrators.
Tools
Links to tasks necessary for site visitors. Some modules feature their links here.
You can customize menus in the following ways, using the menu administration function-
ality:
A menu item will only be shown to a visitor if they have the rights to view the page it links
to. For example, the admin menu item is not shown to visitors who are not logged in.
Related topics
55
Basic Page Management
Attributions
Written and edited by Ajay Viswambharan, Jojy Alphonso at Red Crackle, and Jennifer Hodgdon.
Goal
Prerequisite knowledge
Site prerequisites
The About page content item must exist. See Section 5.2, “Creating a Content Item”.
Steps
56
Basic Page Management
6. Click Save and keep published to save the changes. Click Home or Return to site in the
navigation bar to see the result, which could look like the picture below.
57
Basic Page Management
Additional resources
Attributions
Adapted by Boris Doesborg from "Working with Menus", copyright 2000-2016 by the individual
contributors to the Drupal Community Documentation; edited by Jack Haas.
Goal
Prerequisite knowledge
Site prerequisites
Home and About pages must exist in the main navigation menu. See Section 5.7, “Adding a
Page to the Navigation”.
58
Basic Page Management
Steps
2. The Edit menu page will display a list of each item in the menu you chose (Main naviga-
tion).
3. Use the cross bar handles to reorder the menu items. Drag the Home menu item above
the About menu item so that it appears first.
4. Click Save.
5. The home page now displays the main navigation with the Home menu item displayed
first.
59
Basic Page Management
Related concepts
Section 5.6, “Concept: Menu”
Attributions
60
Chapter 6. Setting Up Content
Structure
Goal
Prerequisite knowledge
Site prerequisites
You need to have a plan in place for your content structure. See Section 2.5, “Planning your
Content Structure”.
Steps
1. In the Manage administrative menu, navigate to Structure > Content types (admin/struc-
ture/types). The Content types page appears showing all the available types of content.
2. Click Add content type. The Add content type page appears. Fill in the fields as shown below.
61
Setting Up Content Structure
3. In the vertical tab Submission form settings, configure the form that is used for creating
and editing content of this type. Fill in the fields as shown below.
62
Setting Up Content Structure
4. In the vertical tab Publishing options, decide on default options for new content of this
type. Fill in the fields as shown below.
Changing these settings does not affect the content items that have already been cre-
ated.
5. In the vertical tab Display settings, decide if the author and publication date will be visible
in the content item. Fill in the fields as shown below.
63
Setting Up Content Structure
6. In the vertical tab Menu settings, fill in the fields as shown below.
7. Click Save and manage fields to save the content type. The Manage fields page appears
that allows you to add fields to the content type. See Section 6.3, “Adding Basic Fields to
a Content Type”
64
Setting Up Content Structure
8. Follow the same steps to create a content type for recipes. Example values for the fields
in the forms, where they are different from the steps above:
Attributions
Written and edited by Sree Veturi, Boris Doesborg, and Jennifer Hodgdon.
Goal
65
Setting Up Content Structure
Prerequisite knowledge
Site prerequisites
The Article content type must exist. It is created on your site when you install with the core
Standard installation profile.
Steps
1. In the Manage administrative menu, navigate to Structure > Content types (admin/struc-
ture/types). The Content types page appears.
2. Click Delete in the Operations dropdown button for the Article content type.
66
Setting Up Content Structure
4. The Content types page appears with a confirmation message saying that the content
type has been deleted:
Attributions
Goal
Add a link field and an image field to the Vendor content type.
Prerequisite knowledge
67
Setting Up Content Structure
Site prerequisites
The Vendor content type must exist. See Section 6.1, “Adding a Content Type”.
Steps
Add the fields Vendor URL and Main image to the Vendor content type.
1. In the Manage administrative menu, navigate to Structure > Content types (admin/struc-
ture/types). Then click Manage fields in the dropdown button for the Vendor content type.
The Manage fields page appears.
2. Click Add field. The Add field page appears. You can either create a new field for the con-
tent type or re-use an existing field.
3. Fill in the fields as shown below.
A machine name is automatically generated, based on the Label value. Click Edit if you
want to override the default name.
4. Click Save and continue. The page Vendor URL appears which lets you set the allowed
number of values. Fill in the fields as shown below.
5. Click Save field settings. The page Vendor URL settings for Basic page appears which allows
you to configure the field. Fill in the fields as shown below.
68
Setting Up Content Structure
6. Click Save settings. The Vendor URL has been added to the content type. Continue creat-
ing the Main image field.
7. Click Add field. The Add field page appears. Fill in the fields as shown below.
69
Setting Up Content Structure
You can set a default image here. This will be used when you do not provide an image
when creating a Vendor content item.
9. Click Save field settings. The page Main image settings for Basic page appears. Fill in the
fields as shown below.
70
Setting Up Content Structure
10. Click Save settings. Main image has been added to the content type.
11. Add a Main image field to the Recipe content type, using similar steps. Start by navigat-
ing to the Recipe content type’s Manage Fields page in step 1. Then skip to step 7 and
follow the remaining steps, but reuse the existing Main image field you created for the
Vendor content type rather than creating a new field. In subsequent steps, some of the
configuration screens will not be available, because of the field reuse.
12. Create two Vendor content items (see Section 5.2, “Creating a Content Item”) called "Happy
Farm" and "Sweet Honey". Make sure that they include images and URLs.
71
Setting Up Content Structure
Additional resources
Attributions
Prerequisite knowledge
A reference field is a field that represents a relationship between an entity and one or more
other entities, which may belong to the same or different entity type. The three most com-
monly-used reference fields are:
Content reference
A reference to a content item. For example, you might want to connect recipes to the
vendors who submitted them. You would set up a content reference field called Submit-
ted by referencing Vendor content items on the Recipe content type.
Taxonomy term reference
A reference to a taxonomy term. For example, you might want to connect recipes to their
ingredients. You would set up a taxonomy term reference field called Ingredients on the
Recipe content type. This reference field will point to the vocabulary Ingredients.
User reference
A reference to a user account. For example, you might want to connect recipes with their
chefs. You would set up a user reference field called Chefs on the Recipe content type.
Related topics
72
Setting Up Content Structure
Attributions
Written and edited by Surendra Mohan, and Jojy Alphonso at Red Crackle.
6.5. Concept: Taxonomy
Prerequisite knowledge
What is Taxonomy?
Taxonomy is used to classify website content. One common example of taxonomy is the tags
used to classify or categorize posts in a blog website; the farmers market website could use
an ingredients taxonomy to classify recipes. Individual taxonomy items are known as terms
(the blog tags or recipe ingredients in these examples); and a set of terms is known as a
vocabulary (the set of all blog post tags, or the set of all recipe ingredients in these examples).
Technically, taxonomy terms are an entity type and the entity subtypes are the vocabularies.
Like other entities, taxonomy terms can have fields attached; for instance, you could set up
an image field to contain an icon for each term.
An individual vocabulary can organize its terms in a hierarchy, or it could be flat. For exam-
ple, blog tags normally have a flat structure, while a recipe ingredients vocabulary could be
hierarchical (for example, tomatoes could be a sub-term of vegetables, and under tomatoes,
you could have green and red tomatoes).
Taxonomy terms are normally attached as reference fields to other content entities, which
is how you can use them to classify content. When you set up a taxonomy reference field,
you can let users enter terms in two ways:
Free tagging
New terms can be created right on the content editing form.
Fixed list of terms
The list of terms is curated and managed outside the content editing form, and users
can only choose from the existing list when editing content.
Taxonomy reference fields can be added to any entity, such as user accounts, custom blocks,
or regular content items. If you use them to classify regular content items, your site will
automatically be set up with taxonomy listing pages for each term; each of these pages lists
all of the content items that are classified with that term. For example, if you created several
recipes that all had carrots as an ingredient, you might see something like this on the Carrots
taxonomy listing page:
73
Setting Up Content Structure
Related topics
Attributions
Adapted and edited by Surendra Mohan, Jennifer Hodgdon, and Jojy Alphonso at Red Crackle
from "Organizing content with taxonomies" and "About taxonomies", copyright 2000-2016 by
the individual contributors to the Drupal Community Documentation.
6.6. Setting Up a Taxonomy
Goal
Create an Ingredients vocabulary and add it to the Recipe content type as a field that can
contain an unlimited number of values and that allows adding new terms to the vocabulary.
Prerequisite knowledge
Site prerequisites
The Recipe content type must exist. See Section 6.1, “Adding a Content Type”.
74
Setting Up Content Structure
Steps
3. Click Save. You will be taken to the Ingredients page, which shows a list of all the terms
in this vocabulary.
75
Setting Up Content Structure
4. Click Add term. Enter "Butter" in the Name field. Click Save.
76
Setting Up Content Structure
5. You will receive a confirmation about the term you created. Add more terms. For exam-
ple, "Eggs" and "Milk".
6. In the Manage administrative menu, navigate to Structure > Content Types (admin/struc-
ture/types). Click Manage fields for your Recipe content type.
7. Click Add field, and enter values from the table below. Click Save and continue.
8. On the following configuration screen, enter the values from the table below. Click Save
field settings.
9. On the following configuration screen, enter the values from the table below. Click Save
settings.
77
Setting Up Content Structure
10. Click Save settings. You will be taken back to the Manage Fields page. A message will be
displayed saying that the configuration for Ingredients is complete.
78
Setting Up Content Structure
Attributions
Written and edited by Bob Snodgrass, and Jojy Alphonso at Red Crackle.
Goal
Add a reference field so that recipes can be linked to the vendor that has submitted it.
Prerequisite knowledge
• Section 6.3, “Adding Basic Fields to a Content Type”
• Section 6.4, “Concept: Reference Fields”
• Section 6.1, “Adding a Content Type”
Site prerequisites
The Recipe and Vendor content types must exist. See Section 6.1, “Adding a Content Type”.
Steps
1. In the Manage administrative menu, navigate to Structure > Content types (admin/struc-
ture/types). Then click Manage fields in the dropdown button for the Recipe content type.
The Manage fields page appears.
2. Click Add field. The Add field page appears. Fill in the fields as shown below. Click Save
and continue.
79
Setting Up Content Structure
3. The page Submitted by appears which lets you set the allowed number of values. Fill in
the fields as shown below. Click Save field settings.
4. The page Submitted by settings for Recipe appears which allows you to configure the field.
Fill in the fields as shown below. Click Save settings.
80
Setting Up Content Structure
Attributions
Written and edited by Boris Doesborg, and Jojy Alphonso at Red Crackle.
81
Setting Up Content Structure
The data in your site’s content is stored in one or more fields that are attached to the content
type and/or sub-type. When you configure the content editing form for each content sub-
type, you can:
• Select a widget for each field. A widget defines the method used to enter the data for the
field. For example, a taxonomy term can be chosen using an autocomplete field, a select
list, or a tags-style field that lets editors add new tags automatically.
• Configure widget settings. For example, you can choose the size of a plain-text entry field.
• Hide one or more fields from the editing form.
• Reorder the fields.
In principle, you can also have multiple content editing forms available for each content sub-
type. This feature is rarely used, however; the only exception in common use is for the user
profile fields: you can use different forms for user registration and user editing. For example,
you might have a limited set of fields shown when users first register on the site, and more
fields shown later on when they edit their profiles.
Related topics
• Section 6.9, “Changing Content Entry Forms”
• Section 6.10, “Concept: View Modes and Formatters”
Attributions
82
Setting Up Content Structure
Prerequisite knowledge
Site prerequisites
The Recipe content type must exist, and it must have an Ingredients taxonomy term refer-
ence field. See Section 6.1, “Adding a Content Type” and Section 6.6, “Setting Up a Taxonomy”.
Steps
1. In the Manage administrative menu, navigate to Content > Add content > Recipe (node/
add/recipe) to look at the content entry form that is set up by default. Notice how you
have to enter ingredients one by one, instead of having a more compact format.
2. In the Manage administrative menu, navigate to Structure > Content types (admin/struc-
ture/types). Then click Manage form display on the dropdown button for the Recipe con-
tent type. The Manage form display page appears.
3. For the Ingredients field, select Autocomplete (Tags style) in the Widget column.
83
Setting Up Content Structure
4. Click Save.
5. In the Manage administrative menu, navigate to Content > Add content > Recipe (node/
add/recipe) to verify the changed behavior of the content form. The Ingredients field is
now a single text field that accepts multiple values.
84
Setting Up Content Structure
6. Create two Recipe content items (see Section 5.2, “Creating a Content Item”), such as
recipes for "Green Salad" and "Fresh Carrots". Make sure all the fields have values, in-
cluding images, ingredients, and submitted by (set this to one of the Vendor content
items you created in Section 6.3, “Adding Basic Fields to a Content Type”).
Attributions
Prerequisite knowledge
Section 6.1, “Adding a Content Type”
85
Setting Up Content Structure
Every view mode can be configured through the administration pages. To see the configura-
tion options for the view modes of the Recipe content type, navigate in the Manage admin-
istrative menu to Structure > Content types (admin/structure/types) and click Manage display
from the dropdown button. In each view mode, all fields can be hidden or displayed, and if
they are displayed, you can choose and configure the field formatter.
Related topics
• Section 6.1, “Adding a Content Type”
• Section 6.11, “Changing Content Display”
Additional resources
Drupal.org community documentation page "View modes"
Attributions
Adapted by Boris Doesborg from "View modes", copyright 2000-2016 by the individual con-
tributors to the Drupal Community Documentation.
Goal
Make the content items more readable, accessible, and visibly attractive by reordering the
fields, hiding labels, and tuning the output of the fields.
86
Setting Up Content Structure
Prerequisite knowledge
Site prerequisites
The Vendor content type must exist, it must have Main Image and Vendor URL fields, and
your site must have at least one Vendor content item. See Section 6.1, “Adding a Content Type”,
Section 6.3, “Adding Basic Fields to a Content Type”, and Section 5.2, “Creating a Content Item”.
Steps
1. Find and view a Vendor content item you created in Section 6.3, “Adding Basic Fields to a
Content Type”. Notice that there are several things that could be done to improve how
the page looks:
• The Main Image and Vendor URL fields should not have labels.
• The order of the fields should be changed so that the image comes first.
• The image should be smaller.
2. To fix the first two problems, and update some additional settings, in the Manage admin-
istrative menu, navigate to Structure > Content types (admin/structure/types). Then click
Manage display in the dropdown button for the Vendor content type.
3. Under the Label column, select Hidden for Main image. Do the same for Vendor URL.
87
Setting Up Content Structure
4. Click the gear for the Vendor URL field. Clear the Trim link text length setting. Links will
no longer have a trim length. Check the Open link in new window checkbox. Now, when
the link is clicked, it will open in a new browser window. Click Update.
5. Drag the cross arrows next to the field items to reorder as Main image, Body, Vendor
URL, and Links.
88
Setting Up Content Structure
6. Click Save.
7. Find the Vendor content item from step 1 again, and verify that the updates have been
made.
8. Repeat similar steps to manage the display of the Recipe content type fields.
Related concepts
Section 6.12, “Concept: Image Styles”
Additional resources
• Drupal.org community documentation page "Specify how fields are displayed"
• Drupal.org community documentation page "Rearrange the order of fields"
• Drupal.org community documentation page "View modes"
Attributions
89
Setting Up Content Structure
As an example, you might upload a high-resolution image with a 4:3 aspect ratio, and display
it scaled down, square cropped, or black-and-white (or any combination of these effects).
The core software provides a way to do this efficiently:
1. Configure an image style with the desired effects on the Image styles page (admin/con-
fig/media/image-styles).
2. The effects will be applied the first time a particular image is requested in that style.
3. The resulting image is saved.
4. The next time that same style is requested, the saved image is retrieved without the
need to recalculate the effects.
The core software provides several effects that you can use to define styles; others may be
provided by contributed modules.
Visit the Image styles page via the Manage administrative menu, navigate to Configuration
> Media > Image styles (admin/config/media/image-styles) to see the image styles that are de-
fined by default.
Related topics
• Section 6.13, “Setting Up an Image Style”
• Section 6.14, “Concept: Responsive Image Styles”
• Section 6.3, “Adding Basic Fields to a Content Type”
Additional resources
Drupal.org community documentation page "Working with images in Drupal 7 and 8"
Attributions
Adapted and edited by Boris Doesborg, and Jojy Alphonso at Red Crackle, from "Working with
images in Drupal 7 and 8", copyright 2000-2016 by the individual contributors to the Drupal
Community Documentation
Goal
Add an image style and use it to display images on Vendor pages.
90
Setting Up Content Structure
Prerequisite knowledge
Site prerequisites
• Vendor and Recipe content types must exist. See Section 6.1, “Adding a Content Type”.
• Main image fields must exist for both content types. See Section 6.3, “Adding Basic Fields
to a Content Type”.
• Content items must exist for both content types. See Section 6.1, “Adding a Content Type”,
Section 6.3, “Adding Basic Fields to a Content Type”, and Section 5.2, “Creating a Content Item”.
Steps
1. In the Manage administrative menu, navigate to Configuration > Media > Image styles
(admin/config/media/image-styles).
2. Click Add image style.
3. Enter the name Extra medium (300x200)
4. Click Create new style. The page Edit style Extra medium (300x200) appears.
5. In the Effect table, select Scale and crop. Click Add.
6. Fill in the fields as shown below.
7. Click Add effect. The image style is saved with the chosen effects.
91
Setting Up Content Structure
8. In the Manage administrative menu, navigate to Structure > Content types (admin/struc-
ture/types).
9. Click Manage display in the Operations dropdown for the Vendor content type. The Man-
age display page (admin/structure/types/manage/vendor/display) appears.
10. Ensure that the secondary tab Default is selected.
11. Click the cogwheel next to Main image for the configuration options.
12. Fill in the fields as shown below.
92
Setting Up Content Structure
Related concepts
• Section 6.3, “Adding Basic Fields to a Content Type”
• Section 6.12, “Concept: Image Styles”
• Section 6.14, “Concept: Responsive Image Styles”
Additional resources
Drupal.org community documentation page "Working with images in Drupal 7 and 8"
Attributions
Adapted and edited by Boris Doesborg, and Jojy Alphonso at Red Crackle from "Working with
images in Drupal 7 and 8", copyright 2000-2016 by the individual contributors to the Drupal
Community Documentation.
93
Setting Up Content Structure
A responsive image style is a mapping between images styles and breakpoints. Breakpoints
are the points where a responsive design needs to change in order to respond to different
screen sizes. Responsive image styles can only be used if the breakpoints are defined in the
theme.
When a responsive image style is defined, it can be used in the display settings for Image
fields. This allows the site to display responsive images using the HTML5 picture tag.
Related topics
Section 6.3, “Adding Basic Fields to a Content Type”
Additional resources
• Drupal.org community documentation page "Responsive web design"
• Drupal.org community documentation page "Responsive images in Drupal 8"
• Drupal.org community documentation page "Working with breakpoints in Drupal 8"
Attributions
Adapted by Boris Doesborg from Responsive images in Drupal 8, copyright 2000-2016 by the
individual contributors to the Drupal Community Documentation.
The core Filter module provides text format functionality, and the core Standard installation
profile sets up Basic HTML, Restricted HTML, and Full HTML text formats. Each text format
has an associated permission, so that you can allow only trusted users to use permissive
text formats. This restricts untrusted users to text formats like Basic HTML, which filters out
dangerous HTML tags.
94
Setting Up Content Structure
Related topics
Section 13.3, “Concept: Security and Regular Updates”
Additional resources
• Drupal.org community documentation page "Filter module: text formats that filter user input"
• Wikipedia page "Cross-site scripting"
Attributions
Prerequisite knowledge
Section 6.15, “Concept: Text Formats and Editors”
Site prerequisites
• The core Filter, Editor, and CKEditor modules must be installed. They are installed on your
site when you install with the core Standard installation profile.
• The Basic HTML text format must exist. This is created on your site when you install with
the core Standard installation profile.
95
Setting Up Content Structure
Steps
1. In the Manage administrative menu, navigate to Configuration > Content authoring > Text
formats and editors (admin/config/content/formats). The Text formats and editors page ap-
pears.
2. Click Configure for the Basic HTML text format. The Basic HTML page appears.
3. Note that CKEditor is selected in the Text editor field. This allows you to configure the
editor’s toolbar.
4. Drag the horizontal rule button from Available buttons to Tools in Active toolbar. You may
need to click the Show group names link to see the Tools group name.
7. Click Save configuration. You will be taken back to the Text formats and editors page. A
message will be displayed saying that the text format has been updated.
96
Setting Up Content Structure
Attributions
97
Chapter 7. Managing User Accounts
Each user account on your site is automatically given the Authenticated user role, and may
optionally be assigned one or more additional roles. When you assign a role to a user ac-
count, the user will have all the permissions of the role when logged in.
It is a good practice to make several roles on your site. In the farmers market site example,
you might want the following roles:
• A Vendor role that allows vendors to edit their own vendor listing page
• A Content editor role for editing the general farmers market pages
• A User manager role for managing the vendor accounts
• The Administrator role that was installed with your site, for expert users to manage the
site configuration
98
Managing User Accounts
Related topics
• Section 7.3, “Creating a Role”
• Section 7.5, “Assigning Permissions to a Role”
• Section 7.6, “Changing a User’s Roles”
• Section 7.4, “Creating a User Account”
• Section 7.2, “Concept: The User 1 Account”
• Section 7.7, “Assigning Authors to Content”
Additional resources
• Drupal.org community documentation page "Users, roles and permissions"
• Drupal.org community documentation page "Managing Users"
• Drupal.org community documentation page "User Roles"
Attributions
Adapted by Mark LaCroix, Boris Doesborg, and Jennifer Hodgdon from "User Roles", copyright
2000-2016 by the individual contributors to the Drupal Community Documentation.
Prerequisite knowledge
Section 7.1, “Concept: Users, Roles, and Permissions”
Because of this level of permission, some people refer to this account as the root user, sim-
ilar to the "root" user account that has full administrative permissions in Linux and other
operating systems.
It is usually better to make separate accounts for each administrative user, giving them the
Administrator role, rather than having all administrative users log in using the user 1 account.
There are several reasons for this:
99
Managing User Accounts
• Some actions and updates on the site are logged, and if everyone uses the same account,
it is difficult to know who did them if you have questions.
• The Administrator role permissions can be modified to be safer than the full permissions of
the user 1 account, so that people do not inadvertently change site features that shouldn’t
be changed.
• People’s responsibilities on a site may change over time. With ordinary user accounts, this
can be mirrored in permissions by assigning or unassigning roles to their user accounts.
If they are all using the user 1 account, this is more difficult.
• On some sites, the author of content or comments is displayed or tracked, and if everyone
uses the same account to create content, it is difficult to know who created the content.
It is not possible to delete the user 1 account from the administrative user interface. It would
be possible to do with a database query, but it could cause problems in your site and is not
advisable.
Additional resources
Attributions
7.3. Creating a Role
Goal
Create a Vendor role to allow some - but not all - users to perform specific tasks.
Prerequisite knowledge
Steps
100
Managing User Accounts
5. You will see the message "Role Vendor has been added." displayed at the top of the page.
101
Managing User Accounts
Additional resources
Attributions
Adapted and edited by Jack Probst, Boris Doesborg, and Joe Shindelar from "User Roles", copy-
right 2000-2016 by the individual contributors to the Drupal Community Documentation
Goal
Create Vendor user accounts for Sweet Honey and Happy Farm vendors.
Prerequisite knowledge
Site prerequisites
The Vendor role must exist on your site. See Section 7.3, “Creating a Role”.
Steps
102
Managing User Accounts
103
Managing User Accounts
4. Click Create new account. You will get a notification about the user account creation.
5. Create a second Vendor account for Happy Farm by following the steps above.
Attributions
104
Managing User Accounts
Goal
Change the permissions for the Vendor role so that users can create, edit, and delete Recipe
and Vendor content, format the content, and contact each other.
Prerequisite knowledge
Site prerequisites
The Vendor role must exist on your site. See Section 7.3, “Creating a Role”.
Steps
1. In the Manage administrative menu, navigate to People > Roles (admin/people/roles). The
Roles page appears.
2. Click Edit permissions in the dropdown for the Vendor role. The Edit role page appears
where you can see all the available actions for the website such as, for example, Post
comments or Administer blocks. The available permissions depend on the modules that
are installed in the site. Note: Some permissions may have security implications. Be cau-
tious while assigning permissions to roles.
3. Check the boxes for the following permissions, listed by module:
Module Permission
Contact Use users' personal contact forms
Filter Use the Restricted HTML text format
Node Recipe: Create new content
Node Recipe: Edit own content
Node Recipe: Delete own content
Node Vendor: Edit own content
Quick Edit Access in-place editing
105
Managing User Accounts
4. Click Save permissions. You will get a message saying your changes have been saved.
• Log in as one of the new users you created in Section 7.4, “Creating a User Account”. Verify
whether you have the correct permissions.
106
Managing User Accounts
Related concepts
Additional resources
Attributions
Adapted and edited by Boris Doesborg, Brian Emery, and Jojy Alphonso at Red Crackle, from
"User Roles", copyright 2000-2016 by the individual contributors to the Drupal Community
Documentation.
Goal
Change or add roles to a given user, either by editing a single-user or by applying a bulk
operation.
Prerequisite knowledge
Site prerequisites
The user account that you want to update, and the role you want it to have, must already
exist. See Section 7.4, “Creating a User Account”, Section 7.3, “Creating a Role”, and Section 7.5,
“Assigning Permissions to a Role”.
Steps
107
Managing User Accounts
4. On the Edit page, scroll down to Roles section. Check the Administrator role for the user
account.
5. Click Save to update the user account. You should be returned to the People page and
see a message saying that the changes have been saved.
1. If the users Happy Farm and Sweet Honey did not already have the Vendor role, here
is how you would add it. In the Manage administrative menu, navigate to People (ad-
min/people).
2. Locate Vendor user accounts Sweet Honey and Happy Farm and check them. If they are
not immediately visible, use the Name or email contains filter, or other filters, to narrow
down the list.
3. Select Add the Vendor role to the selected users from the Action select list.
108
Managing User Accounts
4. Click Apply to selected items. You should see a message indicating that the desired
changes were made.
Attributions
Prerequisite knowledge
• Section 7.1, “Concept: Users, Roles, and Permissions”
Site prerequisites
• The Vendor content type must exist, and your site must have at least two Vendor content
items. See Section 6.1, “Adding a Content Type”, Section 6.3, “Adding Basic Fields to a Content
Type”, and Section 5.2, “Creating a Content Item”.
• User accounts for at least two vendors must exist. See Section 7.4, “Creating a User Account”.
Steps
1. In the Manage administrative menu, navigate to Content (admin/content).
2. Find Vendor content item Happy Farm in the list. If it is not immediately visible, you can
filter the list by Published status, Content type (Vendor), Title, or Language. Click Edit for
the Vendor content item you would like to assign an author to.
109
Managing User Accounts
4. Start typing the Vendor’s user name Happy Farm in the Authored by field. The field lists
matching user names. Select the Vendor’s user name from the list.
5. Click Save and keep published.
6. You will get a notification that the Vendor content item has been updated.
7. Follow these steps again to assign Vendor content item Sweet Honey to the Vendor user
account Sweet Honey.
110
Managing User Accounts
Attributions
111
Chapter 8. Blocks
8.1. Concept: Blocks
What is a block?
Blocks are individual pieces of your site’s web page layout. They are placed inside the regions
(see Section 2.1, “Concept: Regions in a Theme”) of your theme, and can be created, removed,
and rearranged in the Block layout (admin/structure/block) administration page. Examples of
blocks include the Who’s online listing, the main navigation menu, and the breadcrumb trail.
The main page content is also a block.
Some modules make new blocks available for placement on your site. For example, when
the core Search module is installed and configured, it provides a block that contains a search
form. You may also create and place your own custom blocks.
Each block has its own configuration settings, which allow you to select which pages of your
site will display the block. It is even possible to place multiple copies of a block, each with its
own separate configuration and visibility rules.
Related topics
• Section 2.1, “Concept: Regions in a Theme”
• Section 8.2, “Creating A Custom Block”
• Section 8.3, “Placing a Block in a Region”
Attributions
Adapted by Les Lim from "Working with blocks (content in regions)" copyright 2000-2016 by the
individual contributors to the Drupal Community Documentation.
Goal
Create a block showing the hours and location of the farmers market.
Prerequisite knowledge
• Section 8.1, “Concept: Blocks”
112
Blocks
Steps
1. In the Manage administrative menu, navigate to Structure > Block layout > Custom block
library (admin/structure/block/block-content).
2. Click Add custom block. The Add custom block page appears.
3. Fill in the fields as shown below.
113
Blocks
4. Click Save. A message appears indicating the block has been saved.
Additional resources
Drupal.org community documentation page "Working with blocks (content in regions)"
Attributions
114
Blocks
Adapted by Jacob Redding and Boris Doesborg from Working with blocks (content in regions,
copyright 2000-2016 by the individual contributors to the Drupal Community Documentation.
Goal
Place the Opening hours and location block in the website’s sidebar.
Prerequisite knowledge
Site prerequisites
• The core Bartik theme must be installed and set as default. See Section 4.6, “Configuring
the Theme”.
• The Opening hours and location block must exist. See Section 8.2, “Creating A Custom Block”.
Steps
1. In the Manage administrative menu, navigate to Structure > Block layout (admin/struc-
ture/block). The Block layout page appears, listing the theme’s regions.
2. Ensure that in the secondary tab the core Bartik theme is selected. Block placement is
defined per theme.
3. Locate the region Sidebar second in the list and click Place block next to it. The Place block
window appears, listing all the blocks.
4. Locate the block Opening hours and location and click Place block next to it. The Configure
block window appears. Fill in the fields as shown below.
You can also hide or display the block on specific pages. In the case of the Farmer’s
market website you do not set any of these configuration options because you want to
show the block everywhere.
115
Blocks
5. Click Save block. The Block layout page appears. You can drag blocks to change the order
in which they will appear.
6. Verify that the Opening hours and location block is listed in the Sidebar second region,
and click Save blocks.
The block has been placed on the sidebar of all pages that use the core Bartik theme.
116
Blocks
Attributions
117
Chapter 9. Creating Listings with
Views
Prerequisite knowledge
• Section 2.4, “Concept: Modular Content”
• Section 2.3, “Concept: Content Entities and Fields”
What is a view?
A view is a listing of content on a website. The core Views module handles the display of
views, and the core Views UI module allows you to create and edit them in the administrative
interface. When you define views, you are interested in taking data from your website and
displaying it to the user.
• Lists of vendors
• Lists of recipes
• Lists of the most recent content on the site
• Lists of users on the site
118
Creating Listings with Views
Related topics
• Section 9.2, “Concept: The Parts of a View”
• Section 9.3, “Creating a Content List View”
Attributions
Written and edited by Michael Lenahan at erdfisch, and Jojy Alphonso at Red Crackle.
Prerequisite knowledge
• Section 2.3, “Concept: Content Entities and Fields”
• Section 2.4, “Concept: Modular Content”
• Section 9.1, “Concept: Uses of Views”
• Section 5.1, “Concept: Paths, Aliases, and URLs”
• Section 8.1, “Concept: Blocks”
Display
Each view can have one or more displays, each of which produces one type of output.
Options for display types include:
Page
Makes output at a particular URL, for the main page content at that URL.
Block
Makes output in a block, which can be placed on pages.
Feed
Makes an RSS or another type of feed.
Attachment
Makes output that you can attach to another display.
Format
Depending on the display type, you can choose to output your data in a table, grid, HTML
list, or another format. Some formats also give you a second choice that lets you output
either rendered entities or fields; other formats do not give you this choice (for example,
if you use a table format, you must always use fields).
119
Creating Listings with Views
Fields
Depending on the format choice, you may be able to choose which content fields are
output. For example, if you were making a view of recipe content items, in a block display
you might show only the recipe names, while in a full page display you might also show
an image field because you have more space.
Filter criteria
Filters limit the data to be output, based on criteria such as whether the content has
been published or not, the type of content, or a field value. For instance, to make a view
of recipe content items, you would need to filter to the Recipe content type, and to pub-
lished recipes. Filters can also be exposed, which means that users will have a form where
they can choose their own filter values. You might use this on a Recipe page to let users
filter for recipes with certain ingredients.
Sort criteria
Defines the order to present the output, which can be based on any content field.
Contextual filters
Contextual filters are like regular filters, except that the values come from the context of
the view display, such as the full URL of the page being displayed, the current date or
time, or some other value that can be detected by the view calculation.
Relationships
Relationships allow you to expand what is displayed in your view, by relating the base
content being displayed to other content entities. Relationships are created using fields
on the base content that relate it to the other content; one example is that all regular
content items have an author field, which references the user account of the person who
authored the content. Once you have created a relationship, you can display fields from
the referenced entity in the view.
Related topics
Section 9.3, “Creating a Content List View”
Attributions
Goal
Create a page listing vendors that will be automatically updated whenever a vendor is added,
deleted, or updated on the site.
Prerequisite knowledge
• Section 9.1, “Concept: Uses of Views”
120
Creating Listings with Views
Site prerequisites
• The core Views and Views UI modules must be installed. These are installed for you when
you install with the core Standard installation profile.
• The Vendor content type must exist, with URL and Main image fields. Your site must have a
couple of Vendor content items. See Section 6.1, “Adding a Content Type”, Section 6.3, “Adding
Basic Fields to a Content Type”, and Section 5.2, “Creating a Content Item”.
• The Medium (220x220) image style must be defined. This is created on your site when you
install the core Image module (installed with the core Standard installation profile) but can
be recreated if deleted. See Section 6.13, “Setting Up an Image Style”.
Steps
1. In the Manage administrative menu, navigate to Structure > Views > Add view (admin/struc-
ture/views/add). The Add view wizard appears.
2. Fill in the fields as shown below.
121
Creating Listings with Views
122
Creating Listings with Views
24. Navigate to the homepage and click Vendors from the main navigation to see the result.
123
Creating Listings with Views
Attributions
9.4. Duplicating a View
Goal
Create a page listing recipes by duplicating the existing Vendors view. Modify the page so
that the recipes are displayed in a grid and can by filtered by ingredients.
Prerequisite knowledge
• Section 9.1, “Concept: Uses of Views”
• Section 9.2, “Concept: The Parts of a View”
• Section 9.3, “Creating a Content List View”
Site prerequisites
• The Vendor and Recipe content types must exist; both must have Main image fields, and
the Recipe content type must have an Ingredients field. Your site must also have a couple
124
Creating Listings with Views
of Recipe content items. See Section 6.1, “Adding a Content Type”, Section 6.3, “Adding Basic
Fields to a Content Type”, Section 6.6, “Setting Up a Taxonomy”, Section 6.9, “Changing Content
Entry Forms”, and Section 5.2, “Creating a Content Item”.
• The Vendors view must exist. See Section 9.3, “Creating a Content List View”.
Steps
1. In the Manage administrative menu, navigate to Structure > Views (admin/structure/views).
Find the view "Vendors" and click Duplicate in its dropdown button.
2. Name the duplicate "Recipes" and click Duplicate. The view configuration page appears.
3. Change the title of the view page to "Recipes" by clicking Vendors in the Title section. The
Page: The title of this view pop-up appears. Type in "Recipes". Click Apply.
4. Change from a table to a grid format by clicking Table in the Format section. The Page:
How should this view be styled pop-up appears. Check Grid and click Apply. The Page: Style
options pop-up appears. Retain the default values and click Apply.
5. Retain only the title and image fields for the Recipes view by clicking Content: Body in the
Fields section. Click Remove in the pop-up that appears.
6. Change the content type filter to use the Recipe content type by clicking Content: Type
(=Vendor) in the Filter criteria section. In the Configure filter criterion: Content: Type pop-
up, check Recipe and uncheck Vendor. Click Apply.
7. Add a further filter that is exposed to visitors by clicking Add in the Filter criteria section.
Search for "ingredients" and check "Ingredients (field_ingredients)". Click Add and con-
figure filter criteria.
125
Creating Listings with Views
8. The appearing pop-up offers extra settings on vocabulary and selection type. Click Apply
and continue. The next pop-up allows you to expose this filter to visitors. Fill in the fields
as shown below, and click Apply.
9. Change the Path label field to "Recipes" by clicking "/vendors" in the Page settings section.
In the pop-up that appears, enter the path "recipes" and click Apply.
Note that when editing a view, you enter paths without the leading "/", unlike on other
administrative pages (such as when providing a path to a content item page).
10. Change the menu link title by clicking "Normal: Vendors" in the Page settings section. In
the pop-up that appears, change the title to "Recipes" and click Apply.
11. In order to use Ajax (see Ajax entry in the Glossary) to make filtering and paging faster
for users, click Advanced to expand the section for more options. In the Other section,
change Use AJAX: No to "Yes" by clicking No and checking Use AJAX in the pop-up that
appears. Click Apply.
12. Click Save to save the view.
13. Go back to the home page and click Recipes in the navigation to view the new Recipes
page.
126
Creating Listings with Views
The link to the view in the main navigation will probably not be in the right place. Change
the order of the menu items in the main navigation. See Section 5.8, “Changing the Order of
Navigation”.
Related concepts
Attributions
Written and edited by Laura Vass at Pronovix, and Jojy Alphonso at Red Crackle.
Goal
Add a block display to the Recipes view to display the most recent recipes in a sidebar, and
change its configuration without changing the existing Recipes page view.
127
Creating Listings with Views
Prerequisite knowledge
Site prerequisites
• The Recipe content type must exist, it must have a Main image field, and your site must
have a couple of Recipe content items. See Section 6.1, “Adding a Content Type”, Section 6.3,
“Adding Basic Fields to a Content Type”, Section 6.9, “Changing Content Entry Forms”, and Sec-
tion 5.2, “Creating a Content Item”.
• The Thumbnail (100x100) image style must be defined. This is created on your site when
you install the core Image module (installed with the core Standard installation profile)
but can be recreated if deleted. See Section 6.13, “Setting Up an Image Style”.
• The Recipes view must exist. See Section 9.3, “Creating a Content List View” and Section 9.4,
“Duplicating a View”.
Steps
3. Change the title of this display by clicking Block next to Display name. The Block: The name
and the description of this display pop-up appears. Change the Administrative name to
"Recent recipes". Click Apply.
4. Change the title of the view by clicking Title: Recipes in the Title section. In the pop-up
that appears, select This block (override) from the For select list. Change the title to "New
recipes" and click Apply (this display).
128
Creating Listings with Views
5. Change the view’s style by clicking Format: Grid in the Format section. In the pop-up that
appears, select This block (override) from the For select list. Select Unformatted list and
Click Apply (this display). You can further configure the style options in the next pop-up
that appears. Then click Apply.
6. Configure the image field by clicking Content: Main image in the Fields section. In the
pop-up that appears, select This block (override) from the For select list. Select Image style
Thumbnail (100x100). Click Apply (this display).
129
Creating Listings with Views
7. Remove ingredients as a filter by clicking Content: Ingredients (exposed) in the Filter criteria
section. In the pop-up that appears, select This block (override) from the For select list.
Click Remove at the bottom.
130
Creating Listings with Views
8. Configure how you want the content to be sorted in the view by clicking Add in the Sort
criteria section. In the pop-up that appears, select This block (override) from the For select
list. Check the field Authored on (from Content category), and then Add and configure sort
criteria.
9. In the appearing configuration pop-up, select Sort descending to have the most recent
recipes appear first. Click Apply.
10. Specify the number of items to be displayed by clicking Use pager: Mini in the Pager sec-
tion. In the pop-up that appears, select This block (override) from the For select list. Un-
der Pager, select Display a specified number of items. Click Apply (this display). In the Block:
Pager options pop-up, provide "5" as the value for Items to display. Click Apply.
11. Click Save. You will either see the view editing page again, or the Recipes page, depend-
ing on what you did in step 1. You should also see a message saying that the view has
been saved.
12. Place the "Recipes: Recent Recipes" block in the Sidebar second region. See Section 8.3,
“Placing a Block in a Region”. Navigate to the site’s home page to see the block.
Attributions
Written and edited by Laura Vass at Pronovix, Jennifer Hodgdon, and Jojy Alphonso at Red Crack-
le.
131
Chapter 10. Making Your Site
Multilingual
Prerequisite knowledge
The base language for the software that your site runs (core software, modules, and theme)
is English. However, you can create either a site that displays in a different language or
a multi-lingual site; if you do so, all relevant text, images, and file attachments should be
shown in the appropriate language for each site visitor. You need to have the core Language
module installed in order to use a language other than English on the site.
There are three types of information that you can translate, each with its own method for
translating:
132
Making Your Site Multilingual
tent type, you can configure it to be translatable or non-translatable. You need to have
the core Content Translation module installed in order to translate this text.
Related topics
Attributions
10.2. Adding a Language
Goal
Add one or more languages to your site and define which one is used by default.
Prerequisite knowledge
Steps
1. Install the four core multilingual modules (Language, Interface Translation, Content
Translation, and Configuration Translation), by following the steps in Section 4.3, “In-
stalling a Module”.
2. In the Manage administrative menu, navigate to Configuration > Regional and language
> Languages (admin/config/regional/language).
3. Click Add language.
4. Select Spanish (or your preferred language) from the Language name select list. Click Add
language. After waiting for translations to finish downloading, you will be returned to
the Languages page, with a confirmation message and the new language shown.
133
Making Your Site Multilingual
5. Follow the steps in Section 8.3, “Placing a Block in a Region” to place the Language switcher
block in the Sidebar second region. This will enable site visitors to switch between lan-
guages, once the site has been translated.
Additional resources
Attributions
Written and edited by Leila Tite, Jennifer Hodgdon, and Boris Doesborg.
Goal
Make Custom block, Custom menu link, and Content entity types translatable. Select specific
subtypes and set which fields of these can be translated.
134
Making Your Site Multilingual
Prerequisite knowledge
Site prerequisites
The core Content Translation module must be installed, and your site must have at least two
languages. See Section 10.2, “Adding a Language”.
Steps
1. In the Manage administrative menu, navigate to Configuration > Regional and language >
Content language and translation (admin/config/regional/content-language).
2. Under Custom language settings, check Content, Custom block and Custom menu link to
make these entity types translatable.
3. Configuration options appear for Content, Custom block and Custom menu link. Choose
the subtypes you want to translate for each entity type. Check Basic page for Content,
Basic block for Custom block and Custom menu link for Custom menu link.
4. Verify the settings for the entity types as shown below:
135
Making Your Site Multilingual
5. Choose the fields that should be translatable for Basic page as shown in the table below.
If a field is not translation-dependent, leave it unchecked. Enabling translation for fields
that are numbers or dates has use for accountability or implementing workflows.
136
Making Your Site Multilingual
6. Similarly, check the appropriate boxes for translatable fields belonging to Basic block
and Custom menu link.
7. Click Save configuration.
Additional resources
Attributions
Written and edited by Laura Vass at Pronovix, Jojy Alphonso at Red Crackle, and Jennifer Hodg-
don.
137
Making Your Site Multilingual
10.4. Translating Content
Goal
Translate the home page to Spanish.
Prerequisite knowledge
Section 10.1, “Concept: User Interface, Configuration, and Content translation”
Site prerequisites
• The Home content item must exist. See Section 5.2, “Creating a Content Item”.
• The core Content Translation module must be installed, and your site must have at least
two languages. See Section 10.2, “Adding a Language”.
• The Basic page content type must be configured to be translatable. See Section 10.3, “Con-
figuring Content Translation”.
Steps
1. In the Manage administrative menu, navigate to Content (admin/content).
2. Locate the home page. You can search for it by entering "Home" in the title field.
3. Select Translate from the dropdown button in the row of the Home content item. The
page Translations of Home appears.
4. Click Add in the row Spanish.
5. Note that the user interface has switched to Spanish. To switch it back to English, re-
move the first instance of es in the browser’s URL. For example, if your URL looks like
example.com/es/node/5/translations/add/en/es, remove the es that comes immediately af-
ter example.com.
6. Fill in the fields as shown below. You will have to click and expand URL path settings on
the right to provide the value for URL alias.
138
Making Your Site Multilingual
Attributions
10.5. Translating Configuration
Goal
Translate the labels on the Recipes view page into Spanish.
Prerequisite knowledge
• Section 10.1, “Concept: User Interface, Configuration, and Content translation”
• Section 9.3, “Creating a Content List View”
Site prerequisites
• The core Configuration Translation module must be installed, and your site must have at
least two languages. See Section 10.2, “Adding a Language”.
• The Recipes view must exist. See Section 9.3, “Creating a Content List View” and Section 9.4,
“Duplicating a View”.
Steps
The basic steps for translating any configuration on your site are:
139
Making Your Site Multilingual
1. Locate the page where the configuration you want to translate is created or edited in the
site’s primary language. For example, to translate the site name, you need to find the
page where you would edit the site name (see Section 4.2, “Editing Basic Site Information”).
2. Find a link, tab, or button on the page that says "Translate" or something similar. Click
this link, tab, or button.
3. Find a button that will let you add a translation in the desired language, and click this
button.
4. Enter the translation in the form, and save.
Most configuration is fairly straightforward and intuitive to edit in this manner. Views con-
figuration is an exception, because the translation editing form is nothing like the view edit-
ing form, and it is complex and hierarchical rather than being a simple form with just a few
fields. As an example of how to translate a view, here are the steps to translate the labels
in the Recipes view to Spanish:
140
Making Your Site Multilingual
6. Find Displays > Master display settings > Recipes default display options > Filters > (Empty)
taxonomy term ID > Find recipes using… Expose. In the Label field, enter "Encontrar recetas
usando…".
7. Click Save translation.
8. Navigate to the Recipes page and switch to Spanish using the Language switcher block.
Verify that the labels have been translated.
Attributions
141
Chapter 11. Extending and
Customizing Your Site
11.1. Finding Modules
Goal
Prerequisite knowledge
Steps
142
Extending and Customizing Your Site
143
Extending and Customizing Your Site
4. To further evaluate a module, click its title in the list of search results to visit its project
page.
• Project description: The description of the module on its project page should be clear and
useful. You should get an idea of its features and requirements.
• Maintenance status: If a module is Actively maintained, you can be sure that there will be
security updates, bug fixes and feature improvements provided on a regular basis. How-
ever, if the module is unmaintained or abandoned, you shouldn’t use it.
144
Extending and Customizing Your Site
• Development status: Under active development means you can expect new features to be
added to the project, but some aspects (for example, API) may still change. Maintenance
fixes only means that the project is considered feature complete.
• Reported installs, downloads: You can see how many people have downloaded and how
many sites use the module. If it’s only used by a few sites, it might be a unique solution
that not many people need, or it might be a warning sign that you shouldn’t use it either.
• Maintainers: When was the last commit (the last time someone updated something on the
module) or last release (new version)? If the project has few open issues, a long time since
commits/releases might be appropriate, but if it has a lot of open issues and there are no
commits/releases, that would be a clue that it might be abandoned.
• Issues: See if there are any open issues, potential problems with the module. Check the
Statistics to see how regularly issues are responded to.
• Resources: Check if the module has documentation or a README file, that can help you
install, configure, explore, and test it.
145
Extending and Customizing Your Site
Attributions
Goal
Put your site in maintenance mode to allow users with the right permissions to use the site
while users without this permission are presented with a message that the site is under
maintenance.
Prerequisite knowledge
Steps
1. In the Manage administrative menu, navigate to Configuration > Development > Mainte-
nance mode (admin/config/development/maintenance). The Maintenance mode page ap-
pears.
2. Fill in the fields as shown below.
146
Extending and Customizing Your Site
1. In the Manage administrative menu, navigate to Configuration > Development > Mainte-
nance mode (admin/config/development/maintenance). The Maintenance mode page ap-
pears.
2. Fill in the fields as shown below.
147
Extending and Customizing Your Site
Attributions
Written and edited by Boris Doesborg, and Jojy Alphonso at Red Crackle.
Goal
Download and install the contributed Admin Toolbar module, which allows you to easily
browse through the administration section of the website.
148
Extending and Customizing Your Site
Prerequisite knowledge
Site prerequisites
• If you want to install modules via the website, the core Update Manager module must be
installed. See Section 4.3, “Installing a Module” for instructions on installing modules.
• If you want to use Drush, Drush must be installed. See Section 3.2, “Concept: Additional
Tools”.
Steps
You can use the administrative interface or Drush to install a contributed module. If you are
installing a custom module rather than a contributed module, if you see a message saying
Installing modules and themes requires FTP access to your server, or if the steps below do not
work to download and unpack the module files, follow the steps in Section 11.6, “Manually
Downloading Module or Theme Files”. If you are installing a contributed module with exter-
nal dependencies that are managed by Composer, follow the steps for downloading in Sec-
tion 11.9, “Using Composer and Git to Download Files”. In either of these cases, then continue
here with step 7 in the instructions for the administrative interface below.
3. In the Manage administrative menu, navigate to Extend (admin/modules). The Extend page
appears.
4. Click Install new module. The Install new module page appears.
149
Extending and Customizing Your Site
5. In the field Install from a URL, paste the copied download link. This value could look like
this: https://ftp.drupal.org/files/projects/admin_toolbar-8.x-1.14.tar.gz
6. Click Install to upload and unpack the new module on the server. The files are being
downloaded to the modules directory.
7. Click Enable newly added modules to return to the Extend page. If you used the manual
uploading procedure, start with this step, and reach the Extend page by using the Manage
administrative menu and navigating to Extend (admin/modules).
8. Locate and check Admin toolbar.
9. Click Install to turn on the new module.
Using Drush
1. Find the project name for the module you want to install, which is the last segment of
the module’s project page URL. For example, if the project URL is https://www.drupal.org/
project/admin_toolbar, the project name is "admin_toolbar".
2. Run the following Drush commands, giving the project name (for example,
admin_toolbar) as a parameter:
drush dl admin_toolbar
drush en admin_toolbar
3. Follow the instructions on the screen.
150
Extending and Customizing Your Site
• If you do not see the effect of these changes in your site, you might need to clear the
cache. See Section 12.2, “Clearing the Cache”.
Additional resources
Attributions
11.4. Finding Themes
Goal
Prerequisite knowledge
Steps
151
Extending and Customizing Your Site
152
Extending and Customizing Your Site
4. To further evaluate a theme, click its title in the list of search results to visit its project
page.
• Introduction: The description of the theme on its project page should be clear and useful.
A screenshot of the theme helps your evaluation as well.
• Downloads: The theme should be available for your version of the core software. Pay at-
tention to the color-coding: Themes marked green are recommended to be used on live
153
Extending and Customizing Your Site
sites, the ones marked yellow should be carefully evaluated before use, and the ones
marked red are only recommended for testing.
• Project Information: Check the theme’s maintenance and development status, and how
frequently it’s downloaded and installed.
• Issues: See if there are any open issues or potential problems with the theme.
• Resources: Check if the theme has documentation.
Attributions
Goal
Download and install a theme from Drupal.org.
Prerequisite knowledge
• Section 11.4, “Finding Themes”
• Section 3.2, “Concept: Additional Tools”
Site prerequisites
If you want to install via the website, the core Update Manager module must be installed.
See Section 4.3, “Installing a Module” for instructions on installing modules.
If you want to use Drush, Drush must be installed. See Section 3.2, “Concept: Additional Tools”.
Steps
You can use the administrative interface or Drush to install a contributed theme. If you are
installing a custom theme rather than a contributed theme, if you see a message saying In-
stalling modules and themes requires FTP access to your server, or if the steps below do not work
to download and unpack the theme files, follow the steps in Section 11.6, “Manually Down-
loading Module or Theme Files”. If you are installing a contributed theme with external depen-
dencies that are managed by Composer, follow the steps for downloading in Section 11.9,
154
Extending and Customizing Your Site
“Using Composer and Git to Download Files”. In either of these cases, then continue here with
step 7 in the instructions for the administrative interface below.
5. In the field Install from a URL, paste the copied download link. This value could look like
https://ftp.drupal.org/files/projects/mayo-8.x-1.3.tar.gz.
6. Click Install to upload and unpack the new theme on the server. The files are being down-
loaded to the themes directory.
7. Click Install newly added themes to return to the Appearance page. If you used the manual
uploading procedure, start with this step, and reach the Appearance page by using the
Manage administrative menu and navigating to Appearance (admin/appearance).
155
Extending and Customizing Your Site
8. Locate the new theme under Uninstalled themes and click Install and set as default to use
it. All non-administrative pages on the site will now use this new theme.
Using Drush
1. Find the project name for the theme you want to install, which is the last segment of
the theme’s project page URL. For example, if the project URL is https://www.drupal.org/
project/mayo, the project name is mayo.
2. Run the following Drush commands, giving the project name (for example, mayo) as a
parameter:
drush dl mayo
drush en mayo
drush config-set system.theme default mayo
3. Follow the instructions on the screen.
Attributions
156
Extending and Customizing Your Site
Prerequisite knowledge
• Section 1.2, “Concept: Modules”
• Section 11.1, “Finding Modules”
• Section 1.3, “Concept: Themes”
• Section 11.4, “Finding Themes”
Site prerequisites
You need to be facing any of the following to perform the manual download described in
this topic:
Steps
If you are installing a module or theme from Drupal.org, follow the downloading instructions,
and then the uploading/unpacking instructions. If you created the module or theme, skip the
downloading step. Instead, create an archive file (that you know how to extract on the server)
and proceed with the steps in uploading/unpacking, using whatever method is appropriate
for the way you initially created the archive file.
157
Extending and Customizing Your Site
1. If you are adding a new module or theme, create subdirectories in your top-level mod-
ules and themes directories (if they don’t already exist). Typically, people make a contrib
subdirectory for contributed modules and themes that are downloaded from Drupal.org,
and a custom subdirectory for modules and themes that they created. Your modules di-
rectory might look like this:
2. If you are replacing an existing module or theme with an updated version, put the site
into maintenance mode. See Section 11.2, “Enabling and Disabling Maintenance Mode”.
3. If you are replacing an existing module or theme with an updated version, find and
delete all the existing files and directories for the existing module or theme. Modules
are normally located in directories under the top-level modules directory, and themes
are normally located in directories under the top-level themes directory.
4. Upload the .tar.gz file (or whatever archive you created) to your site. Place it in either the
same location from which you deleted the directory (if replacing an existing module or
theme) or the appropriate subdirectory of modules or themes (if adding a new module
or theme).
5. Extract the files from the .tar.gz archive (or whatever archive you created), making a
subdirectory in the same location as the archive file. If you do not have terminal access,
or your hosting server is not running Linux, your hosting control panel’s file manager
should provide a way to extract the files. If you have terminal access to your hosting
server (running Linux) and you are using a tar.gz file, you can use a command like:
158
Extending and Customizing Your Site
Additional resources
• Drupal.org community documentation page "Updating modules"
• Drupal.org community documentation page "Installing contributed modules (Drupal 8)"
• Drupal.org community documentation page "Installing themes"
Attributions
Written and edited by Boris Doesborg, Jennifer Hodgdon, and Marc Isaacson.
An example deployment workflow for site building will usually include the sites mentioned
below:
Local environment
The development process starts with developers working on new features, bug fixes,
theming, and configuration in their local environment.
Development site
Developers push the changes they’ve been working on to the development site. For a
team of more than one developer, version control is usually used. Git is a version control
system that tracks your files for any changes. You can then commit those changes to a
repository. Using Git allows team members to work on the same site without overriding
each other’s work. It also makes it possible to easily roll back to previous stages of the
development.
Staging site
The staging site can be used for testing, or presenting the changes to the client for ap-
proval. QA (Quality Assurance) and UAT (User Acceptance Testing) are most often carried
out on the staging site. It is recommended to have live content on both the development
159
Extending and Customizing Your Site
and staging sites, so that you can test how the new features will work with the existing
content.
Production site
The live site on the web available to visitors. It contains new features that have been
proven safe to go live.
Based on the project’s size, scope, requirements, or stakeholders, stages from the above
workflow can be removed, or additional stages can be added. For example, a testing site
before staging can be added to separate testing and user acceptance processes.
Related topics
• Section 11.8, “Making a Development Site”
• Section 2.6, “Concept: Editorial Workflow”
Additional resources
Drupal.org community documentation page "Introduction to Git"
Attributions
Written and edited by Diána Lakatos, and Jojy Alphonso at Red Crackle.
Prerequisite knowledge
Section 11.7, “Concept: Development Sites”
Site prerequisites
• You have a live, developed site that you would like to make a copy of for development
purposes.
• If you want to use Drush for some of the steps in this task, Drush must be installed. See
Section 3.2, “Concept: Additional Tools”.
Steps
1. Follow the steps in Section 3.3, “Preparing to Install”, so that you have hosting set up for
your development site, you know where the web root is for your development site, and
you have an empty database and database user for your development site to use.
160
Extending and Customizing Your Site
2. Make a database dump file from your live site’s database. Try one of the following meth-
ods:
• If you are using MySQL as your database, and your live site’s server has phpMyAdmin
installed (it is available from many hosting control panels), use the Export tab in php-
MyAdmin to export in SQL format. Using gzip compression on the output file is sug-
gested, to reduce the file size.
• If you are using MySQL and have access to the command line, use this command (sub-
stituting in your site’s database name, user name, and password):
You now have a database dump stored in the file BACKUPFILE.sql. For security reasons,
avoid storing this file on your hosting server anywhere under the Drupal site root. This
will prevent others from getting a copy of your database.
3. Copy all of the files from the web root of your live site to the web root of your develop-
ment site.
4. Edit the sites/default/settings.php file under your development site’s top-level directory in
a plain-text editor. Find the lines near the end that contain the database name, database
username, and database password, and update them to the information about the de-
velopment site database you set up. The lines look something like this (before editing):
$databases['default']['default'] = array (
'database' => 'live_site_database_name',
'username' => 'live_site_database_username',
'password' => 'live_site_database_password',
5. Check whether your settings.php file has the following setting; if yes, then you will need
to edit this to point to your development site URL instead of your production site URL:
$settings['trusted_host_patterns']
6. Import the database dump file you created, into the development site’s database. Try
one of the following methods:
• If you are using MySQL as your database, and your live site’s server has PHPMyAdmin
installed (it is available from many hosting control panels), use the Import tab in PHP-
MyAdmin. You may find that you have to restart the import a few times, if your data-
base was large.
• If you are using MySQL and have access to the command line, use this command (sub-
stituting in your site’s database name, user name, and password; if you made a gzip-
compressed backup file, you will also need to uncompress it first):
161
Extending and Customizing Your Site
Additional resources
Attributions
Written and edited by Jennifer Hodgdon, Joe Shindelar at Drupalize.Me, and Jojy Alphonso at
Red Crackle.
Goal
Use Composer and/or Git to download files and dependencies in the core software, or in
add-on modules and themes.
Prerequisite knowledge
162
Extending and Customizing Your Site
Site prerequisites
If you want to use Git or Composer, they must be installed either on a local development
server or your live site. See Section 3.2, “Concept: Additional Tools”.
Steps
If you are unable to install the Git or Composer tools on your live server, after following the
steps in any of the sections below on your local server, you will need to transfer any updated
or added files to your live server. The recommended procedure is to make an archive or zip
file of the new and changed files, transfer the archive to your live server, and extract it there.
If you are using Composer, make sure to check for updates and additions to the following
files, in the root of your installation:
• vendor directory
• autoload.php
• composer.json
• composer.lock
Follow these steps if you want to download the development version of the core software,
or of a contributed module or theme, from the project’s Git version control repository:
1. In a command-line window, change to one level above the directory where you want
the files to reside. For the core software, this would be your web root. For an add-on
module, this would be the modules directory, or a sub-directory like contrib under the
modules directory.
2. Locate the page for the project that you want to download on Drupal.org; for example,
https://www.drupal.org/project/drupal for the core software, or https://www.drupal.org/
project/admin_toolbar for the contributed Admin Toolbar module.
3. Click the Version control link near the top of the page, which opens up a page giving Git
commands for this project.
4. Copy the git clone command under Setting up repository for the first time, and paste it
into your command line. For example, it might be:
163
Extending and Customizing Your Site
Follow these steps if you downloaded the core software files using Git, which does not in-
clude the external dependencies:
Follow these steps if you have not yet downloaded or installed the core software, and you
want to use Composer to download both the core software and its external dependencies:
1. At the command line, change to one level above the directory where you want the soft-
ware to reside.
2. Enter this command, where my_site_name is the directory you want to create:
Follow these steps if you have already downloaded the core software, and you want to use
Composer to add a contributed module or theme (usually because it has external depen-
dencies that need to be downloaded with Composer):
1. If you have not already done so, tell Composer about the download location for con-
tributed modules and themes, by entering this command from the root of your site in-
stallation:
"installer-paths": {
"modules/contrib/{$name}": ["type:drupal-module"],
"modules/custom/{$name}": ["type:drupal-custom-module"],
"profiles/contrib/{$name}": ["type:drupal-profile"],
"themes/contrib/{$name}": ["type:drupal-theme"],
"themes/custom/{$name}": ["type:drupal-custom-theme"],
"libraries/{$name}": ["type:drupal-library"],
"drush/{$name}": ["type:drupal-drush"]
},
164
Extending and Customizing Your Site
3. Each time you want to add a contributed module or theme, determine the project’s short
name. This is the last part of the URL of the project page; for example, the Geofield
module, at https://www.drupal.org/project/geofield, has short name geofield.
4. To download the contributed module or theme, along with its external dependencies,
enter the following command at the root of your site (substituting the short name of the
module or theme for geofield):
Follow these steps to update the files for the core software or a contributed module or
theme, after having already started to manage dependencies with Composer:
1. Determine the short name of the project you want to update. For the core software, it is
drupal. For contributed modules and themes, it is the last part of the URL of the project
page; for example, the Geofield module, at https://www.drupal.org/project/geofield, has
short name geofield.
2. Determine how to enter the version number you want to update to. For example, for
version 8.x-1.7 of a contributed module, you would enter just the 1.7, and for the core
software version 8.3.1, you would enter 3.1.
3. Enter the following command at the root of your site (substituting the short name of the
module or theme for geofield and the correct version number):
Additional resources
Attributions
Adapted by Jennifer Hodgdon from "Using Composer with Drupal", copyright 2000-2017 by the
individual contributors to the Drupal Community Documentation.
Goal
Copy a view that you have created in a local development site to the production site.
Prerequisite knowledge
165
Extending and Customizing Your Site
Site prerequisites
• The core Configuration Manager module must be installed in both the development and
production sites. See Section 4.3, “Installing a Module” for instructions on installing core
modules.
• The Vendor content type must exist in both the development and production sites, with
the same fields. See Section 6.1, “Adding a Content Type”.
• The Vendors view must exist in the development site but not the production site. See Sec-
tion 9.3, “Creating a Content List View”.
Steps
166
Extending and Customizing Your Site
167
Extending and Customizing Your Site
The steps in this topic show how to export and import a single configuration item. However,
often if you develop functionality on a development website and want to transfer it to your
production site, you will need to transfer multiple configuration items. For instance, if you
developed a new content type with fields, you would need to transfer several configuration
items for each field, one for the content type itself, and possibly multiple view mode and
form mode items, and they would have to be transferred in the right order. Getting this right
can be both tedious and difficult.
As an alternative, you can export and import the complete configuration of the site. For
this, you would need a local development site that is a clone of the production site (see
Section 11.8, “Making a Development Site”), and then you can follow the steps in Section 11.11,
“Synchronizing Configuration Versions” to synchronize configuration between development
and production sites.
Another alternative is to use the contributed Features module, which allows exporting and
importing bundled functionality (for example, all the configuration for a photo gallery).
Finally, if you do not see the effect of these changes in your site, you might need to clear the
cache. See Section 12.2, “Clearing the Cache”.
Related concepts
Attributions
Goal
Prerequisite knowledge
168
Extending and Customizing Your Site
Site prerequisites
• You must have a development copy of your production site. See Section 11.8, “Making a
Development Site”.
• The core Configuration Manager module must be installed on both the development and
production sites. See Section 4.3, “Installing a Module” for instructions on how to install core
modules.
• You must have changed configuration on either the production or development site (the
source site), and want to synchronize the changes to the other site (the destination site). As
an example, you can develop a new content type, fields, and views on your development
site, and when it is all working correctly, deploy the changes to the live site.
• All configuration that should not be synchronized between the source and destination
sites must be stored in configuration overrides in the settings.php file rather than in the
database. See Section 11.8, “Making a Development Site”.
Steps
1. In the source site, in the Manage administrative menu, navigate to Configuration > De-
velopment > Configuration synchronization > Export (admin/config/development/configura-
tion/full/export).
2. Click Export. Your site will generate an archive of the full site configuration. Save the file
on your local computer.
3. In the destination site, in the Manage administrative menu, navigate to Configuration >
Development > Configuration synchronization > Import (admin/config/development/config-
uration/full/import).
4. Browse to find the downloaded configuration archive, and click Upload. Your configu-
ration archive will be uploaded to the destination site, and you will be redirected to
the configuration Synchronize page (admin/config/development/configuration) with a mes-
sage saying your files were uploaded.
5. Verify that the differences shown on the page are what you expect. You may see config-
uration items that have been added, deleted, or changed; for changed items, you can
click View differences to see what the changes are.
6. When you are satisfied, click Import all to import the configuration changes.
Attributions
169
Extending and Customizing Your Site
170
Chapter 12. Preventing and Fixing
Problems
12.1. Concept: Cache
Prerequisite knowledge
Section 1.1, “Concept: Drupal as a Content Management System”
There are several ways that page load time can be sped up, including installing software
on the server. The system includes the core Internal Page Cache and Dynamic Page Cache
modules, which do not require any additional server software; they use a database cache
mechanism to speed up your site. The way these modules work is that during page calcula-
tions, intermediate results and the final page output are stored in a special database area
(known as the cache). Then the next time a compatible request is made, intermediate or final
results, as appropriate, can be retrieved and used rather than redoing the entire calculation.
In addition, when content or data that affects a particular calculation is updated, the affect-
ed cached data is removed from the cache, forcing that part of the calculation to be redone
the next time it is needed.
These caching modules normally work reasonably well, and offer at least some speed-up for
most sites. However, sometimes the page cache can have problems, such as:
• The theme system caches information in the database cache about which template files
are used to render various types of data. If you are developing a new theme and add a
new template file, you’ll need to clear this cache to have your theme file recognized.
171
Preventing and Fixing Problems
• CSS and JavaScript files can optionally be optimized and compressed (depending on your
site settings). If so, the compressed versions are stored in the file system so that they
don’t have to be re-optimized too often. If you are developing a module or theme, you
may need to either turn off or clear this file cache to have changes to CSS or JavaScript
files be recognized.
• The system locates certain low-level PHP functions and classes, such as hook implementa-
tions and plugin classes, from your installed modules and stores information about which
module has which functionality. If you are developing a new module or adding features
to an existing module, you may need to clear this cache to have your new features be
recognized.
Related topics
If you have problems with your site, the first thing to try to fix it is usually to clear the cache.
See Section 12.2, “Clearing the Cache” for more information.
Additional resources
Learn about additional caching and performance optimization methods in the Drupal.org
community documentation page "Caching to improve performance".
Attributions
Prerequisite knowledge
• Section 12.1, “Concept: Cache”
• Section 3.2, “Concept: Additional Tools”
Site prerequisites
If you want to use Drush to clear the cache, Drush must be installed. See Section 3.2, “Concept:
Additional Tools”.
Steps
You can use the administrative interface or Drush to clear the cache.
172
Preventing and Fixing Problems
Using Drush
You can use one of two commands:
• Use the command drush cache-rebuild to clear and rebuild all cached data for a site.
After running this command, you will see the output message "Cache rebuild complete."
• Use the command drush cc to see a list of individual caches and then choose the specif-
ic cache you would like to clear. Running this command should produce output like the
following:
> drush cc
Enter a number to choose which cache to clear.
[0] : Cancel
[1] : drush
[2] : theme-registry
[3] : menu
[4] : css-js
[5] : block
[6] : module-list
[7] : theme-list
[8] : render
[9] : views
Choose a cache to clear by entering the number associated with that cache. Press "Enter"
to continue.
Additional resources
Drupal.org community documentation page "Clearing or rebuilding Drupal’s cache"
Attributions
Adapted and edited by Joe Shindelar and Jack Haas from "Clearing or rebuilding Drupal’s cache",
copyright 2000-2016 by the individual contributors to the Drupal Community Documentation.
173
Preventing and Fixing Problems
If something happens to the computer (or computers) that your site and its database are
running on, or if you lose access to this computer, you could lose some or all of your site’s
data. You could also lose data if your site is hacked, or if someone with administrative priv-
ileges on your site deletes or alters data mistakenly from the administrative interface. In
order to prevent scenarios like this from being permanent, expensive data losses, it is im-
portant to make regular backups of your site’s data, and to store them in a location that is
separate from the computer where your site is running.
The frequency with which you should make data backups, and how many backups you
should keep, depends on how frequently your site is changing. If you have a very large
amount of content on your site that is being added to or updated many times per day, you
would want to make more frequent backups than you would for a site that changes rarely.
Also consider that some time could pass between when a data problem occurs and when
you notice that it is a problem, so storing a sequence of backups (so that you can go back
to the last known good data and retrieve that), rather than overwriting a single backup re-
peatedly, is a good practice.
Another consideration is that whatever format you store your backups in, it is a good idea
to verify that you can actually retrieve lost data from your backups. You might want to test
several possible data loss scenarios, and make sure that your data can be restored to the
site in all cases.
In order to make a complete backup of your site, you will need to make copies of the fol-
lowing:
You can perform a test to confirm whether your backup has been done right by making a
development copy of the site (see Section 11.8, “Making a Development Site”).
174
Preventing and Fixing Problems
Related topics
Additional resources
Attributions
12.4. Concept: Log
What is a Log?
Your site captures system events in a log to be reviewed by an authorized individual at a later
time. The log is a list of recorded events containing usage data, performance data, errors,
warnings, and operational information. It is vital to check the log on a regular basis as it is
often the only way to tell what is going on.
You can find your site’s recent log messages in the Manage administrative menu by navigat-
ing to Reports > Recent log messages (admin/reports/dblog).
175
Preventing and Fixing Problems
Attributions
Adapted by Diána Lakatos from "Reports" copyright 2000-2016 by the individual contributors
to the Drupal Community Documentation
The status report is a short overview of your site’s parameters as well as any problems de-
tected with your installation. It may be useful to copy and paste this information into sup-
port requests filed on Drupal.org’s support forums and project issue queues or when asking
for help on other channels.
You can find the status report in the Manage administrative menu by navigating to Reports
> Status report (admin/reports/status).
176
Preventing and Fixing Problems
Related topics
Section 14.2, “Getting Support”
Attributions
Adapted by Diána Lakatos from "Reports" copyright 2000-2016 by the individual contributors
to the Drupal Community Documentation
177
Chapter 13. Security and
Maintenance
13.1. Concept: Cron
Related topics
• Section 13.2, “Configuring Cron Maintenance Tasks”
• Section 12.5, “Concept: Status Report”
Additional resources
Drupal.org community documentation page "Setting up cron"
Attributions
Written and edited by Diána Lakatos at Pronovix, Dave Hansen-Lange at Advomatic, and Boris
Doesborg.
Goal
Check whether cron maintenance tasks are run regularly, and if not, either install the core
Automated Cron module or run cron maintenance tasks from outside the website.
178
Security and Maintenance
Prerequisite knowledge
Steps
1. Review the Status report (see Section 12.5, “Concept: Status Report”) to see when cron main-
tenance tasks were last run.
If you installed the website using the core Standard installation profile (or similar), then
cron maintenance tasks might already be running via the core Automated Cron module.
By default, these tasks are run about every three hours.
2. Choose whether to run cron maintenance tasks using the core Automated Cron module,
or by other means. The core Automated Cron module might not be suitable for some
websites because:
• Each time someone accesses a page on the site, the module checks how long it has
been since cron maintenance tasks have last run, and then runs them if necessary. If
no one visits the website for a long time, cron maintenance tasks will not be run.
• Cron maintenance tasks are run after the page has been generated. This means there
is less time for the tasks to be run before various server timeouts are reached (for
example, PHP execution timeout). If this happens, the logs (see Section 12.4, “Concept:
Log”) will show error messages that cron is unable to complete.
• There is a small scalability cost associated with the core Automated Cron module. This
is because one of the web server’s processes is occupied (and can’t serve other web
pages) until the cron maintenance tasks are complete.
3. If you want to use the core Automated Cron module, first make sure it is installed (it is
installed with the core Standard install profile; see Section 4.3, “Installing a Module” if it
is not installed).
Next, configure the module to control how frequently cron maintenance tasks are run. In
the Manage administrative menu, navigate to Configuration > System > Cron (admin/con-
fig/system/cron). Choose the desired interval in the Cron settings section, and click Save
configuration.
179
Security and Maintenance
4. If you want to run cron maintenance tasks from outside the website, uninstall the core
Automated Cron module (see Section 4.4, “Uninstalling Unused Modules”). Next, find the
cron URL. This URL is shown in the Status report (see Section 12.5, “Concept: Status Report”),
and in the Cron administration page (see previous step). The URL looks like this: http://
www.example.com/cron/0MgWtfB33FYbbQ5UAC3L0LL3RC0PT3RNUBZILLA0Nf1Re
Whenever this URL is visited, cron maintenance tasks will run. Set up one of the following
schedulers to access this URL regularly:
• The Cron daemon (Linux, OS X, Solaris, BSD)
• Scheduled Tasks (Windows)
• A cron SASS provider (software as a service)
• A cron manager provided by your web hosting provider (see the documentation pro-
vided by your provider)
Related concepts
Additional resources
180
Security and Maintenance
Attributions
Written and edited by Dave Hansen-Lange at Advomatic, Boris Doesborg, and Jennifer Hodgdon.
Prerequisite knowledge
Any software occasionally has bugs, and sometimes these bugs have security implications.
When security bugs are fixed in the core software, modules, or themes that your site uses,
they are released in a security update. You will need to apply security updates in order to
keep your site secure. See Section 13.4, “Keeping Track of Updates” to learn how to be notified
of security updates by email, and Section 13.5, “Updating the Core Software”, Section 13.6, “Up-
dating a Module”, and Section 13.7, “Updating a Theme” to learn how to make updates.
The Drupal open-source project has a team of volunteers who track security-related bugs
and release security updates. They also help other developers fix bugs, and maintain infor-
mation for users on how to keep their websites secure. You can learn more about the secu-
rity team and their practices and processes at the Drupal.org Security Team page.
It is important that security problems be kept confidential until they are fixed, so that sites
are less likely to be compromised before they can be secured. If you find a potential security
problem in any of the software you downloaded from the Drupal.org website, follow the
procedures on the Drupal.org Security Team page to report it.
The core software, modules, and themes also periodically have regular updates to add new
features and fix bugs. These updates are less critical than security updates. As a general best
practice, updates should be applied as long as they do not cause problems with your site.
181
Security and Maintenance
Testing on a development copy of your site is always a good idea before applying updates on
a live site. This is because some updates may include changes that are not compatible with
the modules or themes on your site, or that will break a particular functionality on your site.
Related topics
Additional resources
Attributions
Goal
Keep your site safe and up-to-date by keeping up with the latest security updates.
Prerequisite knowledge
Steps
• In the Manage administrative menu, navigate to Reports > Available updates > Settings. En-
ter the email addresses to be notified when updates are available. You can also specify
whether you want daily or weekly updates. Click Save configuration.
182
Security and Maintenance
Related concepts
Additional resources
Attributions
Goal
Update the core software, either through the administrative interface or by using Drush.
Site prerequisites
• If you want to use Drush, Drush must be installed. See Section 3.2, “Concept: Additional
Tools”.
• If your site is live, you should test this process in a development environment before run-
ning it on your production site. See Section 11.8, “Making a Development Site”.
Steps
1. Make a complete backup of your site. Refer to Section 12.3, “Concept: Data Backups”.
183
Security and Maintenance
2. Open settings.php (/sites/default/settings.php) in any plain text editor. Find the line with
the $settings[update_free_access] variable. By default, it is set to "FALSE" due to security
reasons. Change the setting to "TRUE":
$settings['update_free_access'] = TRUE;
3. Disable any caching technique (memcache, varnish, and so on) your application might
be using.
4. Put your site in maintenance mode. See Section 11.2, “Enabling and Disabling Maintenance
Mode”.
5. If you are using Composer to manage dependencies, or using Git, skip the next six steps,
and instead see Section 11.9, “Using Composer and Git to Download Files” for instructions
on downloading updated files. Continue with the update.php step.
6. Download the tar.gz or zip file archive for the latest version of Drupal 8.x core from
Drupal.org Drupal Core Downloads. See Section 3.3, “Preparing to Install” for more details
on how to find the latest version.
7. Upload the archive file to your web hosting server.
8. Extract the archive file to a temporary directory on your server (should be outside the
directory where the site is hosted). Your hosting control panel’s file manager should
provide a way to extract the files. Or, if you have terminal access to your hosting server
(running Linux), you can use a command like:
drush dl drupal
10. In your site hosting directory, delete the core and vendor directories, and all files that are
not in a subdirectory, including .htaccess, composer.json, and autoload.php. Don’t delete
custom and customized files because you may end up losing the custom functionality
stored in them.
11. Copy the core and vendor directories and the non-custom/non-customized files that you
deleted in the preceding step from the temporary directory to your site directory.
12. Run the update.php script using either of the following:
• Visit http://www.example.com/update.php in your browser (where www.example.com is
your site’s URL). Click Continue in the first screen to run the updates and successfully
complete the script.
• Run the following Drush command: drush updb
13. If you get any error or warning, re-run the update.php script again till all the updates
have been completed successfully.
14. Open settings.php (/sites/default/settings.php) in a text editor. Find the line with the
$settings[update_free_access] variable and update it to "FALSE":
$settings['update_free_access'] = FALSE;
184
Security and Maintenance
15. Click Administration pages to return to the administration section of your site.
16. Take your site out of maintenance mode. See Section 11.2, “Enabling and Disabling Main-
tenance Mode”.
17. Clear the cache. See Section 12.2, “Clearing the Cache”.
18. Re-enable any caching technique you disabled at Step 3.
19. You should have the updated version running. You can verify the current version of your
software by checking the Status report (see Section 12.5, “Concept: Status Report”).
Related concepts
Additional resources
Attributions
Written and edited by Surendra Mohan, Boris Doesborgh, and Jojy Alphonso at Red Crackle.
13.6. Updating a Module
Goal
Prerequisite knowledge
185
Security and Maintenance
Site prerequisites
• A contributed module has been installed and there is an update available for it. See Sec-
tion 11.3, “Downloading and Installing a Module from Drupal.org” and Section 13.4, “Keeping
Track of Updates”.
• If your site is live, you should test this process in a development environment before run-
ning it on your production site. See Section 11.8, “Making a Development Site”.
• You have created a full-site backup. See Section 12.3, “Concept: Data Backups”.
• If you want to use the user interface, the core Update Manager module must be installed.
See Section 4.3, “Installing a Module” for instructions on installing core modules.
• If you want to use Drush, Drush must be installed. See Section 3.2, “Concept: Additional
Tools”.
Steps
Before you start, check for module-specific update instructions. This is typically necessary
while updating modules that involve the usage of third-party libraries. Read and understand
all module-specific requirements before proceeding with the updates. To find instructions,
check the module’s project page Read Documentation link.
To view further instructions, download the tar.gz or .zip file from the project page to your
local computer. Unzip the file and look for README.txt, INSTALL.txt, and UPGRADE.txt that come
with the module’s installation file. Also, review the release notes on the project page by
clicking the version number you’re downloading.
You can use the administrative interface or Drush to update a contributed module. If you are
updating a custom module rather than a contributed module, if you see a message saying
Installing modules and themes requires FTP access to your server, or if the steps below do not
work to obtain the new module files, follow the steps in Section 11.6, “Manually Downloading
Module or Theme Files”. You can then continue here with step 6 in the instructions for the
administrative interface below.
186
Security and Maintenance
4. Click Continue.
5. Click Run database updates. If you obtained the new module files manually, start with this
step, and reach the database updates page by typing the URL example.com/update.php
in your browser.
6. Click Continue and apply all updates. The database update scripts will be executed.
7. Click Administration pages to return to the administration section of your site.
8. Take your site out of maintenance mode. See Section 11.2, “Enabling and Disabling Main-
tenance Mode”.
9. Clear the cache (refer to Section 12.2, “Clearing the Cache”).
Using Drush
1. Find the project name for the module you wish to update. It is the last segment of the
module’s project page URL. For example, if the project URL is https://www.drupal.org/
project/admin_toolbar, the project name is "admin_toolbar".
2. Run the following Drush command, giving the project name (for example,
admin_toolbar) as a parameter (if you have more than one module to update, add the
additional module project names to the end of the command, separated by spaces):
drush up admin_toolbar
3. Follow the instructions on the screen.
Additional resources
Drupal.org community documentation page "Updating modules"
187
Security and Maintenance
Attributions
Adapted by Boris Doesborgh, and Sarah German at Advomatic, from "Updating modules", copy-
right 2000-2016 by the individual contributors to the Drupal Community Documentation.
13.7. Updating a Theme
Goal
Update a contributed theme on your site and run the Database Updates script.
Prerequisite knowledge
Site prerequisites
• A contributed theme has been installed and there is an update available for it. See Sec-
tion 11.5, “Downloading and Installing a Theme from Drupal.org” and Section 13.4, “Keeping
Track of Updates”.
• If your site is live, you should test this process in a development environment before run-
ning it on your production site. See Section 11.8, “Making a Development Site”.
• You have created a full site backup. See Section 12.3, “Concept: Data Backups”.
• If you want to use the user interface, the core Update Manager module must be installed.
See Section 4.3, “Installing a Module” for instructions on installing core modules.
• If you want to use Drush, Drush must be installed. See Section 3.2, “Concept: Additional
Tools”.
Steps
You can use the administrative interface or Drush to update a contributed theme. If you are
updating a custom theme rather than a contributed theme, if you see a message saying
Installing modules and themes requires FTP access to your server, or if the steps below do not
work to obtain the new theme files, follow the steps in Section 11.6, “Manually Downloading
Module or Theme Files”, and then continue with step 6 in the instructions for administrative
interface below.
1. Put your site in maintenance mode. See Section 11.2, “Enabling and Disabling Maintenance
Mode”.
188
Security and Maintenance
2. In the Manage administrative menu, navigate to Reports > Available updates > Update
(admin/reports/updates/update).
3. Find and check the theme in the list. Click Download these updates for the theme.
4. Click Continue.
5. Click Run database updates. If you obtained the new theme files manually, start with this
step, and reach the database updates page by typing the URL example.com/update.php
in your browser.
6. Click Continue to run the updates. The database update scripts will be executed.
7. Click Administration pages to return to the administration section of your site.
8. Take your site out of maintenance mode. See Section 11.2, “Enabling and Disabling Main-
tenance Mode”.
9. Clear the Drupal cache (refer to Section 12.2, “Clearing the Cache”).
Using Drush
1. Find the project name for the theme you wish to update, which is the last segment of
the theme’s project page URL. For example, if the project URL is https://www.drupal.org/
project/mayo, the project name is "mayo".
2. Run the following Drush command, giving the project name (for example, mayo) as a
parameter:
drush up mayo
3. Follow the instructions on the screen.
Attributions
189
Security and Maintenance
190
Chapter 14. Final Thoughts
Prerequisite knowledge
The Drupal project has a world-wide community of developers and users. One of the best
ways to improve your knowledge of the platform is to connect with others that are using
it, and get involved in the open-source community. There are many ways that you can get
started:
Attend an event
There are both regional and international Drupal events held around the world. See the
"DrupalCon" page on Drupal.org to find international events, and the "Event Calendar" on
groups.drupal.org or drupical.com to find regional events.
Join a local group
There are Drupal user groups all around the world. Many of them have regular meetings,
which you can attend to learn more about Drupal and connect to other Drupal users.
Find local user groups on groups.drupal.org.
Participate in a topical or language group
There are also interest groups for a wide range of topics, which have on-line discussion
forums. Find topical groups on groups.drupal.org. Many languages have their own web-
sites too; you can find them on the "Language-specific communities" page on Drupal.org.
Chat online
The Drupal project uses IRC for on-line chatting. There are regional, topical, and gener-
al-purpose chat groups available. Find out more on the "IRC" page on Drupal.org.
Report a problem
See below.
Contribute
You can contribute your time and expertise to the community in many ways, such as:
• Developing modules or themes. See the "Contribute to Development" page on
Drupal.org, or improving them (using the issue queues for existing projects).
• Translating the user interface. See localize.drupal.org.
• Writing documentation. See "Contribute to Documentation" on Drupal.org.
• Answer Support questions. See Section 14.2, “Getting Support”.
191
Final Thoughts
If you find a problem that you believe is related to security, such as a cross-site scripting
vulnerability, do not report it in the standard issue queue. Instead, report it to the security
team. See the Drupal.org page "How to report a security issue" for details.
Related topics
Section 14.2, “Getting Support”
Additional resources
• "Code of Conduct" on Drupal.org
• "Event Calendar" on groups.drupal.org or drupical.com
• "Where is the Drupal Community?" page on Drupal.org
• groups.drupal.org
• "IRC" page on Drupal.org
• "Ways to get involved" page on Drupal.org
• Drupal.org page "Why get involved?"
• Drupal.org page "Contributor tasks"
• Drupal.org page "Use the issue queue"
• Drupal.org page "Reporting a problem"
• Drupal.org page "How to report a security issue"
Attributions
14.2. Getting Support
Prerequisite knowledge
• Section 1.6, “Concept: The Drupal Project”
192
Final Thoughts
The Drupal project is open-source, so if you have questions about or problems with the
software, your options for finding answers and fixes are somewhat different from what they
would be for commercial software.
There are several options for free support provided by community volunteers. First, some
IRC channels, local groups, and language communities encourage support questions,
through on-line chat, in-person meetings, or websites (find out more about these on Sec-
tion 14.1, “Connecting with the Community”).
Second, some (but not all) contributed module, distribution, and theme projects encourage
you to post support requests in issues. Generally, projects that have a very large number of
users do not allow support requests in their issues (Drupal Core is in that category), while
projects with a smaller number of users welcome the occasional support question. Be re-
spectful of developer time and read the documentation for the project before posting a
question in an issue. On the other hand, all projects encourage you to use issues to report
problems and bugs; see Section 14.1, “Connecting with the Community” to learn more about
that.
In addition to those resources, the following sites provide free forums where volunteers
answer support questions about Drupal:
If you prefer to pay for support (presumably in exchange for more extensive service or better
availability), you can find service providers in the "Drupal Marketplace" on Drupal.org.
Related topics
Additional resources
Attributions
193
Final Thoughts
14.3. Learning More
Prerequisite knowledge
• Section 1.6, “Concept: The Drupal Project”
• Section 14.1, “Connecting with the Community”
Attributions
194
Glossary
Ajax
A web technology used to exchange data with a server to dynamically update parts of a
web page (for example, forms) without needing entire page reloads.
Alias
A user-friendly name to replace the internal path that the system assigns to a URL on the
site. For example, you might assign an alias of /about to the About page on your site, to
replace the internal path /node/5. This would give the page a URL of http://example.com/
about instead of http://example.com/node/5. See Section 5.1, “Concept: Paths, Aliases, and
URLs” for more information.
Anonymous
A person (user) interacting with the site who is not logged in. See Section 7.1, “Concept:
Users, Roles, and Permissions” for more information.
Block
A chunk of content (text, images, links, etc.) that can be displayed on a page of a site.
Blocks are displayed in regions. See Section 8.1, “Concept: Blocks” for more information.
Breakpoint
Breakpoints are used to separate the height or width of browser screens, printers, and
other media output types into steps. A responsive site adjusts its presentation at these
breakpoints. See Section 6.14, “Concept: Responsive Image Styles” for more information.
Bundle
Synonym for Entity subtype.
Cache
The site’s internal cache stores the output of time-consuming calculations, such as com-
puting output for an HTML page request, and then retrieves them instead of recalculat-
ing the next time they are needed. External caching systems can also be used on the
web server to speed up a site’s response. See Section 12.1, “Concept: Cache” for more in-
formation on the internal cache.
CMS
Acronym for Content Management System.
Configuration
Information about your site that is not content, and is meant to be more permanent than
state information, such as the name of your site, the content types and views you have
defined, etc. See Section 1.5, “Concept: Types of Data” for more information.
195
Glossary
Content
Information meant to be displayed on your site, such as text, images, downloads, etc. See
also Configuration and State. See Section 1.5, “Concept: Types of Data” for more information.
Content item
An item of content that is typically meant to be displayed as the main content of a page
on your site. This is an entity type. See Section 2.3, “Concept: Content Entities and Fields” for
more information.
Content type
An entity subtype for the content itementity type. Each content type is used for some par-
ticular purpose on the site, and each has its own fields. For example, a site for a farmers
market might have a content type for simple pages, and another for a vendor listing
page. See Section 2.3, “Concept: Content Entities and Fields” for more information.
Contextual link
A link to an administrative page for editing or configuring a feature of the site, shown
in the context where that feature is displayed. Example: a link to configure a menu that
is shown when you hover your mouse over the menu. See Section 4.1, “Concept: Adminis-
trative Overview” for more information.
Contributed
Modules, themes, and distributions that are not part of the Drupal core download, and that
can be downloaded separately from the Drupal.org website.
Cron
On some operating systems, cron is a command scheduler application that executes
commands or scripts periodically. Your site defines periodic tasks, also known as cron
tasks, that need to be triggered either by an operating system cron scheduler, or inter-
nally. See Section 13.1, “Concept: Cron” for more information.
Distribution
A single download that provides a shortcut for setting up a specific type of site, such as
a website for a club or for e-commerce. A distribution contains Drupal core, along with
contributedmodules and/or themes; many distributions also pre-configure the site or even
create sample content upon installation. See Section 1.4, “Concept: Distributions” for more
information.
Drupal core
The files, themes, profiles, and modules included with the standard project software
download. See Section 1.1, “Concept: Drupal as a Content Management System” for more
information.
Entity
An item of either content or configuration data, although in common usage, the term
often refers to content entities. Examples include content items, custom blocks, taxonomy
196
Glossary
terms, and definitions of content types; the first three are content entities, and the last is a
configuration entity. See also Entity type, Entity subtype, and Field. See Section 2.3, “Concept:
Content Entities and Fields” for more information.
Entity subtype
Within a contententity type, a grouping of entities that share the same fields. For example,
within the content item entity type, a farmers market site might have subtypes (known
as content types) for static pages and vendor pages, each with its own group of fields.
You may also see the term bundle used (especially in programmer documentation) as a
synonym of entity subtype. See Section 2.3, “Concept: Content Entities and Fields” for more
information.
Entity type
The overall type of an entity; in common usage, it is only applied to a content entity. Ex-
amples include content types, taxonomy terms, and custom blocks. See Section 2.3, “Con-
cept: Content Entities and Fields” for more information.
Field
Data of a certain type that is attached to a contententity. For instance, on a farmers mar-
ket site’s vendor content type, you might have fields for an image, the vendor descrip-
tion, and a taxonomy term. See Section 2.3, “Concept: Content Entities and Fields” for more
information.
Field bundle
Synonym for Entity subtype.
Field formatter
Configuration that defines how the data in a field is displayed. For example, a text field
could be displayed with a prefix and/or suffix, and it could have its HTML tags stripped
out or limited. See also View mode and Field widget. See Section 6.10, “Concept: View Modes
and Formatters” for more information.
Field widget
Configuration that defines how someone can enter or edit data for a field on a data entry
form. For example, a text field could use a single-line or multi-line entry box, and there
could be a setting for the size of the box. See also Field formatter. See Section 6.8, “Concept:
Forms and Widgets” for more information.
Formatter
See Field formatter.
FOSS
Acronym for Free and Open Source Software, meaning software that is developed by a
community of people and released under a non-commercial license. See also GPL. See
Section 1.6, “Concept: The Drupal Project” for more information.
GPL
Acronym for the GNU General Public License, a non-commercial software license. All soft-
ware downloaded from the Drupal.org website is licensed under the "GNU General Pub-
lic License, version 2". See also FOSS. See Section 1.7, “Concept: Drupal Licensing” for more
information.
197
Glossary
Image style
A set of processing steps that transform a base image into a new image; typical process-
ing includes scaling and cropping. See Section 6.12, “Concept: Image Styles” for more in-
formation.
LAMP
Acronym for Linux, Apache, MySQL, and PHP: the software on the web server that the
scripts commonly run on (although it can use other operating systems, web servers, and
databases). See Section 3.1, “Concept: Server Requirements” for more information.
Log
A list of recorded events on the site, such as usage data, performance data, errors, warn-
ings, and operational information. See Section 12.4, “Concept: Log” for more information.
Menu
A set of links used for navigation on a site, which may be arranged in a hierarchy. See
Section 5.6, “Concept: Menu” for more information.
Module
Software (usually PHP, JavaScript, and/or CSS) that extends site features and adds func-
tionality. The Drupal project distinguishes between core and contributed modules. See
Section 1.2, “Concept: Modules” for more information.
Path
The unique, last part of the internal URL that the system assigns to a page on the site,
which can be a visitor-facing page or an administrative page. For example, the internal
URL for the About page on your site might be http://example.com/node/5, and in this case,
the path is node/5. See also Alias. See Section 5.1, “Concept: Paths, Aliases, and URLs” for
more information.
Permission
The ability to perform some action on the site, such as editing a particular type of content,
or viewing user profiles. See also Role. See Section 7.1, “Concept: Users, Roles, and Permis-
sions” for more information.
Reference field
A field that represents a relationship between an entity and one or more other entities,
which may be the same entity type or a different type. For example, on a farmers market
site, a recipe content item might have a reference field to the vendor (also a content item)
that posted the recipe. Taxonomy term fields are also reference fields. See Section 6.4,
“Concept: Reference Fields” for more information.
Region
A defined area of a page where content can be placed, such as the header, footer, main
content area, left sidebar, etc. Regions are defined by themes, and the content displayed
in each region is contained in blocks. See Section 2.1, “Concept: Regions in a Theme” for
more information.
Responsive
A site or theme is said to be responsive if it adjusts its presentation in response to the
size of the browser screen, printer, or other media output type. See also Breakpoint. See
Section 6.14, “Concept: Responsive Image Styles” for more information.
198
Glossary
Revision
A record of the past or present state of a contententity, as it is edited over time. See Sec-
tion 2.6, “Concept: Editorial Workflow” for more information.
Role
A named set of permissions that can be applied to a user account. See Section 7.1, “Concept:
Users, Roles, and Permissions” for more information.
Security update
An update that fixes a security-related bug, such as a hacking vulnerability. See Sec-
tion 13.3, “Concept: Security and Regular Updates” for more information.
State
Information of a temporary nature about the current state of your site, such as the time
when cron was last run, etc. See also Content and Configuration. See Section 1.5, “Concept:
Types of Data” for more information.
Taxonomy
The process of classifying content. See Section 6.5, “Concept: Taxonomy” for more informa-
tion.
Taxonomy term
A term used to classify content, such as a tag or a category. See also Vocabulary. See
Section 6.5, “Concept: Taxonomy” for more information.
Text format
Configuration that defines the processing that happens to user-entered text before it is
shown in the browser. This might include stripping or limiting HTML tags, or turning
URLs into links. See Section 6.15, “Concept: Text Formats and Editors” for more information.
Theme
Software and asset files (images, CSS, PHP code, and/or templates) that determine the
style and layout of the site. The Drupal project distinguishes between core and contributed
themes. See Section 1.3, “Concept: Themes” for more information.
UI
Acronym for User Interface.
Update
A newer version of your site’s software, either Drupal core or a module or theme. See
also Security update. See Section 13.3, “Concept: Security and Regular Updates” for more
information.
User
A person interacting with the site, either logged-in or anonymous. See Section 7.1, “Con-
cept: Users, Roles, and Permissions” for more information.
User interface
The text, styles, and images that are visible on a site, separated logically into the user
interface for site visitors and the administrative user interface.
199
Glossary
View
A formatted listing of data; typically, the data comes from contententities. For example,
on a farmers market site, you might create a content item for each vendor. You could
then make view that generates a listing page that shows a thumbnail image and short
description of each vendor, linking to the full-page content item. Using the same data,
you could also make a view that generates a new vendors block, which would show in-
formation from the most recently added vendors. See Section 2.4, “Concept: Modular Con-
tent” for more information.
View mode
A set of field formatterconfiguration for all of the fields of a contententity, some of which
may be hidden. Each entity subtype can have one or more view modes defined; for ex-
ample, content types typically have Full and Teaser view modes, where the Teaser view
mode displays fewer or trimmed-down fields. See Section 6.10, “Concept: View Modes and
Formatters” for more information.
Vocabulary
A group of taxonomy terms to choose from when classifying content in a particular way,
such as the list of all of the vendor categories on a farmers market site. Technically, vo-
cabularies are the entity subtype for the taxonomy term entity type. See Section 6.5, “Con-
cept: Taxonomy” for more information.
Widget
See Field widget.
Wizard
A web form that allows you to fill in a few values, and creates something with sensible
defaults based on the values you chose. For example, there are wizards for creating views
of different types. See Section 9.3, “Creating a Content List View” for more information.
WYSIWYG
Acronym for What You See is What You Get, meaning a method for editing content where
what you see on the editing screen closely resembles the final product. See Section 6.16,
“Configuring Text Formats and Editors” for more information.
200
Index creating, 112
creating from a view, 127
definition, 195
entity type, 13
A overview, 112
Account setting
placing in a region, 115
configuring, 40
Breadcrumb region
Admin Toolbar module
overview, 10
downloading, 148
Breakpoint
installing, 148
definition, 195
Administration
overview, 94
overview, 32
Bug
Administrative interface
reporting, 181, 191
using to update the core software, 183
Bundle
Administrative menu
definition, 195
overview, 32, 54
Administrative user account
C
overview, 98
Cache
Ajax
clearing, 172
definition, 195
definition, 195
Alias
overview, 171
definition, 195
rebuilding, 172
overview, 47
Chatting online, 191, 193
Anonymous
CKEditor module
definition, 195
configuring, 95
Anonymous user
CKEditor text editor
overview, 98
default assignment to text format, 95
Apache web server
CMS (Content Management System)
version requirements, 20
definition, 195
Appearance menu entry
overview, 1
administrative menu, 32
Coder tool
Attributions for this document, 211
overview, 21
Authenticated user
Color scheme
overview, 98
configuring, 42
Author
Comment entity type
assigning, 109
overview, 13
Automated Cron module
Comment module
configuring, 178
entity type, 13
overview, 178
Community
connecting with, 191
B Composer tool
Backup overview, 21
overview, 174 using to download modules, 162
Bartik theme using to download the core software, 162
configuring, 42 using to download themes, 162
regions in, 10 Composite page
Basic page creating with modular content, 15
creating, 48 Configuration
Block as a type of data, 6
201
Index
202
Index
203
Index
204
Index
205
Index
L main, 54
Label overview, 54
translating, 139 user account, 54
LAMP (Linux Apache MySQL PHP) Menu items
definition, 198 reordering, 58
Language Menu region
adding, 133 overview, 10
Language module Menu UI module
installing, 133 overview, 3
overview, 132 Metadata
Layout creating, 74
planning, 11 Microsoft IIS web server
Learning resource version requirements, 20
link to, 194 Modular content
Legal overview, 15
overview, 8 Module
Licensing Admin Toolbar, 148
overview, 8 CKEditor, 95
Linux Apache MySQL PHP (LAMP) Comment, 13
definition, 198 Configuration Manager, 168
Listing content Configuration Translation, 132, 133
using Views module to, 120 Contact, 13
Live site Content Translation, 132, 133
synchronizing with development site, 168 contributed, 3, 148
Locale setting core, 3
configuring, 34 custom, 148
Log Custom Block, 13
definition, 198 definition, 198
overview, 175 downloading, 148, 157, 162
Logo image Dynamic Page Cache, 171
configuring, 42 Editor, 95
enabling, 36, 148
evaluating, 142
M Field, 3
Maintenance mode Field UI, 3
disabling, 146 File, 13
enabling, 146 Filter, 95
overview, 146 finding, 142
Manage administrative menu Image, 120
overview, 32 installing, 36, 148
Manually downloading module or theme Interface Translation, 132, 133
files Internal Page Cache, 171
overview, 157 Language, 132, 133
Menu Menu UI, 3
adding a link to page, 56 Node, 3, 13
administrative, 54 overview, 3
custom, 54 Taxonomy, 13
definition, 198 uninstalling unused, 38
footer, 54 Update Manager, 148, 154
206
Index
207
Index
208
Index
209
Index
User module W
entity type, 13 Web installer
overview, 3 running, 26
User one using to install the core software, 23
definition, 199 Web server
User profile entity type installation requirements, 20
overview, 13 What You See Is What You Get (WYSIWYG)
User reference field configuring editor, 95
adding, 79 definition, 200
overview, 72 Widget
User role definition, 197, 200
changing, 107 overview, 82
creating, 100 Wizard
overview, 98 definition, 200
User-entered content WYSIWYG (What You See Is What You Get)
filtering, 94 configuring editor, 95
definition, 200
V
View X
adding block display to, 127 XSS (Cross-site scripting)
and modular content, 15 preventing, 94
contextual filters part, 119
creating, 120
definition, 200
display part, 119
duplicating, 124
fields part, 119
filter criteria part, 119
format part, 119
overview, 118
parts of, 119
relationships part, 119
sort criteria part, 119
translating, 139
View mode
definition, 200
overview, 86
Views module
adding to a view, 127
creating a view, 120
duplicating a view, 124
overview, 3, 15, 118
Views UI module
overview, 3
Vocabulary
creating, 74
definition, 200
overview, 13, 73
210
Appendix A. Appendix
A.1. Guide-Wide Attributions
This guide was written by contributors to the Drupal open-source project, and is licensed
under the CC BY-SA 2.0 license. See Section i.1, “Copyright” for more information. Details about
the contributors for guide-wide tasks are below. For individual topics, the attributions for
writing, editing, and/or translating are at the end of each topic.
• The glossary was written and adapted by Jennifer Hodgdon, with parts from "Glossary",
"Overview of Configuration (vs. other types of information)", and "Working with breakpoints in
Drupal 8", each copyright 2000-2016 by the individual contributors to the Drupal Commu-
nity Documentation.
• The index was improved and curated by Anna van Raaphorst.
• Topic summaries were written by Jojy Alphonso at Red Crackle.
211
Appendix
• Zach Carter
• A workshop organized by the "Spokane Drupal User Group" on groups.drupal.org, with stu-
dents from the Web Development Certificate program at Spokane Community College
Images
Most of the images in the guide are screen captures from the Drupal software, generated
by software written by Jennifer Hodgdon.
The word Drupal, the Druplicon logo (which appears as part of several images throughout
the guide), and the Drupal wordmark logo (which is part of the cover image), are registered
trademarks of Dries Buytaert).
The cover image is a CC BY-SA 2.0 licensed illustration by Amanda Luker at Advomatic.
The Anytown Farmers Market logo, which appears as part of several images throughout the
guide, is a CC BY-SA 2.0 licensed illustration by Justin Harrell at Drupalize.Me.
The honey bee image, which appears as part of several images throughout the guide, is a
public domain image by John Severns at the English Wikipedia project via Wikimedia Commons.
The farm image, which appears as part of several images throughout the guide, is a public
domain image by Xianmin Chang via Wikimedia Commons.
The salad image, which appears as part of several images throughout the guide, is a public
domain image by Yinan Chen via Wikimedia Commons.
The carrot image, which appears as part of several images throughout the guide, is public
domain image K11611-1 by Stephen Ausmus at the Agricultural Research Service of the United
States Department of Agriculture via Wikimedia Commons.
212