There are many ways to build a Drupal site, from out of the box solutions, through combining existing modules, to module development. This overview helps ease the learning curve by listing the main building options, suitable for each level of Drupal experience.
The scope of this document is to summarize the different options to build the functionality, features, etc. of a Drupal site. On the other hand, for the visual style and design of the site, see the complementary overview Theming options: beginner, intermediate, advanced.
Beginner's site building
In order to advance quickly, you need some theory and lots of practice. With this purpose, it's advisable to have a non-public but working Drupal site from the very beginning, so that you can use it as a test site to experiment with what you learn. There are solutions to have a site almost ready out of the box.
If it's your first Drupal site, suitable possibilities are for example the following (note that in Drupal the code is open source and free; optional free and paid support and services are available as well):
- Quick hosted sites, that is Drupal services with fast and easy site building through a web interface (also known as SaaS publishing platforms), such as Buzzr, Drupal Gardens, Pagebuild, ProsePoint Express, SubHub... There are free and paid subscription plans.
- Unique sites created by Drupal services and developers that you can hire.
- When you have web hosting experience, you can install free Drupal distributions, usually including a selection of modules, pre-configured and ready to use. Currently, the most popular distributions have documentation on their own sites; for a listing (including categories: generic, academic, business, community, conservation, event, government, hosting, intranet, magazine, media, nonprofit, performance, social, video, etc.), see Additional distribution documentation.
About hosting your site, with the first option above (hosted), and often the second (hired), you don't need to worry about it, since it's managed by those services. Also, a few Drupal distributions (Acquia Commons, OpenPublish, ProsePoint, Videola...) offer hosted versions, in addition to the downloadable versions. However, in the case of most sites and distributions, there are several hosting possibilities:
- A local test site installed on your computer, with the help of an AMP package including Apache, MySQL and PHP (LAMP for Linux, MAMP for Mac, WAMP for Windows). There is also Acquia's DAMP Dev Desktop (Drupal, Apache, MySQL, and PHP), a complete stack installer for Windows, Mac, and Linux which includes Drupal. (See Install and Setup DAMP on your Windows PC or MAC)
- Shared hosting is suitable only for small sites. Take into account that Drupal 7 includes more functionality in core, and therefore has higher system requirements than Drupal 6. For performance, see Drupal caching, speed and performance, and Caching: Modules that make Drupal scale. Particularly, the Boost module can greatly help sites on shared hosting.
- A VPS, or one or several dedicated servers. You can more easily manage a VPS or server by installing a control panel such as Aegir, Webmin, Virtualmin, ISPConfig, etc. For example, Aegir is a Drupal distribution that can install, backup, update, etc., Drupal sites and other Drupal distributions on your VPS or server. Also, Barracuda -better in combination with Octopus- can make easier a high performance setup with Aegir, Webmin, and Drupal.
Intermediate site building
After experimenting with the ready to use Drupal sites mentioned above, and studying in their administration section how they work and how they are built and configured, you can learn to build your own sites:
- First, modify an existing site or distribution, by installing, configuring, enabling and disabling contributed modules, etc. Observe how things work in practice. For some of the possible ideas to try, see the lists of most installed modules for Drupal 6 or Drupal 7.
- The next step is to build Drupal sites in the most frequent way. That is, download the standard Drupal core distribution -or a generic distribution-, and your selection of modules. Combine them until you have a working site. Again, try different modules and configurations.
- Extensive functionality and easier upgrades with fewer modules can be obtained by configuring the most popular and powerful of them: CCK (or Field UI, in core since Drupal 7), and Views.
Most documentation, even some initially intended for beginners, starts at this intermediate level. See the Drupal Cookbook and other tutorials, Drupal books like the step by step "Using Drupal" (including downloadable example sites), the extensive "The Definitive Guide to Drupal 7" (for intermediate and advanced levels), the print and online book "Drupal 7: The Essentials" (full text on Drupal.org), and many other books, success stories (including many case studies with intermediate and advanced implementation details), videos/slides/screencasts, the forums...
Advanced site building
- Initially, learn by modifying existing code. After testing the improvements on your test site, you can contribute them as patches. For example, if there are bugs that you need fixed, help in the issue queue to fix them. If you need a module ported to work with a new major version of Drupal, like from 6.x to 7.x, start with an automated upgrade and cooperate with others to complete the module conversion.
- When you have extensive experience, you can start to develop modules, like custom modules for specific needs of your sites. There is a helper module, Module builder, that can speed up the development of new and existing modules.
- Please contribute those of your modules that might be useful to others in the Drupal community. Contributed modules can obtain help like testing from users and patches from other developers.
Apart from books on PHP, MySQL, etc., and Drupal books such as "Drupal 7 Module Development", "Pro Drupal Development", and others, there are advanced developer guides included in the Drupal Documentation.
A journey of a thousand miles begins with a single step... Best of luck with your Drupal learning experience.