® BOOKS FOR PROFESSIONALS BY PROFESSIONALS Barnett Drupal 8 for Absolute Beginners Drupal 8 for Absolute Beginners is your definitive guide to starting from scratch with Drupal, one of the most powerful and popular content management systems available today. This book first teaches basic site building using out of the box Drupal features and modules, Drupal 8 user management, blog building, permissions, and views. Then the book teaches you the basics of HTML, CSS, JavaScript, and PHP in relation to Drupal. Using CSS, JavaScript and PHP you’ll learn how to create your own custom web pages and blocks in Drupal 8. You will then learn to create your own custom theme for Drupal, customizing everything to your liking, before publishing your work to the world. The book teaches basic web site building, and also covers custom module development, and some more advanced topics that beginners often ask about, such as getting set up with Git (the Drupal community’s preferred source control system), using MySQL to interact with a database, and a guide to getting up and running with Linux. Rarely has all the knowledge required to start with Drupal been collected in one place as it is in Drupal 8 for Absolute Beginners. You need no prior knowledge of the Web, only a desire to learn. Start your Drupal journey with this book today! • Written for beginners to Drupal and web programming • Learn what Drupal can do and how you can master it • Use all of the common web technologies in conjunction with Drupal • Create and apply a theme to your Drupal site • Start your journey into more advanced topics, such as Git, MySQL, and Linux US $ 34.99 Shelve in: ISBN 978-1-4302-6466-8 53499 Web Development/General User level: Beginning SOURCE CODE ONLINE 9781430264668 www.apress.com Drupal 8 for Absolute Beginners James Barnett Drupal 8 for Absolute Beginners Copyright © 2015 by James Barnett This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed. Exempted from this legal reservation are brief excerpts in connection with reviews or scholarly analysis or material supplied specifically for the purpose of being entered and executed on a computer system, for exclusive use by the purchaser of the work. Duplication of this publication or parts thereof is permitted only under the provisions of the Copyright Law of the Publisher’s location, in its current version, and permission for use must always be obtained from Springer. Permissions for use may be obtained through RightsLink at the Copyright Clearance Center. Violations are liable to prosecution under the respective Copyright Law. ISBN-13 (pbk): 978-1-4302-6466-8 ISBN-13 (electronic): 978-1-4302-6467-5 Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights. While the advice and information in this book are believed to be true and accurate at the date of publication, neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or omissions that may be made. The publisher makes no warranty, express or implied, with respect to the material contained herein. Managing Director: Welmoed Spahr Lead Editor: Ben Renow-Clarke Technical Reviewer: Massimo Nardone Editorial Board: Steve Anglin, Mark Beckner, Ewan Buckingham, Gary Cornell, Louise Corrigan, Jim DeWolf, Jonathan Gennick, Jonathan Hassell, Robert Hutchinson, Michelle Lowman, James Markham, Matthew Moodie, Jeff Olson, Jeffrey Pepper, Douglas Pundick, Ben Renow-Clarke, Dominic Shakeshaft, Gwenan Spearing, Matt Wade, Steve Weiss Coordinating Editor: Mark Powers Copy Editor: Lori Jacobs Compositor: SPi Global Indexer: SPi Global Artist: SPi Global Cover Designer: Anna Ishchenko Distributed to the book trade worldwide by Springer Science+Business Media New York, 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail [email protected], or visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation. For information on translations, please e-mail [email protected], or visit www.apress.com. Apress and friends of ED books may be purchased in bulk for academic, corporate, or promotional use. eBook versions and licenses are also available for most titles. For more information, reference our Special Bulk Sales–eBook Licensing web page at www.apress.com/bulk-sales. Any source code or other supplementary material referenced by the author in this text is available to readers at www.apress.com. For detailed information about how to locate your book’s source code, go to www.apress.com/source-code/. This is dedicated to my wonderful family, who has supported me while writing this book and throughout all my endeavors. Thank you to Annette, Harry, Greyson, Phoebe, and our parents for their advice and support. Contents at a Glance About the Author �����������������������������������������������������������������������������������������������������xv About the Technical Reviewer �������������������������������������������������������������������������������xvii Acknowledgments ��������������������������������������������������������������������������������������������������xix Introduction ������������������������������������������������������������������������������������������������������������xxi ■ Chapter 1: Installing Drupal ����������������������������������������������������������������������������������1 ■ Chapter 2: Site Building: Building Drupal Sites Without Programming �����������������7 ■ Chapter 3: Getting Started with HTML �����������������������������������������������������������������39 ■ Chapter 4: Creating a Basic Drupal Module with HTML Output ���������������������������57 ■ Chapter 5: A CSS Primer for Drupal ���������������������������������������������������������������������73 ■ Chapter 6: Adding CSS to Your Drupal Module ����������������������������������������������������91 ■ Chapter 7: A JavaScript Primer for Drupal ����������������������������������������������������������97 ■ Chapter 8: Adding JavaScript to Your Drupal Module ���������������������������������������119 ■ Chapter 9: A PHP Primer for Drupal ������������������������������������������������������������������125 ■ Chapter 10: Adding PHP-Generated Output to Your Drupal Module�������������������143 ■ Chapter 11: Creating a Drupal Block Programmatically and Basic MySQL Usage �����������������������������������������������������������������������������������������������������147 ■ Chapter 12: Theming Your Site Part 1: Theme Functions and a Twig Primer ����167 ■ Chapter 13: Theming Your Site Part 2: Creating a Custom Theme and Subtheme����������������������������������������������������������������������������������������������������189 ■ Chapter 14: Working with Forms and Creating Custom Forms �������������������������205 v ■ Contents at a GlanCe ■ Chapter 15: Using Git to Manage Your Source Code ������������������������������������������227 ■ Chapter 16: Advanced MySQL Primer ����������������������������������������������������������������249 ■ Chapter 17: Linux ����������������������������������������������������������������������������������������������271 ■ Chapter 18: Publishing Your Site to a Production Linux Box �����������������������������293 ■ Appendix A: Other Ways to Install Drupal ����������������������������������������������������������321 ■ Appendix B: Basic Linux Commands �����������������������������������������������������������������331 Index ���������������������������������������������������������������������������������������������������������������������333 vi Contents About the Author �����������������������������������������������������������������������������������������������������xv About the Technical Reviewer �������������������������������������������������������������������������������xvii Acknowledgments ��������������������������������������������������������������������������������������������������xix Introduction ������������������������������������������������������������������������������������������������������������xxi ■ Chapter 1: Installing Drupal ����������������������������������������������������������������������������������1 Installing Acquia Dev Desktop ������������������������������������������������������������������������������������������1 Installing Drupal 8 ������������������������������������������������������������������������������������������������������������1 Configuring Drupal 8 ��������������������������������������������������������������������������������������������������������3 Summary ��������������������������������������������������������������������������������������������������������������������������6 ■ Chapter 2: Site Building: Building Drupal Sites Without Programming �����������������7 Setting a New Site Title and Logo ������������������������������������������������������������������������������������7 Adding More Users to Your New Drupal site ���������������������������������������������������������������������8 Assigning Roles and Permissions to Site Users ���������������������������������������������������������������9 Creating a Blog ���������������������������������������������������������������������������������������������������������������11 Editing and Customizing Your Blog Post �����������������������������������������������������������������������������������������������14 Adding More Fields to Your Blog Node �������������������������������������������������������������������������������������������������18 Working with Blocks �������������������������������������������������������������������������������������������������������19 Working with Views ��������������������������������������������������������������������������������������������������������24 Changing Your Site’s Theme �������������������������������������������������������������������������������������������30 Installing a Theme Using Drush (Preferred Method) �����������������������������������������������������������������������������30 Installing a Theme from a URL ��������������������������������������������������������������������������������������������������������������34 vii ■ Contents Installing New Add-on Modules �������������������������������������������������������������������������������������35 Installing a Module Using Drush (Preferred Method) ����������������������������������������������������������������������������35 Installing a Module from a URL ������������������������������������������������������������������������������������������������������������37 Summary ������������������������������������������������������������������������������������������������������������������������37 ■ Chapter 3: Getting Started with HTML �����������������������������������������������������������������39 Creating Your First Web Page �����������������������������������������������������������������������������������������39 Adding Comments to Your HTML ������������������������������������������������������������������������������������44 Working with Images������������������������������������������������������������������������������������������������������44 Creating Lists �����������������������������������������������������������������������������������������������������������������46 Creating Tables ���������������������������������������������������������������������������������������������������������������47 Adding Anchors ��������������������������������������������������������������������������������������������������������������48 Creating Forms ���������������������������������������������������������������������������������������������������������������51 Text Fields ���������������������������������������������������������������������������������������������������������������������������������������������52 Password Fields �����������������������������������������������������������������������������������������������������������������������������������52 Radio Buttons ���������������������������������������������������������������������������������������������������������������������������������������52 Drop-downs ������������������������������������������������������������������������������������������������������������������������������������������53 Text Areas ���������������������������������������������������������������������������������������������������������������������������������������������53 “Submit” Buttons����������������������������������������������������������������������������������������������������������������������������������53 All Together Now �����������������������������������������������������������������������������������������������������������������������������������54 Using Layout Elements ���������������������������������������������������������������������������������������������������55 Summary ������������������������������������������������������������������������������������������������������������������������56 ■ Chapter 4: Creating a Basic Drupal Module with HTML Output ���������������������������57 Working with the Drupal Docroot Directory ��������������������������������������������������������������������57 Creating a Basic Drupal Module �������������������������������������������������������������������������������������58 Looking at the Model, View, Controller Design Pattern���������������������������������������������������63 Showcasing Different HTML Elements Within the Drupal Module ����������������������������������64 Renaming a Module—and How to Create a Module Not Named “hello_world” ������������71 Summary ������������������������������������������������������������������������������������������������������������������������72 viii ■ Contents ■ Chapter 5: A CSS Primer for Drupal ���������������������������������������������������������������������73 A Quick Look Back at the Limits of HTML ����������������������������������������������������������������������73 Styling Your Text with an External Style Sheet ���������������������������������������������������������������74 Using <div> and <span> Tags ���������������������������������������������������������������������������������������75 Commenting Your CSS ����������������������������������������������������������������������������������������������������76 Creating Additional Styles ����������������������������������������������������������������������������������������������76 Choosing Between Classes and IDs �������������������������������������������������������������������������������78 Working with Conflicting Styles �������������������������������������������������������������������������������������79 Using Internal Style Sheets ��������������������������������������������������������������������������������������������80 Using Inline Styles ����������������������������������������������������������������������������������������������������������81 Understanding the Cascade Order ���������������������������������������������������������������������������������81 Working with Commonly Used CSS Styles ���������������������������������������������������������������������82 Text Styles ��������������������������������������������������������������������������������������������������������������������������������������������82 Fonts and Font Sizes ����������������������������������������������������������������������������������������������������������������������������83 Links �����������������������������������������������������������������������������������������������������������������������������������������������������84 Tables ���������������������������������������������������������������������������������������������������������������������������������������������������84 Working with the CSS Box Model �����������������������������������������������������������������������������������88 Summary ������������������������������������������������������������������������������������������������������������������������90 ■ Chapter 6: Adding CSS to Your Drupal Module ����������������������������������������������������91 Using CSS Within Your ���������������������������������������������������������������������������������������������������91 Summary ������������������������������������������������������������������������������������������������������������������������95 ■ Chapter 7: A JavaScript Primer for Drupal ����������������������������������������������������������97 Getting Started with JavaScript �������������������������������������������������������������������������������������97 Adding Basic JavaScript to a Web Page �������������������������������������������������������������������������99 Installing Firebug ����������������������������������������������������������������������������������������������������������101 Using Firebug ���������������������������������������������������������������������������������������������������������������102 Modifying JavaScript Code �������������������������������������������������������������������������������������������104 ix ■ Contents Working with JavaScript Programming Constructs ������������������������������������������������������106 Variables ���������������������������������������������������������������������������������������������������������������������������������������������106 Arrays �������������������������������������������������������������������������������������������������������������������������������������������������108 Objects ������������������������������������������������������������������������������������������������������������������������������������������������108 Booleans ���������������������������������������������������������������������������������������������������������������������������������������������109 Creating JavaScript Events ������������������������������������������������������������������������������������������109 Using the jQuery Library �����������������������������������������������������������������������������������������������112 Using the jQuery Library with Events ���������������������������������������������������������������������������116 Summary ����������������������������������������������������������������������������������������������������������������������118 ■ Chapter 8: Adding JavaScript to Your Drupal Module ���������������������������������������119 Adding JavaScript to Your Drupal Module ��������������������������������������������������������������������119 Summary ����������������������������������������������������������������������������������������������������������������������123 ■ Chapter 9: A PHP Primer for Drupal ������������������������������������������������������������������125 Verifying Your Installation of PHP ���������������������������������������������������������������������������������125 Serving Up a Hello World Web Page with PHP ��������������������������������������������������������������126 Working with Some Basic PHP Code ����������������������������������������������������������������������������127 Working with PHP Looping Structures �������������������������������������������������������������������������130 Using the foreach Loop �����������������������������������������������������������������������������������������������������������������������130 Using the while Loop ��������������������������������������������������������������������������������������������������������������������������131 Printing to the Screen ��������������������������������������������������������������������������������������������������132 Using If, If Else, and Else If Statements ������������������������������������������������������������������������133 Switch Statements �������������������������������������������������������������������������������������������������������134 Working with Strings ����������������������������������������������������������������������������������������������������135 strlen ��������������������������������������������������������������������������������������������������������������������������������������������������135 strpos and stripos �������������������������������������������������������������������������������������������������������������������������������135 Using Functions ������������������������������������������������������������������������������������������������������������136 Functions Operating on Arrays �������������������������������������������������������������������������������������138 Summary ����������������������������������������������������������������������������������������������������������������������141 x