With the development and release of version 7, Drupal continues to demonstrate why it is an excellent choice for non-technical site owners seeking a top-notch content management system. In addition, Drupal 7 offers even more capabilities than its predecessor for Web developers who want to wield its impressive capabilities, and are willing to climb its (notoriously steep) learning curve in order to do so. Both types of Drupal users can benefit from the growing list of books that explain how to get the most out of this CMS. But people new to Drupal need a book that aims to explore all the basics of Drupal, such as David Mercer's update of his Drupal 6 book.
Drupal 7: Create and operate any type of website quickly and efficiently was published by Packt Publishing on 7 September 2010, under the ISBN 978-1849512862. On the publisher's page, visitors can find out more about this book, peruse its table of contents, download a sample chapter (the third one, "Configuration and Reports"), purchase the book (in print and/or electronic format), or read the errata submitted so far (one item, as of this writing). The book's exercises are available from the author's site and require (free) reader registration. The book's material composes 416 pages in total, and is divided among eleven chapters, plus an appendix.
The first chapter, "Introduction to Drupal", is essentially that, comprising a brief history of Drupal's origins, uses, community, license, and the technologies upon which it depends (in this case, opting for MySQL instead of PostgreSQL for the database management system). The author demonstrates how to install one such technology stack on a Windows platform (using XAMPP), and then Drupal 7 on top of that. He then explains how the reader — at that point a newly-minted Drupal administrator — can check the post-installation status of her new site, and build a simple home page consisting of a blog post, a poll, and a site-search form. This preliminary material is the right choice for an introductory text such as this one, and should be of value to anyone who has not installed or configured a Drupal site before. The explanations contain enough detail to make it straightforward for the average reader to get started, provided that she is using Microsoft Windows, because the Linux and Mac operating systems are not addressed. Aside from that, the treatment is marred only when the author incorrectly states that "If a webpage is not in htdocs, then it is not possible to browse it" (page 29). Actually, the configuration setting DocumentRoot in httpd.conf makes it possible for any Web page anywhere on a computer to be made visible to Apache, independent of any "htdocs" directory. Incidentally, in the screenshot on page 47, the area labels "4" and "5" are missing, or their foreground colors match the background colors, making them invisible.
In the second chapter, "Basic Functionality", readers learn the essentials of using core modules — for building forums, enabling comments, and adding search capabilities to a site — and how to install and update contributed modules. The author should have explained the difference between the sites/all and sites/default directories (page 66) — a frequent question from beginners — and how a "modules" subdirectory in either one of those directories differs from the core "modules" directory (in the site's root directory). Readers having problems with a module, will likely be baffled by the first sentence on page 67, which advises that they consult the "readme" file in the "modules" folder, which would be pointless, because sites/all/modules/README.txt (new in Drupal 7, by the way) contains no module troubleshooting information. Readers next learn how to add and configure blocks, with a clear discussion weakened only by the screenshot on page 70, which may prove frustrating because the author has not indicated which theme to use in order to get that listing of regions and blocks. The chapter concludes with an overview of Drupal's default menus, and how to create custom menus. On two occasions (pages 81 and 88), the author implies that Garland is the default theme, but that is no longer true in Drupal 7.
Configuration and reports are critical to developing a site that works well at launch, and continues to do so as it gains greater usage and as Drupal security updates are released. In the third chapter, the author explores most of the subsections within the Configuration and the Reports sections in the Drupal admin area, with emphasis upon the settings and notifications most commonly accessed. Readers may be confused by the statement that the cron setting is found at the bottom of the "Site information" page, which was true with Drupal 6, but now it has its own page in Drupal 7. The author states that "clean URLs are needed in order for your site to be properly indexed by Google and other search engines" (page 109), but that is false, because Drupal's clean URL facility simply removes the "?q=", which nowadays has little to no impact on search bots and their indexing. Rather, usage of descriptive URLs is the key practice, and that is controlled by the Path module, and not clean URLs. Aside from those flaws, the chapter should be of interest even to experienced Drupal site builders, given the changes since version 6.
The fourth chapter explore Drupal roles, permissions, users, and profiles — with plenty of good advice on the value of limiting user permissions for security. This material has only a few flaws, such as a poorly designed diagram on page 119. For any newcomer to Drupal who is unsure of the exact meaning of the (ever-growing) module permissions, the author provides a helpful list of verbs and their definitions — a feature possibly unique to this book. Unfortunately, this list is followed by a confusing example of setting permissions, in which the author suggests that the reader jump ahead to a different part of the book to try to figure out the current part — something done too often. The section on profiles is perplexing, because it assumes that the Profile module is still in Drupal core, which is no longer true in version 7. (Instead, site builders should use the Profile2 module, or add fields to the Drupal user type.) This illustrates a downside to writing a book on software still in beta. Oddly, the author refers to a textarea as a "freeform list" (page 138), even though a textarea is not a list. The last section covers OpenID use within Drupal.
The next three chapters address the concept central to any website based on a CMS, namely, content. It is for this reason that some readers may conclude that these chapters should have been presented much earlier in the book. Nonetheless, the material offers a good overview of Drupal content management, with explanations of the content types automatically defined by Drupal's core modules, the various options associated with each type, as well as how to create and administer nodes. Incidentally, on page 159, in the discussion of path modules and SEO, "content aliasing" is incorrect and should instead read "URL aliasing". Readers learn how to use the Aggregator core module (for publishing content from other sources) as well as the Book module (for organizing nodes as "pages" in a "book"). Chapter 6 shows how to create new content types, add fields to them, modify how they are displayed, define taxonomy vocabularies, and enable tagging of nodes. Careful readers will note that the author's definition of a thesaurus vocabulary is inconsistent with his use of the concept in describing a set of tagging terms (page 211). The chapter concludes with a detailed explication of text input formats, which is a topic that can easily trip up new Drupal developers when content inside of filtered tags is not displayed as expected. The only flaw is in the "Special PHP format", which should not have "Display any HTML as plain text" enabled. Chapter 7 examines multimedia content, including images, attached files, embedded video, and WYSIWYG editors (focusing on CKEditor) — but sadly no discussion of audio or Flash files.
Aside from actually programming a new Drupal module or theme from scratch, one of the most daunting challenges for someone new to Drupal, is learning the intricacies of the Views module and user interface, which are quite powerful, yet can be overwhelming. It is for this reason that the author's treatment of the topic would have benefited by starting first with the basics, such as fields, instead of displays, overrides, etc. Also, readers may be confused by his reference to "Machine Name", because in both Drupal 6 and 7, the Views module does not use that label. Yet any decent explanation of Views is helpful to the uninitiated. Chapter 8 concludes with a section on how to customize the appearance of views. But the author recommends that readers go through the next chapter, "Drupal Theming", beforehand — sound advice that should have alerted the author and publisher that the view theming section would have been better located at or near the end of the chapter that introduces Drupal theming in general, Chapter 9. It discusses theme files, theming from scratch (vaguely), and base themes / sub-themes (much more thoroughly).
Because this is one of the lengthier Drupal books available, prospective readers may wonder if it achieves its goals, and does so intelligibly. Unfortunately, the subtitle of the book is quite misleading, since the book does not show how to create any type of website; rather, it presents the key concepts that someone will need to understand as a foundation for creating Drupal sites. As with many programming books, the presentation could have been better polished. Some of the sentences are convoluted, and many of the passages are oddly worded — even to the point of being nonsensical. For instance, "whose filename you want to see" (page 66) was used to communicate "the module you want to use", and "shown on a poster" (page 190) was meant to convey "shown to the user". The term "was" is incorrectly substituted for "were" (such as on page 1). Semicolons are frequently used where commas or dashes would be correct, and vice versa. Commas are occasionally used where periods are called for, or neglected entirely where pauses occur within sentences. Most of the bulleted lists comprising complete sentences, are missing periods, with a notable exception on page 20, whose last sentence is incorrectly terminated with a comma. Throughout the chapter on theming, vertical bars were used to separate directory names in a path, which likely has never been done in any other book, for good reason. This sloppy writing slows down the reader, because it forces her to reread the sentence just to parse it correctly and understand its intent. The publisher's editors should have detected and fixed these problems.
In addition, the book contains some errata: "a while" (pages 27, 103, 116), "50 Meg" (50 girls named Meghan?!; page 27), "Most recent polls" (should read "Poll"; page 47), "the Drupal site" (should read "Drupal.org"; page 49), "organize [a] wildlife… forum" (page 55), "or [the] other" (59), "an URL" (66), "module[']s folder" (67), "select[ed] pages" (72), "Panels [is] in" (87), "implemented [on] or" (106), "about them[selves]" (135), "to the any user" (139), "remove [it] from" (164), "site prebuilder" (172), "a species' title" (189), "list of the all the" (203), "completeness' sake" (209), "ok[ay]" (217), "upload" (should read "download"; 220), "defaults as it is" (224), "on on" (228), "css" (228), "second [to] last" (285), "views-view-field-[-]latest-blog-posts--title.tpl.php" (292), "implemented [them] on" (305), "parents'" (307), "into" (should read "it to"; 330), "compliment" (337), and "as [it] is" (378). Yet in spite of the usual lack of thorough editing by the publisher, readers should not have difficulties understanding the material.
Each chapter concludes with a summary, but as with most other programming books, the summaries are of no use, and in this case simply add bulk to an already lengthy book. The exercises are helpful for any readers who have not performed those corresponding activities in the past. The book makes extensive use of screenshots and other figures in order to illustrate the ideas being communicated. But in many of the screenshots of Drupal administrative pages, the text is too light, making it difficult to read, and not just for the grayed-out options. The book's index is awful. Countless readers will be unfamiliar with key Drupal concepts — such as "node", "core" (page 17), and "content type" — and thus these essential terms should have been defined early in the book, prior to use, but they are not. Moreover, the definitions should have been easily found through index entries, but those first two terms do not even have any entries!
Readers do not have to possess any knowledge of PHP, HTML, or CSS — even though those technologies are invaluable for becoming a skilled Drupal developer — because no programming knowledge is required to build the examples used in the book. Speaking of which, readers should try to perform all of the tasks described by the author, not only to help internalize the knowledge and techniques, but because the screenshots sometimes do not show items referenced in the text, but which readers would see on their own screens (such as "Regional and Language" on page 87).
Intermediate programmers may criticize this book as being too cursory and "paint by numbers" in its treatment of the topics. But developers new to Drupal should find the patient explanations worthwhile, provided they are willing to work through the examples, and are not discouraged by the way related material is sometimes split unnecessarily into different chapters. Informative and approachable, Drupal 7 is a resource for programmers and non-programmers alike who seek a guide to help them learn how to use this latest version of Drupal for creating websites.