Preface What this book covers What you need for this book Who this book is for Conventions Reader feedback Customer support Downloading the example code Downloading the color images of this book Errata Piracy Questions Developer Workflow Deciding on a local AMP stack The role of Composer Installing Composer locally Installing Composer globally Using Composer to create a Drupal project Speeding up tasks using Drush Using Drush wrapper Installing Drush globally Using Drush to create a Drupal project A quick look at Drupal Console Accessing Drupal Console locally Installing Drupal using Drupal Console Installing Drupal Console globally Running a built-in PHP web server Using Git to manage source code Installing Git Configuring Git Creating a remote repository Setting up a local repository Tracking and committing files with Git Adding a remote origin Pushing files to the remote repository Virtualizing an environment Using Drupal VM as a web starter Summary Site Configuration Assumptions Exploring Drupal's interface Managing Drupal Basic site settings SITE DETAILS FRONT PAGE ERROR PAGES Performance Clearing cache Using Drush to clear cache Using Drupal Console to clear the cache Configuration overrides Using Drush to manage configuration Listing configuration variables Retrieving specific variables Setting configuration variables Using Drupal Console to manage configuration Listing configuration variables Retrieving specific variables Setting configuration variables Working with the File system Managing file paths Regional settings Date and time formats Adding new date formats Summary Managing Users, Roles, and Permissions Assumptions Exploring People Managing roles and permissions What is a role? Creating a role Reordering roles Editing a role Setting permissions Working with users Adding a user Bulk updating users Configuring Account settings CONTACT SETTINGS ADMINISTRATOR ROLE REGISTRATION AND CANCELLATION Managing user fields Adding fields Managing form display Using Drush to manage roles Listing roles Creating roles Deleting roles Listing permissions Adding permissions Removing permissions Using Drush to manage users Displaying user information Assigning roles Removing roles Blocking a user Unblocking a user Creating user accounts Cancelling user account Resetting passwords Creating a one-time login Summary Content Types, Taxonomy, and Comment Types Assumptions Exploring Content types Submission form settings Preview before submitting Publishing options Managing revisions Reverting content Display settings Menu settings Managing fields Field settings Creating custom content types Managing fields using the Field UI Deleting fields Adding new fields Author field Teaser field Content field Featured Image field Taxonomy, Vocabularies, and Terms Adding a vocabulary Adding terms Adding a Taxonomy field Working with Comment types Adding a Comment type Adding Comment type field Working with form and content display Reordering fields Modifying Field Widgets Disabling fields Using Drupal console to generate dummy content Creating vocabularies Creating comments Creating nodes Summary Working with Blocks Assumptions Block layout and Regions Demonstrating block regions Placing blocks into regions Block configuration, settings, and visibility Managing the block title Using the Contextual menu Managing visibility settings Content types restriction Page restriction Role restriction Creating a custom block Defining the Region Exploring the Custom block library Editing custom blocks Managing block types Adding fields to blocks Manage form display Reordering fields Modifying field formats Managing display Using the Place block interface Deleting Blocks from Block layout Summary Content Authoring, HTML5, and Media Assumptions Responsive admin CKEditor and text formats Text formats Toolbar configuration CKEditor plugin settings and filters Enabled filters Filter processing order Filter settings Working with images Image alignment Image captions Managing displays Reordering fields Controlling labels Using Field Formatters Formatting a date field Managing the Teaser display Using Better preview Custom Display settings Adding a view mode Image styles Configuring image styles Adding image styles Quick edit Summary Understanding Views Customized lists of contents View displays Creating view pages and blocks Block display Working with filter criteria and sorting Rearrange filter criteria Expose filters Formatting rows Row styling Fields Content Field formatting View formats Unformatted list Grid HTML List Table Using advanced features Relationships Contextual filters Display all results for the specified field Provide a default value Hide view Display a summary Display contents of "No results found" Display "Access Denied" Query aggregation AJAX Summary Theming Essentials Assumptions What is a theme? Exploring the Appearance interface Drupal's core themes Bartik Seven Stark Classy Theme states Installed themes Uninstalled themes Default theme Installing and uninstalling themes Step one - installing a theme Step two - uninstalling a theme Theme settings Toggling the display of page elements Logo image settings Favicon settings Theme-specific settings Using prebuilt themes Folder structure and naming conventions Managing configuration in Drupal 8 Reviewing the new info.yml file Metadata Libraries Defining a library Overriding libraries Extending libraries Attaching a library Using Twig to attach a library Using the preprocess functions to attach a library Regions Adding assets to CKEditor The role of templates in Drupal How templates work Where to find templates Creating a simple theme Step one - creating a new folder Step two - create an info file Step three - create a libraries file Step four - copy core templates Step five - include a screenshot Step six - installing our theme Summary Working with Twig Assumptions Configuring settings.local.php Enabling local development services Disabling render and page cache Disabling test modules and themes Enabling Twig debug Twig fundamentals Commenting variables Setting variables Printing variables Dumping variables Filters Control structures Functions Template variables The role of the theme file in Drupal Preprocessors and hooks Working with libraries Adding assets Creating a library reference Including our library Introducing web fonts Creating our Jumbotron Block Step one - Creating a custom block Step two - Adding a new Jumbotron block Step three - Placing the Jumbotron block Page template Node template Block template Field templates Summary Extending Drupal Using Drush Using Composer Creating a new module Understanding configuration and plugins YAML Plugins Annotations Anatomy of a plugin manager Working with dependency injection Services Creating your own service Services definition file abstract alias calls configurator factory parent properties public scope tags Service implementation Using your service Permissions Routing and menus Basic routing Display methods _form _entity_view _entity_list _entity_form Handling arguments Requirements checking Route matching _module_dependencies _method Parameter matching Access tests _permission _role _access _entity_access _csrf_token Dynamic routes Menu links Local tasks Local actions Contextual links Events and hooks Using the EventDispatcher Summary Working with Forms and the Form API Creating and managing forms Creating a new form Using FormState Other form types Exploring the Form API New Form API types Color Details Dropbutton HTML tag Language select Link More link Pager Path element Table select URL Using AJAX Summary RESTful Services Overview of REST REST in Drupal 8 HTTP verbs HAL JSON Enabling core modules and customizing permissions Exposing content using Views Using RESTful endpoints Displaying content Unsafe methods and CSRF protection Creating content Updating content Deleting content Authenticating an application as a Drupal user Core methods Contrib methods Creating REST resources Using parameters Using the current user Summary Multilingual Capabilities Enabling core multilingual modules Language Interface Translation Content Translation Configuration Translation Installing and configuring languages Adding language detection Account administration pages URL Session User Browser Selected language Content language detection Working with language switching blocks Translating content Translating the Drupal admin UI Using the multilingual API PHP code JavaScript YML files Annotations Twig templates Summary Configuration Management Configuration Management files File format Schema Scalar values Mapping Sequence Reusable types Dynamic type references Override system Differences between configuration and state Using the Config object Configuration interface Synchronize configuration Exporting single configuration Importing single configuration Exporting whole site configuration Importing whole site configuration Configuration workflow with Drush Configuration and multilingual sites Configuration forms Configuration translation User interface translation Summary Site Migration Enabling core modules to migrate content Using Drupal 8's Migrate to handle migrations Extending migrations with contributed modules Building a migration process Creating a migration source Creating a migration processor Using Drush to manage migrations Summary Debugging and Profiling Enabling core debugging Disabling caching Enabling Twig debugging Debugging cache performance Working with Devel and Kint Installing the Devel module Printing variables Printing backtrace Using the Web Profiler Installing the Web Profiler module Request information Processing timeline Performance timing Debugging queries Debugging Views Summary