Drupal Cookbook

Purpose

I am one of the many Drupal "newbies" who seemed overwhelmed at first. Well, I still am. But I have learned a lot in my first month with Drupal. I'm even answering question in the forums (actually, I think it's fora.)

With some encouragement from other newbies, I decided to start on writing down what I'm doing to build my sites. (Shoot, at my age, I can't rely on my memory, I have to write it down.) Yes, that's plural. As of this writing I have three sites in production, plus a test site for playing around.

Background

The basis of this book is going to be my efforts to build new test sites on my PC, running Windows. Hopefully by the time I get to that point in this book, I'll have figured out how to transfer the developed sites onto the remote production servers. Pretty much all of this is directly appicable to building a site directly on a web server.

Myths

It is a pure myth that you have to know how to program (especially in php) to use Drupal. It doesn't hurt to have some basic knowledge of php, HTML, and CSS, but it is not required. Here are some good resources for you:

Now, to be honest, I have used HTML in this book, and tweaked the CSS on my site a little bit. But I have not used one line of php code.

Another common myth is that your learning curve for Drupal is going to be steep and it will take you months, or even years, to get a web site up and running. Hogwash! I had my first, largely static, web site with 36 pages up in less than a week after I installed my first copy of Drupal. Then, because my hosting provider pulled the plug, I got my group's site up in the time it took to get the domain name transferred (about 5 days). That was after about 16 days from starting with Drupal. That site had a lot of static content, but also required a taxonomy-based access control module, a fancier theme, meta tags, photo albums, and a calendar - and it all had to work right away!

You can do it! Yes, YOU.

Using the Drupal Web Site

There are a few things you need to know before you post anything on the Drupal web site:

  • Search to see if the subject has already been covered. If it has, then recreating the subject will probably get you negative comments. If you don't understand the responses (I certainly identify with that feeling), don't hesitate to say "I'm a newbie, can you say this in easier to understand terms?"
  • You need to get a few basic terms right or you will be flamed.
    • Node: This is, in simple terms, a unit your content. It may, for example, be a "page," "story," "book page," or "blog entry."
    • Theme: This is the way your site is displayed (or rendered) to the end-user.
    • Block: This is a "container" for pieces of content on your displayed page. For example, your navigation menu and log-in are blocks. You may also have "Recent posts," "Sponsor links," or "Who's online."
  • Try to completely describe the situation. For example, if a page is not showing up correctly, it could be a browser problem, so make sure you tell the reader what browser you're using. Always mention which release of Drupal you're using (4.7.x, 5.x, etc).

Typing Convention

Throughout this site, as well as the Drupal site, you will see things like Administer>>Access control>>User management>>Roles. This means click on "Administer" in the navigation menu, then "Access control," then "User management," and then "Roles."

I will occasionally refer to "production" or "live" sites. These terms are pretty much interchangeable. The latter term is more modern and accepted in reference to web sites and means the site that your end-users interact with. The former term is largely synonymous but is a more "traditional" data processing term.

Some Preliminary Advice

This is from a post by ebrad on March 26, 2007, with some minor editing.

I don't know if I could call my sites "great;" it's taken about 9 months to really get a good understanding of how to use Drupal and its modules. This doesn't include learning the API or writing my own modules.

These are some recommendations I would have given myself before I began with Drupal:

  • Never try anything for the first time on a live site. Use a test site that uses the same modules and same data (different database). I keep 2 tests sites going at all times.
  • Don't try to make the "perfect site" on your first shot. Muddle through for a while until you understand a better way. Stressing over the perfect solution will slow you down.
  • Stay away from Views, Category, CCK, and Organic Groups modules until you at least have a little experience under your belt. These modules require a good bit of understanding to master and it might discourage you if you try to dive in too fast. However, over time you will come to realize that these are some of the most powerful and flexible modules out there. [Nancy's note: also stay away from access control (security) modules until later. They can really destroy your site if you don't know what you're doing.]
  • Customize one of the default themes before creating your own, the Theme Developer's Guide in the handbook is a big help.
  • When you run into a problem with a module, make sure to read the "readme," then do several searches with different terms, only rarely have my problems not already been answered in the forums or in an issues queue.
  • To make a site really successful, make it work for the users, not against them. Once you have the basic site set up, get your friends, family, or anyone who will talk to you to look at your site and give honest feedback, or do user testing for a more formal approach (I run a company Intranet and I do user testing every couple of months).
  • Help out in the forums when you can. It's surprising how explaining something to someone else helps you understand it yourself.
  • Go easy on what I call "gadgets" such as useless blocks, images, and graphics that clutter the page. I prefer simplicity and I only place something on the page if it is needed. This of course depends on your application

Good Luck!

Drupal Is Supposed to be Easy?

Drupal is very powerful and flexible. That means it must have a significant degree of complexity. Do you think the folks at Myspace don't have their terminology or managed to roll out that site in a day? I don't know who told you Drupal was easy, but many people make it harder than it has to be by thinking they need to understand everything at once.

Terminology is necessary in order to properly convey what one is trying to say or ask. If you talk about "that box-like thingy on the right side of my screen" you could be referring to many things. Contrast that with "the Author Information block in the right sidebar" - now you are precise and everyone knows exactly what you mean. You've told them what it is, where it is, and even how it got there and part of how you've styled it.

Start by trying to understand the basic parts of Drupal, don't try to understand everything at once. For example, it is imperative that you know what a node is (look in my book). Then understand what content types are. Learn the basic parts of the rendered page (header, footer, left and right sidebars, and the center, or content areas). Check out the administration pages so you have some idea where things are, even if you don't understand them all today.

It's all fine and good to have "Myspace" as your target, but you are one person with a new tool. The people that put that together are many and using tools that they already were familiar with. (BTW, I find Myspace to be rather illogical.)

Just start by getting something up and visible. Then celebrate that you've done that. Now you're ready to move on to more wonderful things, but do it one step at a time. Don't add tons of modules right away; get comfortable with what you have. Add modules one at a time and get familiar with them - one at a time.

As for making Drupal easier and more logical, you're welcome to submit feature requests or explain why something is not done in the most logical manner. But don't demand it, or threaten to abandon Drupal if you don't get it your way. And certainly don't resort to name calling or derogatory comments.

 

Comments

Drupal is good.

Drupal is good. I have built a bunch of Drupal sites.

Here are two of my drupal sites:

http://www.techsrc.com
-- Drupal verson:6.x Theme used: Alina

http://funny-animal.net
-- Drupal verson:6.x Theme used: pixture_reloaded

Am I barking up the right tree?

I'm looking at CMSs for a professional organization to upgrade its site from a static site to more of a community-based site. I'm only on day 2 of looking at this upgrade after pretty much retiring from SW development about 5 years ago. I'm zeroing in on Drupal and Dolphin after having also considered Joomla and Wordpress.

I'd like your sense of how appropriate Drupal is to the ideas I'm about to outline and to get some idea of whether these ideas are likely to require significant custom coding.

I imagine the front page to have a few teasers for publicly available articles on mission, history, membership requirements, upcoming events, and the organization's nomenklatura. Seeing the rest of the site would require login by members registered not merely as site members but as members of the organization itself. (So registration would either be done by an administrator or approved by an administrator.) It would include forums, lists of members, a profile page for each member, and a few blocks (if I've understand the term correctly) reserved for regular columns by specific individuals. My impression is that Drupal does that out of the box, except maybe for the profile page for each member.

  • On each member's profile page, I want several pre-defined areas where that member can publish and edit articles and photos. It'll be their blog, though I'm not sure we'll want to call it that.
  • I want users to be able to search for other members by geographical area.
  • I want to give certain members publishing and editing access to specific blocks or specific articles without given them those permissions elsewhere.
  • I'm not sure what all I'll want to do with groups, but group-specific forums and send-email-to-group-members seems likely.
  • I DON'T want a lot of the stuff that seems to be present by default in Dolphin member profiles, like "Rate this user", "Hot or not", age, and other more dating-oriented stuff. I haven't done a test installation yet and I would hope those fields can be toggled on or off, but I don't know.

Do it sound like Drupal is the right direction to go? Do you think it's the shortest path?

Is it a big deal to constrain a user's editing privileges to specific blocks or articles? Some of these people are good writers and in some cases experienced forum users, but if they have to access the article from a list that is disembodied from its screen context, that may be asking too much. I'd want the users in question to initiate their edit or addition directly from an instance of the block in question.

I used to do a reasonable amount of PHP but I haven't decided whether I'd want to do the implementation myself or act as a contract manager for the organization. Either way there might be some contracting or consulting for you here, though we're still weighing a variety of options.

Hmm...

You're right, Drupal does that first stuff out of the box.

Profile pages, as I understand your needs, are a combination of two things. First the core Profile module lets you add fields as desired to to the user's profile. (For more complex needs, there are contributed modules.) The other part you may want is theming the profile page so that the pieces come together in one spot. This is not difficult and there are several articles on the Drupal.org (DO) web site about it. Those things you don't want are not there in Drupal - although they can be added.

Searching for other members by location should be do-able with the Location contributed module and maybe just a tad of custom code (which is probably posted on DO somewhere.)

Access to blocks can be restricted on a block-by-block basis by role. Access to specific articles may need one of the access control modules (there are several to choose from - I use TAC_Lite).

I think what you call groups can be done with roles. I believe (I'm not a big forum user) that forums may be controlled by role, as most things in Drupal can.

While Drupal may be extended with PHP, HTML, and CSS, many users find they need none of that. You didn't mention WYSIWYG editors, but those are also available.

Thanks, I'll proceed

Thanks, I'll proceed in the Drupal direction, then. I've got v5 and v6 running locally at the moment.

First thing will be just to mess around enough to learn the lay of the land, then try out some customizations. After that I'll be in more of a position to decide how to get the real work done.

Php Syntax

Nancy,
I am very new to Drupal and am trying to learn it.
Can you tell me what the notation -> means in php code?
I have tried my best to find it but this is probably so basic and I am not able to.

tania

Object

That identifies a "method" (the part on the right) of an object (the part on the left). For example "$node->nid" means the node identifier method of the $node object.

php Syntax

Thank you so much.
This is very helpful!

Tania

Thanks!

Hi: Greetings from Peru!

Thanks for your work here.... I am trying to set up a site with Drupal being a newby. I found your site very usefull :-)

I am adding this page to my favorite links!

Cesar

thanks!

Hi - I'm a web designer (emphasis on "designer") getting ready to do my first Drupal site... and it is huge. I know how to spell droopal (yes, that was a lame attempt at a joke) and that is about it. I am lucky enough to be working with a developer but your cookbook is doing a nice job of giving me the background knowledge I need to talk the language and providing a starting point. Thanks!
- Steve

You're welcome

Glad it helps

drupal info for noob's

thought i could add to this with these:

this is really good to understand the file convention: http://tips.webdesign10.com/how-to-make-a-drupal-theme

here is a list of themable variables for the little more advanced:
http://drupal.org/node/11816

there's one more that i got bookmarked on my home pc that i can post later which was the most helpful...

You should Add this page to your list of helpers!

www.phpfreaks.com this site is invaluable to the beginner it may even help you out nancy, i was perusing your resume and i noticed you are php beginner and this site is steller just for that matter. all of that aside they also explain html and Mysql and so much more. i encourage you to check them out