 
# Using Joomla

### Ron Severdia

### Kenneth Crowder

#### Editor

### Julie Steele

Copyright © 2009 Ron Severdia and Kenneth Crowder

This book uses RepKover™, a durable and flexible lay-flat binding. 

O'Reilly books may be purchased for educational, business, or sales promotional use.  Online editions are also available for most titles (http://my.safaribooksonline.com).  For more information, contact our corporate/institutional sales department: (800) 998-9938 or corporate@oreilly.com. 

Nutshell Handbook, the Nutshell Handbook logo, and the O'Reilly logo are registered trademarks of O'Reilly Media, Inc. _Using Joomla_ , the image of a white stork, and related trade dress are trademarks of O'Reilly Media, Inc.

Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks.  Where those designations appear in this book, and O'Reilly Media, Inc. was aware of a trademark claim, the designations have been printed in caps or initial caps. 

While every precaution has been taken in the preparation of this book, the publisher and authors assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. 

O'Reilly Media

* * *

# Foreword

For any organization, a web presence is shifting from a marketing accessory to being a principle way to increase awareness and interaction with the public.  Four years ago, no one could have known how explosive the success of the Joomla Project would be.  Today, Joomla is a vibrant and growing platform with a multimillion-dollar economy and a full range of hobbyist to professional developers.  Over 12 million downloads in the last two and a half years alone, hundreds of thousands of registered users on our forums, and thousands of professionals who make their living working with Joomla every day all tell a compelling story of how well Joomla can help you. 

Using Joomla to build your web presence gives you an immediate head start by surrounding yourself with a strong, passionate, and caring community of users.  The Joomla community is broad and diverse, and members are always working to help each other.  It is both humbling and empowering to be part of a group so committed to helping one another and improving Joomla so that anyone can have a voice on the World Wide Web.  In this book, two of the most able and committed people in the Joomla community will guide you through the steps to get your website running on Joomla.  I have had the honor of calling both Ron and Ken friends and colleagues for a number of years now and couldn't be happier they have decided to share their expertise with you via this book. 

Joomla as a platform can be used to build anything for the Web.  There are certainly specific things it excels at, but don't let anyone tell you that Joomla cannot be used for your website because it lacks one thing or another.  Flexibility is one of our key values and it is built into the software we produce.  There are thousands of prepackaged extensions available in our extensions directory (<http://extensions.joomla.org>), which expand Joomla's capabilities in countless ways.  In one of the best sections of this book, Ron and Ken explore some common needs and the more popular extensions that help fill those needs. 

As you navigate the world of Joomla, please remember that its community is always there to help.  If you are interested, there are always people willing to help you learn.  The number of people asking and answering questions in our forums (which you can find at <http://forum.joomla.org>) every day is staggering.  No matter what problems you may encounter that you cannot tackle yourself, rest assured, there are hundreds, if not thousands, of people in our community willing to help you help yourself.  Additionally, Joomla User Groups exist all over the globe, and finding help from the community could be as simple as locating your closest group and spending a few hours getting to know Joomla users in your area. 

Some of you won't be interested in getting your hands dirty and we understand that.  There are businesses all over the world specializing in everything from building custom extensions to designing templates to meet your needs.  Finding a company or consultant to help you make your website dreams a reality could be as simple as visiting our resource directory (<http://resources.joomla.org>).  There is no shortage of products and services to make your website better, and we have a strong community of professionals around Joomla that can help you get the most out of your experience. 

Though it is incredibly difficult to predict where a community-driven software project will go in the years to come, we do know that Joomla will always be evolving with the ever-changing Web.  As we work toward the next major version of Joomla, much more emphasis will be placed on Joomla as a platform.  The web publishing side of Joomla will likely be tightened up so that fewer extensions will be necessary to handle most cases.  Our already polished and intuitive user interface will become even more streamlined for common tasks.  Possibly the biggest area for change, however, will come in our efforts to expand and simplify the process of building interactive web applications on the Joomla platform.  We see Joomla as a web platform to standardize upon, and want to provide all the tools necessary to achieve that goal. 

While we are incredibly proud of how far our software project has come in the last four years, we realize we have much left to do.  We will continue on our mission to provide a powerful and flexible platform for online collaboration and publication into our bright future.  Whether you want to build a large-scale enterprise website or just learn something new and meet new people, I know you can find what you are looking for with Joomla.  With Ron and Ken's insight in this book, you will be building and managing Joomla websites in no time, and wondering why you did it any other way. 

 _Louis Landry is a principal architect of Joomla 1.5 and the Joomla Framework.  As a development coordinator for Joomla, Louis helped build the cutting-edge PHP application framework that powers Joomla 1.5 and is focused on future R &D._

 _Louis holds a Bachelor's degree in computer science from Louisiana Tech University.  His first experience with computers was playing on a 286 with Basic.  Louis has programmed in many languages, ranging from low-level x86 Assembly to managed languages, such as Java, and scripting languages, such as PHP.  He was a founding member of his university's robotics team._ 

 _Louis is one of three founders ofJXtended, which offers GPL extensions for Joomla._ 

# Preface

Welcome to Joomla!  If you're new to content management systems or even new to building websites, this book will help you get up and running in no time.  All you need is a basic understanding of HTML and CSS to create high-quality websites and powerful web applications.  Whether you're a web designer or an experienced developer, this tome will help you get to know one of the most popular content management systems available today. 

# Who Should (and Shouldn't) Read This Book

Have you been asked to build a website in a short period of time?  Do you want to enjoy the benefits of a content management system by converting an existing site?  Do you have a client that needs a powerful website with lots of functionality for its users?  If any of these are true, or you just want to know more about this thing called "Joomla" that people are talking about, this book is for you. 

While we'd like to think that Joomla is for everyone, if you're a developer looking to build extensions or extend and build on Joomla's framework, this book _isn't_ for you. 

# How This Book is Organized

Each chapter of this book breaks down the extensive features of Joomla into easy-to-understand sections:

Chapter 1, An Overview

Get a little background on Joomla, its history, and what the future holds. 

Chapter 2, Quick Start

Install Joomla in just a few minutes and understand a few key concepts. 

Chapter 3, A Tour of the Administrator Panel

Learn the basics of the administrator interface. 

Chapter 4, Global Configuration

Understand what configuration options are available and how they affect your website. 

Chapter 5, Preparing Your Content

See some basic Joomla concepts and how they can help you best plan your website. 

Chapter 6, Creating Content

Get an in-depth overview of how content is created, managed, and displayed within Joomla. 

Chapter 7, Menus

Menus are the backbone of site structure.  Learn the best way to control layouts and use different navigation styles. 

Chapter 8, Components

See which components are built-in and how to extend Joomla's functionality with third-party options. 

Chapter 9, Modules

Understand how to manage and display modules. 

Chapter 10, Plug-ins

The power of plug-ins and the various types are explained. 

Chapter 11, Templates

It's easy to make your site look professional and this chapter will help you understand the basics of templates. 

Chapter 12, User Manager

Learn how to manage users and collaborate on your website with user permissions. 

Chapter 13, Media Manager

Managing media like images and Flash is easy with Joomla. 

Chapter 14, Languages

Get Joomla to speak in your language. 

Chapter 15, Extension Manager

Using the Extension Manager, see how you can install, remove, and upgrade your extensions. 

Chapter 16, Tools

A few extra tools are included with Joomla.  Learn how they can make maintaining your website much easier. 

Chapter 17, Hands-on: Converting a Site to Joomla

If you have an existing website and want to convert it to Joomla, here's a step-by-step guide to doing so. 

Chapter 18, Extending Your Site: Recommended Solutions

Using a sample online pet store, we'll walk you through how to set up a variety of solutions—an online photo gallery, an online calendar, and more. 

Chapter 19, SEO and SEF

Using Joomla's built-in SEO/SEF capabilities and some best practices, you can easily improve your website's search ranking. 

Chapter 20, Security

Learn some best practices for keeping your website rock solid. 

Chapter 21, Joomla 1.6 and Beyond

With Joomla 1.6 on the horizon, see what's in store, how it can help you, and how to migrate. 

Chapter 22, Getting Involved

How to get involved in the Joomla community and how you can give back. 

Appendix A

If the Quick Start doesn't cover your setup, find a myriad of other ways to either install or upgrade Joomla. 

Appendix B

We'll help you wade through the many thousands of extension options to find the one that best suits your needs. 

Appendix C

If you're a developer or want to develop for the Joomla platform, we'll give you examples of the power behind the Joomla framework and point you to some valuable resources. 

Appendix D

Throughout the book, we give tips and hidden gems to Joomla.  This chapter contains some of them that did not fit well in other chapters, but are still important to learn in order to get the most out of Joomla. 

# Conventions Used in This Book

The following typographical conventions are used in this book:

 _Italic_

Indicates new terms, URLs, email addresses, filenames, and file extensions. 

`Constant width`

Used for program listings. 

 **`Constant width bold`**

Shows commands or other text that should be typed literally by the user. 

 _`Constant width italic`_

Shows text that should be replaced with user-supplied values or by values determined by context. 

### Note

This icon signifies a tip, suggestion, or general note. 

### Warning

This icon indicates a warning or caution. 

# Using Code Examples

This book is here to help you get your job done.  In general, you may use the code in this book in your programs and documentation.  You do not need to contact us for permission unless you're reproducing a significant portion of the code.  For example, writing a program that uses several chunks of code from this book does not require permission.  Selling or distributing a CD-ROM of examples from O'Reilly books does require permission.  Answering a question by citing this book and quoting example code does not require permission.  Incorporating a significant amount of example code from this book into your product's documentation does require permission. 

We appreciate, but do not require, attribution.  An attribution usually includes the title, author, publisher, and ISBN.  For example: " _Using Joomla_ by Ron Severdia and Kenneth Crowder.  Copyright 2010 Ron Severdia and Kenneth Crowder, 978-0-596-80494-7." 

If you feel your use of code examples falls outside fair use or the permission given above, feel free to contact us at permissions@oreilly.com. 

# Safari® Books Online

### Note

Safari Books Online is an on-demand digital library that lets you easily search over 7,500 technology and creative reference books and videos to find the answers you need quickly. 

With a subscription, you can read any page and watch any video from our library online.  Read books on your cell phone and mobile devices.  Access new titles before they are available for print, and get exclusive access to manuscripts in development and post feedback for the authors.  Copy and paste code samples, organize your favorites, download chapters, bookmark key sections, create notes, print out pages, and benefit from tons of other time-saving features. 

O'Reilly Media has uploaded this book to the Safari Books Online service.  To have full digital access to this book and others on similar topics from O'Reilly and other publishers, sign up for free at http://my.safaribooksonline.com. 

# How to Contact Us

Please address comments and questions concerning this book to the publisher:

O'Reilly Media, Inc.  
---  
1005 Gravenstein Highway North  
Sebastopol, CA 95472  
800-998-9938 (in the United States or Canada)  
707-829-0515 (international or local)  
707-829-0104 (fax)

We have a web page for this book, where we list errata, examples, and any additional information.  You can access this page at:

<http://www.oreilly.com/catalog/9780596804947>  
---

The authors also have a companion website at:

<http://usingjoomlabook.com>  
---

To comment or ask technical questions about this book, send email to the following, quoting the book's ISBN number (9780596804947):

bookquestions@oreilly.com  
---

For more information about our books, conferences, Resource Centers, and the O'Reilly Network, see our website at:

<http://www.oreilly.com>  
---

# About the Technical Reviewers

 **Victor Drover** , a professor of medicine and biochemistry, became interested in website development during graduate school and started hacking content management systems shortly thereafter.  After much error-based learning, Victor started building Joomla applications and now manages an extension and web development shop at <http://dev.anything-digital.com> and <http://myrugbysite.com>.  In 2008, Victor joined the editorial team at the Joomla Extensions Directory, where he focuses on policy decision making, extension evaluation, and directory maintenance. 

 **Ron Richards** is an IT consultant with over 10 years' experience in EAI technologies.  He has a Bacherlor's of Science in telecommunications management from DeVry.  He also is president of Embury Road Technologies, specializing in Internet business solutions.  Ron lives in Kansas City, Missouri, with wife, Rita, and son and daughter. 

# Chapter 1.  An Overview

# Using a CMS: Static Versus Dynamic

For many years, the traditional way of building a website has been with plain HTML.  Whenever a change was needed, web designers used tools like Adobe Dreamweaver to perform tasks manually.  When websites were small, it was a fairly simple task.  Now that even the smallest sites contain hundreds of pages and the largest ones contain hundreds of thousands, the need for a way to manage all that content is more important than ever.  Enter a content management system. 

A content management system (CMS) has many advantages because of its dynamic structure.  You can make one simple menu change and have it reflect throughout your entire site—no matter the size.  Your content (e.g., text, images, etc.)  is stored in a database instead of in many static HTML files, which allows you to restructure and repurpose that content however you see fit.  A CMS like Joomla has many powerful features such as contact forms and search already built-in.  It can also help teams effectively collaborate, create efficient publishing workflows, and manage documents and digital assets. 

# A Brief History of Joomla

In 2000, the Australia-based company Miro developed a proprietary CMS called Mambo and, a year later, released it for free to the public under the GNU General Public License (GPL).  Mambo quickly garnered a lot of community support and enthusiasm in a short period of time.  But in 2005, a copyright dispute with the Mambo Steering Committee caused most members of the Mambo Core Team to resign.  The result was a new entity called Open Source Matters and a code fork (a point at which a new version of the source code "forks" in a different direction) of Mambo called Joomla.  Joomla, which is a phonetic spelling of the Swahili word "jumla" (meaning "all together"), was officially launched with version 1.0 on September 16, 2005.  The first version was primarily a rebranding with a few bug fixes, but 14 updates and numerous open source awards followed over the next two years. 

On January 21, 2008, the first major revision to Joomla was announced: Joomla 1.5.  It was a monumental effort on the part of many and brought a whole new level of power and features to the open source CMS world.  Joomla received a new API and became a truly international CMS with support for extended character sets and right-to-left languages.  It grew by leaps and bounds in areas like usability, extensibility, and template control—where it was already superior to other options. 

In July 2009, the Joomla Project announced a restructuring of its management to increase productivity and efficiency.  The Joomla Leadership Team has now replaced the Core Team that originally led the project.  This redefined the role of the team leading the project and structured it more around community involvement in events, the Google Summer of Code projects, and other activities.  This somewhat federative approach to team building is also an effort to increase community participation in the development process instead of relying on a small group of coders to do most of the work. 

# Why Open Source and the GPL? 

The idea behind open source software that can be freely used, modified, or even sold is a powerful one.  This doesn't mean that open source software is always cost-free, but users like you and me are allowed to change and improve it, which spurs creativity and innovation. 

The Joomla Project believes strongly in the power of the GNU GPL.  It's not just because it's the most popular of the open source licenses, but the project feels it offers the best freedoms for third-party developers and encourages them to follow their lead in choosing an open source license. 

Visit the Open Source Initiative at <http://www.opensource.org> for more information. 

Visit the Free Software Foundation at <http://www.gnu.org/copyleft/gpl.html> for more information about the GNU GPL. 

# The Future

In 2008, the Joomla Project put out a call to the Joomla community for input on what should be included in the next version of Joomla.  The community responses ranged from minor enhancements to a full-blown access control system for user permissions.  Over 50 features and improvements were accepted for inclusion in Joomla 1.6. 

The current stable version of Joomla is 1.5.  However, with Joomla 1.6 on the horizon, the goal of this book is to focus primarily on the functionality and extensions related to Joomla 1.6.  This allows for a high level of relevance for both co-existing versions and enables you to determine the version that best fits your needs. 

## Joomla 1.0.x: End of Life

The end-of-life for the Joomla 1.0.x series was announced in early 2009 and support terminated on July 22, 2009.  If you're still using Joomla 1.0.x, we advise you to migrate to Joomla 1.5 or Joomla 1.6 in order to stay current. 

# Summary

In this chapter, we've covered:

  * Pros and cons of using a content management system

  * Joomla's past and future

  * Why open source and GPL are important

In the next chapter, we'll give you the knowledge you need to get up and running with Joomla quickly. 

# Chapter 2.  Quick Start

Now that you have a brief overview of Joomla and the Joomla Project, it's time to jump in and get your feet wet.  In this chapter, you'll learn what you need in order to get your Joomla website up and running quickly.  We'll guide you through the options in the installation process to help avoid confusion. 

# Quick Install

The quickest way to get up and running is to have a web-hosting account already set up—and that's a requirement for this Quick Start chapter (or else it wouldn't be a "quick start," right?).  If you're an intermediate user and want to set up Joomla on your local computer, see Appendix A for details on how to do this.  It also prevents the need to purchase a domain and set up a hosting server. 

If you don't have a hosting provider, they're pretty easy to find online—practically a dime a dozen.  But be forewarned that when it comes to hosting providers, you often get what you pay for.  So do a little research and choose carefully.  For the best results, ensure that your hosting provider offers support for PHP 5.2+ and MySQL 4.1+.  You'll also need to register a domain—most web-hosting providers can assist you with this when you set up a web-hosting account. 

Most shared hosting providers offer a control panel called cPanel.  Since our goal right now is to get your Joomla website up quickly, this chapter will only outline installing Joomla using the Fantastico installer that comes with cPanel.  Before purchasing a new hosting service, ensure that cPanel is available from your web-hosting provider.  If your version of cPanel doesn't have Fantastico enabled or you aren't using cPanel, you will need to refer to Appendix A to choose a different installation method. 

### Note

We prefer using FTP to upload, install, or update Joomla because hosting providers don't always have the latest versions.  See Appendix A if you need further instruction. 

## Installing Joomla Using Fantastico

Installing Joomla using cPanel and Fantastico is the easiest and quickest method.  Follow these steps:

  1.  Log into cPanel.  This is typically done by adding the word "cpanel" to the end of your website's URL (see <http://www.JoomlaPetCenter.com/cpanel> in Figure 2-1). 

Figure 2-1.  Fantastico splash screen for Joomla 1.5

  1.  Click the Fantastico icon.  This is a smiley face icon near the bottom of the cPanel page. 

  2.  On the left side, click Joomla 1.5.  Sometimes Fantastico will offer the option to install different versions of Joomla.  We recommend that you always choose the latest stable version available. 

  3.  On the right side, find the link for New Installation. 

### Warning

It takes time for the people at Fantastico to update their scripts to accommodate for newer versions of software.  Figure 2-1 shows an outdated version of Joomla.  If you find that your Fantastico does not have the most recent version, you should upgrade it to the most recent version after completing the installation process.  More information on upgrading can be found in Appendix A.

  1.  Click the New Installation link.  Figure 2-2 shows some fields we need to fill out. 

  2.  Set your installation options:

Install on domain

This drop-down allows you to choose a website where you want to install Joomla.  Typically, there will only be one domain in the drop-down. 

Install in directory

If your website is not in a subdirectory, you should leave this field blank.  Depending on your hosting environment, your website may be in a specific folder, e.g., _public_html_.  Check with your hosting provider if you have any questions about this. 

Administrator username

The default should be "admin," although you can use whatever you want. 

Password

Enter the password you want to associate with the administrator username. 

Admin email (your email address)

This email address will be used for the administrator user. 

Admin full name

This name will be used for the administrator user. 

Site name

The site name will appear in a number of places.  This could be the same as your domain name, but doesn't have to be. 

Install Sample Data? 

You can leave this checked for now.  This is explained in more detail later in this chapter. 

Figure 2-2.  Installation options in Fantastico

  1.  Click Install Joomla 1.5.  Fantastico will now install Joomla on your web server. 

  2.  Click Finish Installation. 

It may seem like a lot of steps, but Fantastico really did all the work behind the scenes.  Have you jumped ahead already to look at your site?  If so, it should look something like Figure 2-3. 

Figure 2-3.  Joomla 1.5 frontend with sample data

This is a good time to put a bookmark in this book and spend a few minutes just clicking around your new website. 

If you need to update the version Fantastico installed to a newer version available, you should download the latest version of Joomla at <http://www.joomla.org/download.html>. 

If the version Fantastico installed is the latest stable version available, you can skip the next section on system requirements. 

# System Requirements

If you used Fantastico to install the latest stable version of Joomla 1.5, you already have the basic requirements to run Joomla and you can skip this section. 

Since Joomla is written in PHP, it makes sense that you must have PHP installed.  Currently, the recommended version is PHP 5.2 or higher.  Joomla will run on certain versions of PHP 4, however PHP 4 has reached its end of life and anyone using it needs to upgrade to PHP 5.  PHP can be downloaded from <http://www.php.net>. 

MySQL is a very popular database that Joomla uses to store all of that dynamic data.  It is recommended that you have MySQL version 4.1.x or higher.  As of this writing, Joomla is not compatible with MySQL version 6.x.  Visit <http://www.mysql.com> to download MYSQL. 

Although Joomla will run on IIS 6 and 7, it is advised that you use Apache as your web server.  You should also ensure that the following Apache modules are installed in order for Joomla to function properly: mod_mysql, mod_xml, and mod_zlib.  Apache can be downloaded from <http://www.apache.org>. 

Setting up a web environment from scratch is not the easiest thing for a novice to do.  If you want to try this on your local computer, you don't have to download all of the pieces and install them.  Appendix A explains how to install and use an all-in-one Apache distribution called XAMPP (on Windows) and MAMP (on Mac OS X). 

# Add Sample Content or Not

During the installation process outlined above, you may recall the option to "Install Sample Data?".  This means that sample data will be pre-installed during the Joomla installation process (advanced users could customize the _sample_data.sql_ inside the installation directory but it's not for the faint of heart) to make your website look like a finished site with menus, pages, modules, and more.  To see the visual difference, compare Figure 2-3, which contains sample data, and Figure 2-4, which does not contain any sample data.  If you are new to Joomla, we recommend you load the sample data.  It will help you better understand how to set things up for your own site. 

Figure 2-4.  Joomla 1.5 frontend without sample data

# Some Basic Terminology

In dealing with any new technology, becoming familiar with the lingo can be a frustrating process.  This section will explain some of that lingo to you in plain English. 

## Frontend Versus Backend

If you're not familiar with Joomla, you'll quickly learn the difference between the _frontend_ and _backend_.  It is a very simple concept.  The frontend is what visitors see when viewing your website.  However, site administrators will have access to a control panel they can use to build and manage the website.  This is called the backend or is sometimes referred to as the _Administrator Backend_. 

The frontend and backend look completely different.  To see what the frontend looks like, refer back to Figure 2-3.  To see what the backend looks like, refer to Figure 2-5. 

Figure 2-5.  Joomla 1.5 backend

## Extensions

Like most modern content management systems, Joomla allows the installation of add-ons to extend the basic functionality.  In Joomla, users can extend the functionality to add features like a shopping cart, discussion forum, calendar, and lots more.  These add-ons are collectively referred to as _extensions_. 

There are five different types of extensions: components, modules, plug-ins, templates, and languages.  Each of these extensions interact with Joomla in a unique way and offer tremendous flexibility in what a user will experience on the frontend of the website.  Each extension type is summarized below and will be addressed in more detail later in this book. 

### Components

These are typically the most powerful of the five types of extensions.  Located in the main body of the page, a component is an application that runs within your Joomla website.  Examples of a component include a discussion forum, a calendar, a contact form, or even displaying a simple article of text.  Every page on a Joomla website must load at least one component. 

### Modules

If you think of your web pages broken up into blocks or zones, most of the blocks that live outside of the main page area are made up of modules.  If you look back at Figure 2-3, you will see a lot of modules.  A module can display a menu, show how many items are in your shopping cart, randomly display an article, or even ask the user for certain information.  The possibilities are almost endless as to what you can do with a module.  Modules are optional extensions on the frontend, but are very useful. 

### Plug-ins

Plug-ins are a lot more powerful than they are given credit for.  In short, they process web page information as it loads and can do just about anything from searching your content to masking email addresses it detects to protect them from spambots.  Plug-ins are optional extensions on the frontend, but are very powerful. 

### Templates

Although most people do not think of templates as extensions, they are classified as such.  You can think of a template as a theme or a skin.  Joomla makes it easy to change the template on your site as a whole or use templates for individual pages.  Every page on a Joomla website must load at least one template. 

### Languages

Joomla is truly an international CMS and is used by people all over the world.  For instance, if you live in the Netherlands, you might prefer to have the Joomla interface in Dutch.  Using the Dutch translation, this is done with only a few mouse clicks.  Every page on a Joomla website must load at least one language. 

## Site Content

As in other CMSs, content is the information contained on your website.  There may be many different types of content on your website, including articles, photos, calendar events, shopping cart items, and more. 

### Sections, categories, and articles

The most common type of content in a default Joomla installation is called _articles_ , Articles are organized in a specific hierarchy with two levels: _sections_ and _categories_.  Categories are used to group related articles, while sections are used to group related categories. 

For many users new to Joomla, the concept of article, categories, and sections can be confusing.  To clarify, think of your website like a filing cabinet.  The drawers in the filing cabinet are the sections.  The file folders within the drawers are the categories.  The pieces of paper inside the folders are the articles.  You can have multiple articles in a single category.  You can also have multiple categories in a single section.  Figure 2-6 shows a visual representation of this analogy. 

Figure 2-6.  Understanding sections, categories, and articles

Now that you understand the basics of Joomla and you've successfully installed it (hopefully), let's get started with a tour of the Administrator Backend. 

# Summary

In this chapter, we've covered:

  * How to get your Joomla site up and running quickly

  * Basic Joomla terminology

In the next chapter, we'll give you a tour of the Joomla Administrator, also called the Administrator Backend. 

# Chapter 3.  A Tour of the Administrator Panel

In any good content management system (CMS), the administrator dashboard is where the magic happens.  In Joomla, this is referred to as the _Administrator Backend_ and allows site administrators to build and maintain a very robust website.  This chapter will cover the Control Panel, Menu, and Administrator Module regions of the backend.  Other chapters in this book will discuss these items in more detail.  If you didn't go through the Quick Start process in Chapter 2, you can refer to Figure 3-1 to see the different areas we'll cover. 

Figure 3-1.  Joomla 1.5 Administrator Backend

If you have Joomla installed, you can log in and view your own administrator control panel at http://www.<YourSite>.com/administrator (remember to replace < _YourSite_ > with your URL). 

# Control Panel

The Control Panel is more or less the Administrator's home page.  It's the launching point from which you will build and maintain your website.  The large icons in the center of the screen provide shortcuts to commonly used areas within Joomla.  Figure 3-1 shows the Control Panel icons you would see if you were logged in as a Super Administrator.  Depending on whether you are logged in as a Manger, Administrator, or Super Administrator (see Chapter 12 for the different types of user levels), there may be fewer icons on your screen. 

The icons allow quick access to the following areas:

Add New Article

Clicking this icon will take you to the new article page.  This is the same as clicking article manager→new. 

Article Manager

The Article Manager displays a list of all the articles that have been created in Joomla whether by you or any other user.  You can add, edit, and delete articles from this screen as well. 

Front Page Manager

The Front Page Manager shows all of the articles that you have designated to display on the front page of your website. 

Section Manager

Adding, editing, and deleting sections take place within the Section Manager. 

Category Manager

Adding, editing, and deleting categories take place within the Category Manager. 

Media Manager

The Media Manager allows you to upload files into Joomla.  Examples of file types would be images, documents, videos, audio files, and so on.  Once uploaded, you can embed and link to them from various places within the CMS. 

Menu Manager

This is mainly used for creating new menu items; however, it can also be used to create new menus. 

Language Manager

If English is not your first language or if you prefer a different language, you can use the Language Manager to change the default language for the frontend, the backend, or both.  You can even allow each user to set his or her own language preferences. 

### Note

Out of the box, English is the only available language, but other languages can be freely downloaded and installed in Joomla. 

The Joomla Translation Working Group has translated Joomla's core language files into more than 60 world languages.  You can download them at <http://joomlacode.org/gf/project/jtranslation>. 

User Manager

The User Manager allows you to manage user accounts. 

Global Configuration

A lot of high-level Joomla settings can be modified within the Global Configuration. 

Even though the Administrator Modules are technically part of the Control Panel, they are discussed in Administrator Modules. 

# Administrator Menus

The menu at the top of the Administrator Control Panel serves as a launching point to virtually every area of Joomla's backend.  Like the Control Panel, the user group determines which menu items users have access to. 

## Site

The Site drop-down menu, shown in Figure 3-2, contains links to pages that facilitate the management of users, media files, and configuration settings. 

Control Panel

This links to the same Control Panel that was previously discussed. 

User Manager

The User Manager allows you to manage user accounts. 

Media Manager

The Media Manager allows you to upload files into Joomla.  Examples of file types would be images, documents, videos, audio files, and so on.  Once uploaded, you can embed and link to them from various places within the CMS. 

Global Configuration

A lot of high-level Joomla settings can be modified in the Global Configuration. 

Logout

This will log you out of the Administrator Backend. 

Figure 3-2.  Site drop-down menu

## Menus

The Menus drop-down allows you to access pages where you will have the ability to add, edit, and delete menus and menu items.  Figure 3-3 shows the Menus drop-down as it would look if sample data was not installed.  If you loaded the sample data during installation, you'll see other menus below Main Menu. 

Menu Manager

The Menu Manager is where you add, edit, and delete menus. 

Menu Trash

Deleted menu items are put in the Menu Trash.  You can think of this as the recycle bin for your menu items. 

Main Menu

As the name suggests, Main Menu is the name of the main menu shown on the frontend.  By clicking on Main Menu from the drop-down menu, you will be able to add, edit, and delete menu items.  If you have more than one menu, they will all be listed separately within the Menus drop-down. 

Figure 3-3.  Menus drop-down

## Content

Some would call content the heart of any CMS.  The Content drop-down menu, shown in Figure 3-4, gives you access to fundamental parts of Joomla that facilitate managing your articles as well as your site's hierarchical structure.  Other content types such as events, photos, and contacts are managed using the Component menu item (see the next section):

Article Manager

The Article Manager displays a list of all of the articles that have been created in Joomla, whether by you or another user.  You can also add, edit, and delete articles from this screen as well. 

Article Trash

Deleted articles are put in the Article Trash.  You can think of this as the recycle bin for your articles. 

Section Manager

Adding, editing, and deleting sections take place within the Section Manager. 

Category Manager

Adding, editing, and deleting categories take place within the Category Manager. 

Front Page Manager

This will show you all of the articles that you have designated to display on the front page of your website. 

Figure 3-4.  Content drop-down menu

## Components

The Components drop-down lists all of the installed components.  Figure 3-5 shows the components that are built-in to Joomla.  These will be discussed in detail in Chapter 8.  Any additional components you install will also show up in this drop-down. 

Figure 3-5.  Components drop-down menu

## Extensions

The Extensions drop-down menu, in Figure 3-6, shows links to install and manage your other extensions—modules, plug-ins, templates, and languages. 

Install/Uninstall

This is used to install and uninstall extensions. 

Module Manager

This is where you can add, edit, and delete instances of installed modules.  You can also move and reorder them. 

Plugin Manager

The Plugin Manager allows you to configure installed plug-ins.  Options include enabling, disabling, order of execution, and access levels. 

Template Manager

You have the ability to change the look and feel of your website as a whole or only for specific pages.  You also have the ability to modify the templates that have been previously installed. 

Language Manager

If you've installed any other languages, this is where you can change the default language to the language of your choice. 

Figure 3-6.  Extensions drop-down menu

## Tools

The Tools drop-down menu, shown in Figure 3-7, contains an assortment of items that are important to Joomla, but do not really fit anywhere else:

Read Message

Read private internal messages sent to you. 

Write Message

Write a private internal message and send it to another user with access to the backend of your website. 

Mass Mail

Mass Mail provides an easy way to send out email to either all your users or only specific groups of users. 

Global Check-in

Items that were checked out (but never checked back in) cannot be edited by any other user.  Global Check-in will check all items back in. 

Clear Cache

Clear Cache does just what it says—it clears your site's cache. 

Purge Expired Cache

Purging expired cache deletes any cache files that are no longer current. 

Figure 3-7.  Tools drop-down menu

## Help

The Help drop-down menu, shown in Figure 3-8, provides access to help documents and system information:

Joomla!  Help

This links to Joomla's internal help guide. 

System Info

System Info contains information about your server settings and key Joomla information.  This is most helpful when troubleshooting an issue that may be caused by your server not being set up properly to run Joomla effectively. 

Figure 3-8.  Help drop-down menu

# Administrator Modules

Administrator Modules are located on the right side of the Control Panel, as shown in Figure 3-9.  By default, Logged in Users, Popular, Recent added Articles, and Menu Stats are installed and enabled for all users who have access to the backend:

Logged in Users

This will show you a list of all of the users who are currently logged in to your website.  You can also see when they were last active or log them out. 

Popular

The Popular module lists the 10 most popular articles, along with the number of hits they have received. 

Recent added Articles

The Recent added Articles module lists the 10 most recently added articles, along with the date they were created and the name of the author. 

Menu Stats

Simple but useful, the Menu Stats module lists each menu along with the number of items it contains. 

Figure 3-9.  Administrator Modules

# Main Toolbar

In the top right area of the Administrator Backend, you'll see the top toolbar (with the exception of the main Control Panel).  The top toolbar (Figure 3-10) contains buttons like Save, Edit, and Trash, and performs a variety of other functions depending on which area of the backend you're currently in.  You will be using items in the top toolbar throughout this book, so it's a good idea to get familiar with it. 

Figure 3-10.  Article Manager toolbar

# Article Filtering and Display

When you have a lot of articles, finding a specific one would be difficult without filters.  The filters are at the top of the list of articles in the Article Manager, shown in Figure 3-11.  You can filter articles one of two ways:

  * Enter a word in the article title in the Filter box on the left and click Go. 

  * Select one or more items from the drop-down menus to filter articles by Section, Category, Author, or State. 

Figure 3-11.  Article Manager filters

When you're done, you can reset your filters by clicking the Reset button. 

Filters are also available in the Category Manager, Section Manager, Front Page Manager, Menu Item Manager, Module Manager, and the Plugin Manager.  Many components use filters to customize the display or to locate specific items. 

# Summary

In this chapter, we gave you a tour of the Administrator Backend, highlighting:

  * The Control Panel as a launching point

  * The main top menu

  * The Administrator Modules and the information they display

  * The main toolbar

  * How article filtering works

In the next chapter, we will focus on the one very important part of the backend: the Global Configuration. 

# Chapter 4.  Global Configuration

The Global Configuration page contains settings that affect your website from a global perspective. 

You must be logged into the backend as a Super Administrator in order to access the Global Configuration page.  From a best practices standpoint, it is best to limit the number of people who have access to Super Administrator accounts.  The main difference between Administrator and Super Administrator is that Super Administrators have the ability to break the site more easily.  They have the ability to accidentally uninstall needed extensions and the Global Configuration page is where Super Administrators have the potential to cause the most problems to the site if they don't know what they're doing. 

There are two ways to access the Global Configuration screen:

  * Click the Global Configuration icon in the Control Panel. 

  * From the top menu, select Site→Global Configuration. 

It's safe to click around and play with most of the options; however, there are some options that, if changed, would cause your website to cease functioning. 

The Global Configuration page is broken down into three main tabs, outlined in each of the following sections. 

# Site

The Site tab contains options that affect how the site functions from a usability standpoint. 

## Site Settings

Site Offline

Setting this to Yes will cause the frontend of your website to display the "Offline Message" you see below it in the editable box instead of loading your site.  A login screen will also appear to allow authorized people to view the site while offline. 

Offline Message

This is the message displayed when the website is offline. 

Site Name

Site Name is the name of your website, commonly displayed in the title bar of your browser. 

Default WYSIWYG Editor

When creating articles, Joomla provides a rich content editor (WYSIWYG, or What You See Is What You Get) to allow you to quickly format your content similar to a word processing program.  You can specify the default editor for all users. 

List Length

When listing content in the Joomla backend, this parameter is the number of items to display per page.  This is only the default value and users have the ability to adjust this when viewing the list. 

Feed Length

When syndicating articles or other items using the RSS features of Joomla, this field represents the maximum number of items that will be displayed. 

Feed Email

When the feed is generated, each item lists the author of that item.  This setting allows you to dictate whether you want the feed to show the author's email or the site's email. 

## Metadata Settings

Global Site Meta Description

This contains the description metadata.  This helps search engines know what your site is about.  Some search engines display your metadescription under the link to your site within their search results, therefore it is important _not_ to leave this as the default Joomla description. 

Global Site Meta Keywords

This contains the keyword metadata.  Although search engines don't rely on this as much today as they once did, it tells them what keywords you want associated with your site. 

Show Title Meta Tag

If set to Yes, the title of the article you are viewing will show in the metadata. 

Show Author Meta Tag

If set to Yes, the author of the article you are viewing will show in the metadata. 

## SEO Settings

Search Engine Friendly URLs

Friendly URLs are human-readable and are better for search engine ranking.  This setting turns them on and off.  Chapter 19 goes into much more detail on the subject of search engine optimization (SEO) and search engine–friendly URLs. 

Use Apache mod_rewrite

This indicates whether you want to use Apache's Rewrite module, an extension for Apache that rewrites URLs.  This requires the use of the included _.htaccess_ file. 

Add suffix to URLs

When turned on, the file suffix _.html_ will be added to the end of all friendly URLs. 

# System

The System tab contains options that relate to sessions, error handling, default user, media settings, and more. 

## System Settings

Secret Word

You don't have to worry about this or change it.  It is used internally for encrypting things like passwords. 

Path to Log Folder

This is the path to the Joomla log file where errors are recorded.  This path is set by the installer. 

Enable Web Services

Setting this to Yes will allow external applications to make remote procedure calls (RPCs) to Joomla through XML.  This can be used for external applications such as blogging or site management tools. 

Help Server

When you choose which server to pull help files from, you are also setting which language to use for help. 

## User Settings

Allow User Registration

If set to Yes, users will be able to register on your website. 

New User Registration Type

When someone new registers, they are set as Registered by default.  If you want them to be part of another access group, you can change it here. 

New User Account Activation

Setting this to Yes will force new registrants to click a link in a confirmation email to activate their account.  This prevents people from using fake email accounts or an account that doesn't belong to them. 

### Note

Very rarely would we recommend someone not using this feature.  Occasionally, it can be a hassle when the activation email goes into someone's spam folder and you have to manually enable the user's account.  The alternative is the potential for a lot of spam and bogus registered users on your website.  The benefits usually outweigh the costs of not enabling this feature. 

Frontend User Parameters

Registered users can log in to the frontend of the website and modify several preference settings like language, editor, and time zone.  If this is set to No, they will not have those options. 

## Media Settings

Legal Extensions (File Types)

When uploading files with the Media Manager, this field tells Joomla what extensions to allow.  You can add new extensions as needed, but be sure to add both the lowercase and uppercase version of the extension, separated by commas, and avoid spaces.  Generally, you wouldn't allow users to upload scripts that might be accessed by a third party to execute code on your server. 

Maximum Size (in bytes)

This is the largest file size users with upload permissions can upload. 

### Note

If you run into an issue where you can't upload a file smaller than the maximum size, look at the System Info under the Help menu item in the top menu.  It's possible that the _upload_max_filesize_ in PHP is set to a smaller number.  To fix this, either edit PHP's _php.ini_ file or contact your host. 

Path to Media Folder

This is the path to the media folder.  It is recommended that you do not change this setting, as some third-party extensions rely on this being the default path. 

Path to Image Folder

This is the path to the images folder.  It is recommended that you do not change this setting as some third-party extensions rely on this being the default path. 

Restrict Uploads

This allows you to restrict uploading of nonimage files to users with access to the site's backend. 

Check MIME Types

The MIME type will be analyzed on each upload if set to Yes.  Also known as content types, MIME types define media and how it is handled by the Joomla uploader. 

Legal Image Extensions (File Types)

Separated by commas, the extensions listed here are legal image formats for those who are not restricted from uploading them. 

Ignored Extensions

Lists the extensions that you want the uploader to ignore. 

Legal MIME Types

Separated by commas, these are the MIME types that are allowed. 

Illegal MIME Types

Separated by commas, these are the MIME types that are _not_ allowed. 

Enable Flash Uploader

This will enable a much sleeker way to upload files in the Media Manager using the Flash uploader.  This also allows multiple files to be uploaded at once.  If set to No, a single file input form field will be used. 

### Note

The Flash uploader conflicts with some third-party extensions and may not be compatible with some versions of Flash.  If you have problems, try disabling it. 

## Debug Settings

Debug System

When debugging is turned on, information to help you troubleshoot a variety of issues is displayed at the bottom of each page. 

Debug Language

Similar to Debug System, however, this only displays language information.  This is useful when writing your own extensions. 

## Cache Settings

Cache

Turning on the cache can help speed up sites with lots of traffic by reducing the number of MySQL queries and the amount of processing power needed to render and return pages.  If enabled, however, changes to your site will not appear until the Cache Time has expired.  This setting should not be used in the process of developing a site when many changes and testing are being done. 

Cache Time

This tells Joomla how long to cache a file.  After it expires, a new cache file will be created. 

Cache Handler

The Cache Handler setting tells Joomla where to store the cache. 

## Session Settings

Session Lifetime

After you have been idle for the given amount of time, the system will automatically log you out. 

### Warning

Although it is tempting to make this a really large number so that you never have to worry about being kicked out in the middle of writing a long article, it truly is bad practice and a security risk.  This is especially true if you will be accessing your site from public computers. 

Session Handler

The Session Handler setting tells Joomla where to store user session information. 

# Server

The Server tab contains server-specific options like locale, FTP, database, and mail settings. 

## Server Settings

Path to Temp Folder

This is the folder Joomla uses when storing temporary files.  For example, when you install an extension from an archived file, this is the folder where files are extracted before they are actually installed. 

GZIP Page Compression

When set to Yes, HTML and other code are compressed before they are sent from the server to a site visitor.  For large sites, this setting may improve page-loading times. 

Error Reporting

Error Reporting sets the level of reporting you want when errors occur. 

Force SSL

You can force your entire site or Administrator only to run under SSL.  This means that all traffic to and from your site would be encrypted and not readable by hackers using packet-sniffing software.  You will need to make sure that you have a valid certificate installed or end users will receive a warning from their web browser when visiting your site. 

## Local Settings

Time Zone

Select your time zone from the drop-down box. 

## FTP Settings

Enable FTP

The FTP Layer is one of the best things to happen to Joomla.  It solved the problem that Joomla 1.0.x users had when Joomla created a file.  The file would be owned by Apache and not the user that actually created it.  This lead to permissions issues when trying to delete the file via FTP.  Instead of creating a file in a directory, Joomla will actually FTP it to the folder, thus preserving file ownership. 

FTP Host

This is the name of the host for your FTP server.  Typically, 127.0.0.1 works. 

FTP Port

The default port for FTP is port 21.  However, some hosts change this for security reasons, so check with your hosting provider if it doesn't work. 

FTP Username

This is the username for the FTP account. 

FTP Password

This is the password for the FTP account. 

FTP Root

Typically, when you log in to your hosting account via FTP, you won't end up in Joomla's root directory by default.  The FTP Root is nothing more than the path from FTP's root directory to Joomla's directory. 

## Database Settings

Database Type

The database type is almost always _mysql_.  Changing this field could cause your site to stop working, so it shouldn't be altered unless you know exactly what you're doing.  You may want to change it if you switch hosts to one with a different type of compatible database or you change the type of database on your current server. 

Hostname

The hostname is where Joomla can find your database.  Most often, this is _localhost_ , but if your database is on a different server, you'll want to enter it here. 

Username

This is the username for the MySQL account that has access and write privileges to your database. 

Database

This is the name of the database where your Joomla tables are. 

Database Prefix

All of the Joomla tables for this installation begin with a database prefix.  This is typically _jos__.  If you wanted to add a second installation to Joomla and not create a new database, you could just give it a different prefix like _jos2__.  Once this is set, you will probably never change it. 

### Note

You may have noticed that Password is not an option within the Database Settings.  If you want to change the MySQL password, you'll need to manually change the `$password` variable in the file _configuration.php_ located in Joomla's root directory. 

## Mail Settings

Mailer

When Joomla sends out an email, this determines what method to use when sending. 

Mail from

When an email is sent out, this is the return email address. 

From Name

When an email is sent out, this name is shown as the sender. 

Sendmail Path

If you set Mailer to be _Sendmail_ , this is the path to the Sendmail script on your server. 

SMTP Authentication

If you set Mailer to be SMTP Server, this tells Joomla whether the SMTP server requires authentication. 

SMTP Username

When authentication is required, you must supply a username for the SMTP server. 

SMTP Password

When authentication is required, you must supply a password for the SMTP server. 

SMTP Host

This tells Joomla where the SMTP server is located.  If it is located on your server, you could leave this value as _localhost_. 

# Summary

In this chapter, we've explored the multitude of options in the Global Configuration, including:

  * Site settings

  * SEO and metadata settings

  * User settings

  * Options for handling media

  * Cache, database, and other server-related settings

In our next chapter, we'll dive right in and start preparing content for your site. 

# Chapter 5.  Preparing Your Content

Whoever said "content is king" was right.  Attracting site visitors requires compelling content that is regularly updated.  In this chapter, we'll give you the best ways to organize your article content in Joomla.  It's not much different than you would do for any other website, but there are a few important tips to speed up the process. 

At this stage, you might have already chosen to install the sample content during Joomla installation and you can follow along using that.  If not, you may want to begin thinking about it and creating your own. 

# Planning, Creating, and Organizing Your Content

Building a new website means creating content for your visitors.  When you first sit down to create your new Joomla site, a little bit of planning and forethought can save you a lot of time down the road.  But don't worry if you haven't worked out every little detail.  Joomla is flexible enough for you to be able to move things around and readjust later on. 

The first recommended step is to create a site map.  It may be a simple napkin sketch or a complex diagram (see Figure 5-1). 

Figure 5-1.  Sketch on a napkin and OmniGraffle IA

# Sections, Categories, and Articles

One of Joomla's strengths is its simplicity and that is reflected in its three-tier hierarchy of article content: Sections, Categories, and Articles. 

Using your napkin sketch or information architecture as a guide, structure your articles however it best works for you.  To start with, structure your content the way your menus will be structured.  But if your site goes deeper than the basic Sections and Categories, don't worry.  Joomla is smart enough to be able to separate your content structure and menu structure if you need it to.  Menu structure is covered later in Chapter 7. 

You may remember our analogy of the Joomla content structure from Chapter 2 (see Figure 2-6), but it bears repeating.  It really is as simple as relating sections to a filing cabinet drawer, categories to file folders, and articles to individual pieces of paper.  You can't have the same piece of paper in multiple folders or a folder in multiple drawers. 

### Warning

There are new changes to the way content is structured in Joomla 1.6.  Please see Chapter 21 for more details. 

# Section Manager Overview

The Section Manager (see Figure 5-2) is the top-level view of your site's articles.  If your site is small, you may only need a single section and you'll organize your articles within its categories.  But most sites will have a number of sections (e.g., About Us, Our Portfolio) to give more control and flexibility over how your articles are displayed.  The Section Manager enables you to copy, edit, create, and delete sections.  Before you can create content, you'll need to first create a section. 

Figure 5-2.  The Section Manager

## Creating Sections

You must create at least one section before you create categories or articles.  For example, let's say you are building a website about pets.  You may want to start by creating a section for the types of pets (dog, cat, fish, etc.),  knowing that your categories in each will be a type of animal (Labrador, bulldog, etc.).  To create a new section:

  1.  Go to the Section Manager and click the New button in the top toolbar.  This opens the Section Editor (see Figure 5-3). 

  2.  Enter a title for the section. 

  3.  Choose an access level—Public, Registered, or Special.  Most often this will be set to Public.  If set to Registered, registered users or higher will have access.  Special means only Administrators will have access.  For more information on access levels, see Permissions. 

  4.  Optionally, you may also enter a description of the section in the text box.  This information will show up on section pages when the appropriate menu item parameter is enabled.  For more information about this parameter, see Menu Item Parameters. 

  5.  Another option is to associate an image that displays with the section.  In order for images to appear in this drop-down, they need to be in the images/stories folder.  For more information on uploading images to this directory, see Uploading Media. 

  6.  Click Save. 

Figure 5-3.  Create a new section

## Publishing and Unpublishing Sections

In the Section Manager, you also have control over the published state of each section.  To publish or unpublish a section, click the icon in the Published column (see Figure 5-4). 

Figure 5-4.  Publish or unpublish a section in the Section Manager

You can also unpublish a section in the Section Editor to hide it from website visitors. 

  1.  Go to the Section Manager and click the section name to open it in the Section Editor.  You can also click the checkbox by the section name and select the Edit button in the toolbar. 

  2.  Click the radio button in the details to set its state to Published or Unpublished (see Figure 5-5). 

  3.  Click Save. 

Figure 5-5.  Publish or unpublish a section in the Section Editor

## Copying Sections

There are times when you may want to duplicate an entire section and all of its categories and articles—usually in order to save time.  To copy a section:

  1.  Go to the Section Manager and click the checkbox by the section name and select the Copy button in the toolbar. 

  2.  Give your new section a name in the "Copy to Section" box.  You'll see all the categories and articles within that section that will be duplicated (see Figure 5-6). 

  3.  Click Save. 

Figure 5-6.  Duplicate a section

You should now see the screen refresh with an information bar confirming the section you copied (including all of its categories and articles) has been copied into the new section. 

# Category Manager Overview

The Category Manager (see Figure 5-7) displays the categories of your site.  These are the "file folders" for your articles.  As described above for sections, you can also perform a number of tasks like copying, editing, deleting, and creating categories.  We'll start off by creating your first category. 

Figure 5-7.  The Category Manager

## Creating Categories

Creating categories works very much the same way as sections.  To create a category, you must already have at least one section.  Using our previous example of pets like dogs, you would create categories for dog breeds. 

  1.  Go to the Category Manager and click the New button in the top toolbar.  You'll see the Category Editor (see Figure 5-8). 

  2.  Enter a category title.  Select a parent Section for this category. 

  3.  Choose an access level—either Public, Registered, or Special.  Most often this will be set to Public.  If set to Registered, registered users or higher will have access.  Special means only Administrators will have access.  For more information on access levels, see Permissions. 

  4.  Optionally, you may also enter a description of the category in the text box.  This information will show up on category pages when the menu item parameter is enabled.  For more information about this parameter, see Menu Item Parameters. 

  5.  Click Save. 

Figure 5-8.  Create a new category

## Publishing and Unpublishing Categories

In the Category Manager, you also have control over the published state of each category.  To publish or unpublish a category, click the icon in the Published column (see Figure 5-9). 

Figure 5-9.  Publish or unpublish a category in the Category Manager

You can also unpublish a category in the Category Editor:

  1.  Go to the Category Manager and click the section name to open it in the Category Editor.  You can also click the checkbox by the category name and select the Edit button in the toolbar. 

  2.  Click the radio button in the details to set to Published or Unpublished (see Figure 5-10). 

  3.  Click Save. 

Figure 5-10.  Publish or unpublish a category in the Category Editor

## Copying Categories

There are times when you may want to duplicate an entire category and all of its articles, usually to save time:

  1.  Go to the Category Manager and click the checkbox by the category name and select the Copy button in the toolbar. 

  2.  Choose the section where you want to copy this category.  You'll see all the articles within that category that will be duplicated (see Figure 5-11). 

Figure 5-11.  Copying a category in the Category Manager

  1.  Click Save. 

## Moving Categories

Moving categories is similar to copying categories.  If you've just copied a category, it'll be easy to move a whole category and all of its articles to another section. 

  1.  Go to the Category Manager and click the checkbox by the category name and select the Move button in the toolbar. 

  2.  Choose the section where you want to move this category.  You'll see all the articles within that category that will be moved (see Figure 5-12). 

Figure 5-12.  Moving a category in the Category Manager

  1.  Click Save. 

## Uncategorized Sections and Categories

You may have noticed the option of using the Uncategorized Section and Uncategorized Category when creating new articles.  This was included in Joomla 1.5 to accommodate the legacy static content items (which had no category or section assigned to them) when users upgraded from Joomla 1.0.  Uncategorized articles are limited in how they can be displayed on your website (see Chapter 7 for details), so we don't recommend them for novice Joomla users. 

# Summary

In this chapter, we've covered how to:

  * Plan ahead for your article organization

  * Create article structure using the Section Manager and Category Manager

  * Move, manage, copy, and edit your article content within your site structure

In the next chapter, we'll explore the Article Manager and article-related functionality that shows the true power of Joomla. 

# Chapter 6.  Creating Content

Since Joomla is a content management system, it goes without saying that content is at the heart of everything it does.  The primary content type in Joomla is the article.  In this chapter, we'll explore articles in depth as the basis for understanding how Joomla organizes content as a whole.  While the Joomla workflow may not appear logical at first, the more you use it, the more you'll understand why things are set up the way they are. 

# Articles As Building Blocks

Articles are the main building blocks of your site and they are used in one of two ways:

  * A page on your website may consist of a single article.  As users navigate your website, they view one article at a time on each page. 

  * A page on your website may consist of multiple articles.  As users navigate your website, each page they see contains several articles (e.g., an entire section or category of articles).  These might be full articles or just a teaser extract that requires users to click a "Read more..." link to view the entire article. 

Most sites will likely use a combination of both of these options to display articles. 

The Article Manager (shown in Figure 6-1) is the tool for creating and managing articles. 

Figure 6-1.  The Article Manager with sample content

We'll break down the interface into a few key areas:

Top Toolbar

The toolbar in the upper-right area contains the tools you'll most commonly use with articles.  We'll cover each of these in this chapter. 

Article Filters

These filters are used to change what articles are shown or hidden in the Article Manager.  This is handy if you have a lot of articles.  It has no effect on how articles are displayed on your website. 

Article Listing

This is the large center area where your articles are listed with extra columns of information and functionality.  Clicking on the name of an article, category, section, or username will open that item up for editing. 

Article Manager Pagination

Pagination buttons on the bottom help you navigate between pages of articles.  You can also change how many articles you want to display per page.  This setting has no effect on how articles are displayed on your website. 

Now, let's get started creating your first article. 

# Creating Articles

Creating a new article is as simple as clicking the New icon in the Article Manager toolbar.  This opens up the Article Editor screen (see Figure 6-2) where you can add text, images, or other content.  Once you click Save, your article is saved and you're taken back to the Article Manager.  If you want to continue working on the article, click Apply to save it and keep the article open for editing. 

Figure 6-2.  The Article Editor

## The WYSIWYG Editor

WYSIWYG (What You See Is What You Get) editors make it very easy to create and format your site content.  If you're familiar with most word processing programs, you're already familiar with how the B button makes text bold and how to make text bigger or smaller. 

TinyMCE is the editor included with the basic installation of Joomla.  It's a lightweight and powerful WYSIWYG editor that not only allows you to write and format your text, but supports image management, Flash/media embedding, and tables (see Figure 6-3). 

Figure 6-3.  The TinyMCE editor toolbar

You can change the editor in the Global Configuration to either set your choice of editor on a site-wide basis or in a User's Profile to set on an individual basis.  To change the WYSIWYG editor for all users, visit Site→Global Configuration and select the Site tab in the secondary toolbar (if it isn't already selected).  Under Site Settings (see Figure 6-4), you should see a drop-down menu to select an editor to use globally.  Select No Editor if you want to turn the editor off completely. 

Figure 6-4.  Site Settings in Global Configuration showing WYSIWYG editor options

### Note

You can install other third-party WYSIWYG editors, such as extensions, and they will appear in this same drop-down menu.  You'll find a few editor options in Appendix B.

There is a new editor in Joomla 1.6.  For more information, see Chapter 21. 

Click Save when you're done.  For more information on other areas of the Global Configuration, see Chapter 4. 

To change the WYSIWYG editor for just one user, go to Site→User Manager.  Find a user that is at least Author level or higher (the minimum required to author content) and click his username to edit his profile.  Under Parameters, change the setting for User Editor (see Figure 6-5). 

Figure 6-5.  Editing a user to assign a WYSIWYG editor

Click Save when you're done.  For more information on editing other user details in the User Manager, see Chapter 12. 

## Customizing Articles

Under the text editor area in the Article Editor, you've probably already noticed four article-related buttons (see Figure 6-6).  These buttons extend the functionality of the Article Editor.  Let's take a closer look at each. 

Figure 6-6.  The default editor extended toolbar

Image

Add images to your articles via the Media Manager.  The Media Manager will be explained in detail in Chapter 12. 

Pagebreak

Pagebreaks are often added to reduce scrolling when reading long articles.  Clicking the pagebreak button gives you the option to add a Page Title and "Table of Contents Alias."  The following HTML code will be automatically inserted into your article:

    <hr title="My Page Title" alt="MY TOC Alias" class="system-pagebreak" />

When this article is loaded on the frontend of your website, Joomla will automatically generate a table of contents in your article with links to any other pagebreaks you've added. 

Read more...

When you have a few articles displayed on a single page, a common practice is to display just a teaser of each article.  When a user finds an article of interest, they can click a "Read more..." link to see the full article. 

To add a "Read more..." link to the article, place your cursor where you want to "break" your article (usually after the first sentence or paragraph) and click the "Read more..." button.  The following HTML will be automatically inserted into your article:

    <hr id="system-readmore" />

There will now be a horizontal rule with a break as shown in Figure 6-7.  When this article is loaded on the frontend of your site, Joomla will add a "Read more..." link at that point. 

Figure 6-7. " Read more..." link in the article

Toggle Editor

This button toggles the WYSIWYG editor on and off so that you can directly edit the HTML code if you prefer. 

### Warning

There are new changes to this functionality and a new WYSIWYG editor in Joomla 1.6.  Please see Chapter 21 for more details. 

There are third-party plug-ins that add more buttons here and extend the Article Editor functionality.  We'll show you an example of this in Chapter 18, and you can see other plug-in options in Appendix B.

# Article Publishing and Unpublishing

New articles are set to published by default—meaning they are visible to your site users.  Unpublishing an article removes it from view.  Publishing and unpublishing articles is straightforward, but there are a number of ways to do it and customize the process.  The first (and most common) way is clicking the publish/unpublish icon in the Article Manager (see Figure 6-8). 

Figure 6-8.  Publish and unpublish icons in the Article Manager

Find the icon in the Published column.  A green checkmark means the article is already published on your site.  A red circle means the article is unpublished and not viewable on your website. 

The second way to toggle the published state is in the Article Editor where you edit the article.  Go to the Article Manager and click the name of the article you want to edit.  Find the Published button and select either Yes or No to publish or unpublish your article (see Figure 6-9). 

Figure 6-9.  Editing an article: publish or unpublish

Click the Save button or Apply button to save your change. 

## Scheduled Publishing and Unpublishing

The third way to publish or unpublish an article is to auto-publish on a specific date and time.  There are many situations where this could be useful (maybe you're going on vacation and you want an article to auto-publish while you're away).  Alternately, you might want an article to expire on a certain date and unpublish automatically. 

Start by going to the Article Manager and clicking the name of the article to edit it.  In the right column under the Parameters (Article) heading, you'll see the basic parameters section (see Figure 6-10). 

Figure 6-10.  Article Editor: scheduled publishing and unpublishing

Adjust the following parameters to automate publishing:

Start Publishing

This is the date and time the article will be automatically published.  Clicking the calendar icon will display a calendar date picker (see Figure 6-11).  The default value for this field is the Created Date. 

Finish Publishing

This is the date and time the article will be automatically unpublished.  Clicking the calendar icon will display a calendar date picker (see Figure 6-11). 

### Note

Remember, these parameters are based on your web server's internal clock.  Check with your web-hosting provider to see if there's a time zone difference you need to account for when scheduling. 

Also note that the time is in 24-hour format: HH:MM:SS. 

The Finish Publishing parameter also recognizes the term Never for items with no end date.  The default value for this field is Never. 

Click the Save button or Apply button to save your changes.  The other Basic Article Parameters are explored in the next section. 

Figure 6-11.  Article Editor: Calendar popup for scheduled publishing and unpublishing

# Article Parameters

Article parameters are divided into three parts: Global, Advanced, and Basic.  The Basic Parameters and Advanced Parameters are located in the Article Editor, while the Global Article Parameters are located in the Article Manager. 

## Article Parameters Hierarchy

The display of an article on your Joomla website is controlled by three sets of parameters: Advanced Article Parameters, Menu Article Parameters (see Chapter 7), and Global Article Parameters.  In many cases, the same parameter can be specified for the article, menu item, and in the global parameters.  A specific cascading hierarchy is used to determine which parameters are actually used when an article is displayed. 

Basic Article Parameters and Advanced Article Parameters

These parameters will override both the Menu Item and Global Parameters and they are located in the individual articles.  Go to the Article Manager and click the article title to open the article for editing.  Find the settings in the right column under Parameters (Article) and Parameters (Advanced). 

Menu Article Parameters

These parameters will override the Global Parameters and they're located in the Parameters (Component) section of individual article menu items (pointing to articles).  They can be adjusted by going to Menus in the top menu and choosing the menu that contains the menu item you want to edit.  Then click the name of the menu item in the Menu Item Manager to open it for editing.  See Chapter 7 for more information on setting up Menu Items and their parameters. 

Global Article Parameters

As shown earlier in this chapter, the Global Article Parameters are accessible in the Article Manager (Content→Article Manager).  In the top toolbar, click the Parameters icon.  These parameters will be overridden by either Article Parameter settings or Menu Article Parameter settings. 

## Global Article Parameters

Since the Global Article Parameters aren't specific to any one particular article, they're found in the Article Manager.  Click the Parameters icon in the top toolbar to open the parameters screen (see Figure 6-12). 

Figure 6-12.  Global Article Parameters

Many items are the same as those in the Advanced Article Parameters in the next part of this section, so we'll cover just the unique items here:

Show Unauthorised Links

Set this to Yes if you want links to Registered articles to show whether or not the user is logged in.  The articles will still require the user to be registered to view the full article. 

Read More... Link

Set this to Yes if you want the "Read more..." link to show for articles. 

Hits

Set this to Yes if you want to show the number of hits each article has received. 

For each feed item show

Set this to either Intro Text or Full Text to define what is displayed in the RSS feed.  We recommend setting this to Intro Text to keep your feeds light and attract site visitors to read the entire article. 

The following Filtering Options are used to control filtering on article submissions.  These are essentially security precautions to keep malicious code from being added to your website, but they can also filter unwanted code in articles when an article is submitted or edited:

Filter Groups

Select the user group(s) you want the filters applied to. 

Filter Type

Select the type of filter you want to apply:

Blacklist

When selected, this will filter out the following blacklisted tags by default: applet, body, bgsound, base, basefont, embed, frame, frameset, head, html, id, iframe, ilayer, link, meta, name, object, script, style, title, and xml.  It will also filter out the following blacklisted attributes by default: action, background, codebase, dynsrc, and lowsrc. 

Whitelist

This allows only the tags specified in the Filter Tags or Filter Attributes fields. 

No HTML

This removes all HTML from the article when submitted. 

Filter Tags

List additional HTML tags to filter, separating each with a comma or space.  These tags will be either blacklisted or whitelisted, depending on your Filter Type setting. 

Filter Attributes

List additional attributes to filter, separating each with a comma or space.  These attributes will be either blacklisted or whitelisted, depending on your Filter Type setting. 

These Filtering Options are applied regardless of which WYSIWYG editor is used. 

### Note

Some third-party editors have their own filter configuration options.  See the documentation for your particular editor for more information. 

## Basic Article Parameters

The Basic Article Parameters cover the most important options for all articles.  Start by opening the Article Manager and clicking the name of the article to edit it in the Article Editor.  In the right column under the Parameters (Article) heading, you'll see the basic parameters section (see Figure 6-13). 

Figure 6-13.  Article Editor: Basic Article Parameters

The Start Publishing and Finish Publishing options were covered in the previous section, so let's take a look at the other parameters:

Author

This is the username of the person who created this article.  The user must be at least an Author to create articles.  See Chapter 12 for how user access levels work. 

### Note

If you demoted the user that was the original author of an article to lower than the Author level and reopened one of their articles, this menu will be blank.  If you need to edit the article, you'll be forced to either choose another user that is at least at the Author level or temporarily promote the original article author to set the correct username. 

Author Alias

If you don't want to use the Author's name, you can enter an alternate name here that will override it. 

Access Level

You have three options for access levels: Public, Registered, and Special.  You will mostly use Public (so all site visitors can see this article) or Registered (so users must be registered to see this article).  See Chapter 12 for more information about these levels. 

Created Date

This field is automatically populated when you create a new article.  If you copied an existing article, this date will be the same as the original article even if it was copied much later.  To choose a different date, click on the calendar icon to show a calendar date picker. 

If you make any changes to these parameters, remember to click Save or Apply to save your changes. 

### Warning

There are new changes to this functionality in Joomla 1.6.  Please see Chapter 21 for more details. 

## Advanced Article Parameters

Each article has its own Advanced Article Parameters to control how the article is displayed in the context of your site. 

To change an article's Advanced Article Parameters, go to the Article Manager and click on the name of the article you want to edit in the Article Editor.  In the right column, you'll see the Parameters (Advanced) section (see Figure 6-14). 

Figure 6-14.  Advanced Article Parameters in the Article Editor

If it isn't already open, click the Parameters (Advanced) title to open it and reveal the following options:

Show Title

This will display the article's title. 

Title Linkable

Linkable titles link to the full articles, which is the same as the "Read more..." link.  For search engine optimization (SEO) purposes, it's recommended to make titles linkable. 

Intro Text

When viewing the full article, this field determines if the intro text is repeated again. 

Section Name

This controls the display of the section name under the title. 

Section Title Linkable

This makes the section name a link. 

Category Title

This controls the display of the category name under the title. 

Category Title Linkable

This makes the category name a link. 

Author Name

This controls the display of the author name under the title. 

Created Date and Time

This displays the date and time the article was created under the title. 

Modified Date and Time

This controls the display of the date and time the article was last modified at the bottom of the article.  If the article has never been modified, nothing will appear. 

Show Navigation

When viewing the full text of an article, this will show the < Prev and Next > buttons to navigate between articles in the same category. 

Read more... Link

This adds a "Read more..." link to the bottom of any article that has both intro text and full text determined by using the "Read more..." button in the Article Editor. 

Article Rating/Voting

Joomla has a built-in five-point rating system plug-in that's used for rating or voting for articles.  Enable or disable it here. 

Icons

In the upper-right corner of each article are icons for PDF, Print, and E-mail.  Setting this parameter to Hide will replace the icons with text. 

PDF Icon

This turns the PDF icon/link on and off. 

Print Icon

This turns the print icon/link on and off. 

E-mail Icon

This turns the email icon/link on and off. 

Content Language

This allows you to assign a language to your content for specific language handling.  See Chapter 14 for more information on language settings. 

Key Reference

This is an optional text key that refers to this specific article instead of using the article ID.  See Appendix D for tips on how to use this. 

Alternative _Read More_ text

If you have a "Read more..." marker in your article and you don't want to use the standard "Read more..." text for your link, enter your preferred text here. 

Once you've set these options to your liking, click Save. 

### Note

We advise you to review Article Parameters Hierarchy if you think your parameters aren't being reflected on the frontend of your website. 

## Page Functions: Print PDF, Email to a Friend, and Print Page

Joomla gives your website visitors the ability to repurpose your site articles into PDFs, email, or for printing.  If you have the PDF Icon, Print Icon, or the E-mail Icon parameters set to Show, these icons will appear for each of your articles on the frontend of your website. 

### Note

If you have these parameters set to Show and your icons aren't appearing, refer to the previous section to understand hierarchical parameters in Joomla.  It's likely you have one parameter overriding another. 

Here's a description of each of these functions:

Print PDF

This will automatically create a PDF from a single article. 

E-mail to a Friend

This will display a pop-up form (see Figure 6-15) to send a link to this page to a friend. 

Print Page

This will open a pop-up window (see Figure 6-16) with a printer-friendly version of this article. 

Each of these features works only on a single article.  If you're displaying multiple articles on a single web page, a separate icon will appear for each article. 

### Warning

There are changes to this functionality in Joomla 1.6.  Please see Chapter 21 for more details. 

## Prevent Code from Being Stripped Out of the Editor

As you create articles, you may discover that after saving an article, some of the underlying code has been altered.  There are two ways article code can be filtered.  The first is a security filter that will filter out malicious code when you save an article.  The second is a feature of the WYSIWYG editor that cleans and formats code.  Either or both can perform undesired code alterations.  In either case, you may have a specific reason to keep the code in your article and avoid this stripping effect. 

The simplest solution is to turn off the editor before adding the code being stripped out.  The preferred method of turning off the editor is done within your user profile. 

  1.  From the backend, go to Site→User Manager. 

  2.  Click on your name. 

  3.  Change User Editor to Editor – No Editor. 

  4.  Click Save. 

Figure 6-15.  Email a link to a friend

Figure 6-16.  Open a printer-friendly window

The only downside to this is that if someone else edits the item with their editor turned on, they will save the stripped code to the database.  To change the editor for all users set to use the default editor, change the editor setting in the Global Configuration (see Chapter 4 if you need help). 

The other solution is to adjust the Global Article Parameters to allow for the code you want to add.  See the explanation of Global Article Parameters earlier in this section. 

## Global Check-in

When you edit an article, Joomla "checks out" the article from the database so multiple users don't try to edit the same article at the same time.  When you're done editing an article, it must be "checked in."  If this doesn't happen (for example, closing your browser window without saving your work or trying to save changes after your login session has expired), Joomla will assume that the article is still checked out and will prevent anyone from editing it.  If you discover that an article remains inappropriately checked out, you can check it back in by going to Tools→Global Check-in.  This will check in all of your articles and any other items that are checked out. 

### Warning

If you use this tool to check articles back in, make sure none of your users have open articles; otherwise, their work will be lost. 

See Chapter 16 for more details on Tools. 

# Article Manager Filtering and Ordering

Hopefully, by now you've successfully created an article or two.  Now let's take a step back and look at how to manage articles using the Article Manager. 

If you refer back to the Article Manager screen (see Figure 6-1), you'll notice there are a few options for both filtering and ordering articles. 

## Filtering Articles

Filtering articles in the Article Manager is really handy when you have more articles than will fit on a single screen.  These filters are located at the top of the article listing (see Figure 6-17). 

Figure 6-17.  Article Manager filters for viewing articles

### Note

There's no connection between filtering articles in the Article Manager and the article filter in the Global Article Parameters.  Both have completely different functions. 

They're pretty straightforward, but we'll go over them here. 

Filter

Enter text to search by article title.  Click the Reset button to reset your search or filtering options. 

Select Section

Choose to filter the articles by an existing site section.  The category drop-down menu will change based on this selection. 

Select Category

Choose to filter the articles by an existing site category.  The category drop-down menu will change based on the selection in the section drop-down. 

Select Author

Choose to filter the articles by author. 

Select State

Choose to filter the articles by article state: Published, Unpublished, or Archived. 

### Note

This functionality changes in Joomla 1.6 due to integrated trash and featured articles.  See Chapter 21 for more information. 

At the bottom of the article listing, there's a drop-down to select how many articles are displayed on the screen at one time.  Be careful with this setting.  If you have a lot of articles and set this to All, you could greatly affect the performance of your server while you are browsing the article list.  The default list length can be configured in Joomla's Global Parameters. 

## Ordering Articles

You can also display articles by the order they are set in the Article Manager.  You only need to set your article order here if you're going to use this order to display your articles on your website.  In Chapter 7, you'll explore creating menu items and setting their parameters to display your articles in a specific order (e.g., by date or title). 

If you're not there already, go to Content→Article Manager to view your articles.  Article ordering is handled on a category level and you can see the article's position within that category by looking at the Order column. 

To make ordering easier to see, let's use the filters to view a specific category.  Choose a category from the article filter drop-down menu (see Figure 6-17 in the previous section).  Once you've done that, you should see only the articles in a specific category—something like Figure 6-18. 

Figure 6-18.  Article Manager, ordering a category of articles

In the Order column, the articles are sequentially numbered.  You can reorder the articles in one of two ways:

  * Click the green arrows in the Order column to move an article up or down into position. 

  * Type specific numbers into the Order values and click the tiny diskette icon at the top of the column to save your new order. 

# Permissions

Permissions are determined by one of three access levels: Public, Registered, and Special.  These three access levels correspond to the following user groups and determine their access:

Public

This level applies to general users and site visitors who don't have an account.  It could also be defined as guest users. 

Registered

This level applies to all user groups that are Registered or higher, including Authors, Editors, Publishers, Managers, Administrators, and Super Administrators. 

Special

This level applies to users that are either Administrators or Super Administrators. 

If you need to find out more about what these user groups are able to do in Joomla, see Chapter 12 for an in-depth look at user permissions. 

## Section Permissions

To set permissions for an entire section, go to Content→Section Manger and choose the section you want to edit.  Choose an Access Level in the field on the left and click Save. 

### Note

You can click the level name (Public, Registered, or Special) in the Access Level column of the Section Manager to rotate through each of these levels without opening the section itself. 

## Category Permissions

To set permissions for an entire category, go to Content→Category Manger and choose the category you want to edit.  Choose an Access Level in the field on the left and click Save. 

### Note

You can click the level name (Public, Registered, or Special) in the Access Level column of the Category Manager to rotate through each of these levels without opening the category itself. 

## Article Permissions

To set permissions for a single article, go to Content→Article Manger and choose the article you want to edit.  Choose an Access Level from the drop-down menu in the right column under Parameters (Article) and click Save. 

### Note

You can click the level name (Public, Registered, or Special) in the Access Level column of the Article Manager to rotate through each of these levels without opening the article itself. 

# Archiving Articles

Archiving articles is the best way to remove your articles from view, but still keep them.  Archived articles aren't deleted, but they aren't visible unless you create direct links to them or create an Archived Article List Menu Item (see Chapter 7 for information on Menu Item types). 

## Archiving an Article

Archiving an article still keeps it visible in the Article Manager, but its title link becomes disabled, so you can't edit it and the suffix _Archived]_ is added to its name (see [Figure 6-19). 

Archived articles remain in their original categories, but are no longer accessible.  To Archive an article:

  1.  Go to Content→Article Manager in the top menu if you haven't done so already. 

  2.  Click the checkbox next to the name of the article(s) you want to archive. 

  3.  Click the Archive icon in the top toolbar. 

Your article(s) should now look similar to Figure 6-19. 

Figure 6-19.  Archived article in the Article Manager

### Note

If you accidentally archive a published article, you can instantly republish it by clicking the checkbox next to the article name and then the Publish icon in the top toolbar to restore things as they were. 

## Unarchiving an Article

Unarchiving an article follows similar steps as for archiving an article:

  1.  Go to Content→Article Manager in the top menu if you haven't done so already. 

  2.  Click the checkbox next to the name of the article(s) you want to unarchive. 

  3.  Click the Unarchive icon in the top toolbar. 

When your article is unarchived, it will be unpublished by default.  Click the Publish icon to republish it. 

# Trashing Articles

When you no longer need an article, you can remove it from the Article Manager by moving it to the trash.  The Article Trash behaves like the recycle bin or trash can on your desktop computer.  Once you trash an article, you can still recover it until you empty the trash. 

## Trashing an Article

Trashed articles retain information about their original categories but are no longer accessible.  To trash an article:

  1.  If you haven't done so already, go to Content→Article Manager in the top menu. 

  2.  Click the checkbox next to the name of the article(s) you want to trash. 

  3.  Click the Trash icon in the top toolbar. 

Your article(s) should now be moved to the trash.  Go to Content→Article Trash to see your trashed articles (see Figure 6-20). 

Figure 6-20.  Article Trash Manager

Now you can either permanently delete trashed articles or restore them to their original locations. 

## Restoring Trashed Articles

Restoring trashed articles will return them to their original location.  View the contents of the Article Trash by going to Content→Article Trash.  To restore an article from the trash, shown next. 

  1.  If you haven't done so already, go to Content→Article Trash in the top menu. 

  2.  Click the checkbox next to the name of the article(s) you want to restore. 

  3.  Click the Restore icon in the top toolbar.  You'll see a confirmation screen with the list of articles to be restored (see Figure 6-21). 

  4.  Click the Restore icon again to confirm you want to restore these articles. 

Figure 6-21.  Article Trash: Restore Items

Joomla will confirm you're doubly sure by showing a message box confirming you really want to restore the articles. 

When articles are restored and returned to the category they were deleted from, they are unpublished.  They don't return to their same positions in the order.  Instead, they will be the last items in the order with an Order value of 9999.  You can then move the articles into the desired order and republish them when you're ready. 

## Permanently Delete Trashed Articles

To permanently delete articles, go to Content→Article Trash, click the checkboxes next to the articles you want to delete, and then click the Delete icon.  This will display a confirmation screen similar to Figure 6-22. 

Figure 6-22.  Article Trash: Permanently Delete Items

Unlike restoring articles, Joomla does not ask you to confirm a second time if you really want to delete the selected articles.  Deleting articles from the Article Trash actually deletes the information from the database. _ So, if you accidentally delete an article from the Article Trash, it's gone forever_. 

# The Front Page Manager

The default home page of your Joomla website is called the _front page_.  The Front Page Manager is a tool for managing content on the home page of your website.  Articles added here will be shown on your home page in the order they are displayed on the backend.  To access it, go to Content→Front Page Manager in the top menu. 

### Note

The Front Page Manager manages a page called the Front Page.  This Front Page doesn't have to be the home page of your site, but commonly is.  If you wanted to have another page as the home page (e.g., with a Flash intro animation) your users would see before getting to your website, your Front Page wouldn't be the home page. 

There are two ways to publish an article on the home page:

  * Click the icon by the article title in the Front Page column of the Article Manager (see Figure 6-23). 

  * While creating or editing an article, find the _Front Page_ radio buttons near the title and click Yes to add this article to the Front Page.  Make sure the article is published by selecting Yes (see Figure 6-24).  Click Save or Apply in the top toolbar. 

Figure 6-23.  Article Manager and icon in Front Page column

Figure 6-24.  Editing an article: Front Page and Published radio buttons

Now that you've published an article or two on your home page, let's go to the Front Page Manager.  You should now see the articles you added, as shown in Figure 6-25. 

Figure 6-25.  The Front Page Manager with sample content

While we're here, let's review the toolbar options in the Front Page Manager:

Archive

To archive an item directly from within the Front Page Manager, click the checkbox next to the article(s) you want to archive and click the Archive icon.  If you need to _Unarchive_ an item, refer to the earlier section in this chapter on unarchiving articles. 

Publish and Unpublish

These icons will publish or unpublish an article but keep it in the Front Page Manager.  This published or unpublished state affects the article throughout the website, not just on the front page. 

Remove

To remove an article from the front page, click the checkbox next to the article(s) you want to archive and click the Remove icon.  The article isn't deleted—just removed from the front page. 

Help

There is contextual help on this page using the Joomla Help System. 

Now that you have a few articles added, let's take a look at how to reorder them. 

## Ordering Front Page Articles

Ordering articles in the Front Page Manager works very much the same way as ordering articles in the Article Manager. 

In the Order column (Figure 6-26), you can see that the articles are sequentially numbered regardless of their category (the Article Manager allows ordering only within a single category).  You can reorder the front page articles in one of two ways:

  * Click the green arrows in the Order column to move an article up or down into position. 

  * Type specific numbers into the Order values and click the tiny diskette icon at the top of the column to save your new order. 

Figure 6-26.  Front Page Manager: Ordering articles using the Order column

## Removing Front Page Articles

Just like when you add articles to the Front Page Manager, there are two ways to remove an article from it. 

  1.  Click the icon by the article title in the Front Page column of the Article Manager (see Figure 6-23, shown earlier). 

  2.  When editing an article, find the Front Page radio buttons near the title and click No to remove this article from the Front Page (see Figure 6-27).  Then click Save or Apply in the top toolbar. 

Figure 6-27.  Removing an article: Published and Front Page radio buttons

The article(s) should now be removed from the Front Page Manager and your front page. 

# Frontend Versus Backend Editing

Up to this point, we've been creating and editing our content solely on the Administrator Backend.  While this is the most common way, you may want to allow certain users to create and edit content on the frontend of your website. 

### Note

The user needs to be an Editor or higher and logged into the frontend to edit content.  See Chapter 12 for more information on user levels. 

## Edit an Article on the Frontend

Editing articles on the frontend is pretty straightforward.  Instead of using the Article Manager on the backend, you navigate to the article you want to edit and look for the Edit icon that looks like a small pencil and paper (see Figure 6-28). 

Figure 6-28.  Editing an article on the frontend

If there's more than one article on your page, find the Edit icon next to the article title you want to edit.  Click the Edit icon to open the current article in the frontend Article Editor.  You'll see the same basic options that are visible on the backend (see Figure 6-29). 

Figure 6-29.  The frontend Article Editor

When you've finished editing the article, click the Save button to close it and return to the web page. 

# Submitting Content on the Frontend

Users can submit two types of content on the frontend: articles and web links.  Before you begin, you'll need to enable frontend content submission by setting up submission menu links.  Chapter 7 covers creating menus in detail, but we'll walk through the steps here.  This is a process with three big steps:

  1.  Create a new User Menu by going to Menus→Menu Manager and clicking the New icon in the toolbar.  Enter a menu title and module title you'll remember (we'll call ours just User Menu).  If you haven't set up a menu before, see Chapter 7 on how to do this. 

  2.  Go to Menus in the top menu and select the name of your new menu.  Click the New icon in the toolbar to add an Article Submission Layout menu item (under Articles in the list of menu item types).  Give it a name like "Submit an Article" and click Save.  Repeat this step to add a Web Link Submission Layout menu item (under Web Links in the list of menu items types).  Give it a name like "Submit a Web Link" and click Save.  If you haven't set up a new menu item before, see Chapter 7 on how to do this. 

  3.  Go to Extensions→Module Manager and find the menu module you created in step one.  Click the Publish icon next to its name to publish the module and click the word Public in the Access Level column to change it to Registered.  Make sure that it's published in a visible module position.  If you're logged in and your menu isn't visible on the frontend of your website, see Chapter 9 for more information. 

That's a lot of details in those three steps, so take your time to get each of them right.  You should now see something like in Figure 6-30.  We're using the default Milkyway template on the frontend and our menu is in the left column (module position _left_ ). 

Figure 6-30.  Menu module in Milkyway after logging in

Once this menu module is set up, you're ready to start accepting articles and web links from users on the frontend. 

## Submit a New Article on the Frontend

Once your users log in, they'll be able to see the user menu we've just created in the previous section.  To submit an article, click the "Submit an Article" link to open the "Submit an Article" form (see Figure 6-31). 

### Note

The user needs to be an Author or higher level and logged in to the frontend to submit articles.  The user needs to be a Publisher or higher level to publish articles. 

Fill out your article information and parameters as you would on the backend.  Refer back to the earlier sections of this chapter to refresh your memory if you need to.  When you're done, click Save. 

## Submit a New Web Link on the Frontend

Submitting a web link works in very much the same way as for an article.  Once your users log in, they'll be able to see the user menu we just created in the previous section.  To submit a web link, click "Submit a Web Link" to open the Submit a Web Link form (see Figure 6-32). 

### Note

The user needs to be an Author or higher level and logged into the frontend to submit web links. 

Figure 6-31.  Submit an Article form

Figure 6-32.  Submit an Web Link

The form items should be self-explanatory, but we'll go over them:

Name

Enter the name of the website here. 

Category

Choose from a list of predefined categories.  If you need more, set them up in the Web Links component in the Administrator Backend. 

URL

Enter the full URL here. 

Published

Choose Yes if you want the link to be published right away.  Only users at the Publisher level or higher have this option.  Users lower than Publisher can submit links, but they will be held until a user at the Publisher level or higher publishes them. 

Description

Add a short description of the web link here. 

Click Save to submit your web link. 

# Summary

In this chapter, we've covered:

  * Creating and editing articles

  * Using article parameters to customize the article's look and feel

  * Article permissions

  * Page functions and how they work

  * Archiving articles

  * Trashing articles

  * Front Page Manager

  * Submitting content on the frontend

In the next chapter, we'll discuss creating and maintaining your menu structure. 

# Chapter 7.  Menus

The importance of a good menu structure is key to any website.  If users can't quickly and logically find the information they want, they'll go somewhere else.  When you're building a website you should spend the extra time to make sure the menu structure (or site map) is just right.  On smaller sites, the site map pretty much builds itself because the structure is simple.  On larger sites with thousands of articles, time invested up front to get things organized in the best possible way will save a lot of time and headache down the line and also provide for a better user experience. 

Joomla makes it easy to organize your information with its menu system.  You can create an unlimited number of menus and menu items as needed, with the ability to nest those menu items within each other to go as deep as you want. 

### Note

Some of you are probably shaking your head at the previous unlimited statement.  Yes, we're just like you in that we question everything.  The truth is that it's not technically unlimited.  The maximum number of menu items is actually 4,294,967,295.  With a number that big, we think it's safe to say that it is virtually unlimited. 

# Menu Structure Versus Content Structure

In Chapter 5, you learned about how content is organized in Joomla.  Some users expect that when you create a hierarchy of sections, categories, and articles, they will automatically be translated to a menu.  This is not the case.  Content structure and menu structure are separate in organization and functionality.  If you want, you can create your menu structure to mimic your content structure, but you don't have to.  There is no limit to the number of menu items you can nest, but there's a three-tier limit on articles, so it might be difficult (or even impossible) to have your content structure mimic your menu structure. 

Just like content structure, menu structure is created in a nesting format.  This means that you can create a menu item inside of another menu item just like you create a category inside of a section.  This is called nesting.  You want to be mindful of how deep your menu items go.  If you have a menu item that is seven levels deep, odds are that most users will have a hard time finding it because they'd have to click through six levels before they get to that specific page. 

### Note

If you want to read more about this phenomenon, try Googling the phrase "three-click rule," which states you should generally avoid having any content more than three clicks from any location on your website. 

Keep in mind that an article must be created before you can create a menu item that points to it.  It seems like a simple thing, but even experienced Joomla users can forget. 

### Note

Don't say we never told you that Joomla is a SCAM: **S** ection, **C** ategory, **A** rticle, **M** enu. 

If you remember to set things up in that order, you will be fine. 

(This tip is courtesy of Steve Burge at <http://www.alledia.com>.) 

# Menu Manager

Contrary to what you might assume from its name, you don't actually create menu items in the Menu Manager.  The Menu Manager is actually for creating menus. 

Figure 7-1 shows a Joomla website with only one menu called Main Menu.  The columns in the table show what is in each particular menu:

Title

This is the title of the menu. 

Type

Type is the unique name given to this menu.  This value is used internally by Joomla and is never seen by users who visit your website. 

Menu Items(s)

Clicking this icon will take you to the Menu Items Manager screen for that particular menu.  There you can create, edit, or delete menu items. 

# Published

This is the number of published menu items in a given menu. 

# Unpublished

The number of unpublished menu items in a given menu. 

# Trash

The number of menu items that have been deleted in a given menu.  You can think of it as the trash or recycle bin. 

# Modules

This is the number of menu modules that are assigned to this menu.  Typically, this number is 1.  However, if you decide to create split menus, this would be more.  For more information on split menus, see Menu Module: Split Menus. 

ID

This is the ID of the menu.  Technically speaking, it is the value of the primary key field ID in the _jos_menu_types_ table. 

Figure 7-1.  Menu Manager

The top toolbar contains a few actions that should be self-explanatory, but we will cover them anyway. 

Copy

With one of the radio buttons next to a menu selected, clicking Copy will create a duplicate of that menu. 

Delete

Selecting a menu and then clicking Delete will delete the menu. 

Edit

Selecting a menu and then clicking Edit will allow you to edit menu information like its description. 

New

Takes you to the New Menu screen in order to create a new menu. 

Help

The help screens for the Menu Manager will pop up in a new window when this icon is clicked. 

The New Menu and Edit Menu screens are very similar.  The difference is that once a menu is created, you can no longer change the Module Title field from the Edit Menu screen.  You'll have to edit the module's title in the Module Manager.  This is the same for both the New Menu screen (see Figure 7-2) and the Edit Menu screen. 

Figure 7-2.  Menu Manager: Create a new menu

Unique Name

A unique name is used to identify the menu in other parts of Joomla.  As a best practice, unique names should be in all lowercase without spaces and can't be more than 25 characters. 

Title

This is the title of the menu. 

Description

This is text describing the menu.  It isn't shown to the site visitor so it can be something that helps you remember what this menu is for or where it's located on your website. 

Module Title

To display your menu, you'll need to create a menu module connected to it.  If you fill in a title here, a new menu module associated with this menu will be automatically created when you click Save.  If you leave this blank, no menu module will be created.  This may be applicable if you're creating custom URLs (see SEF URLs and Creating Custom URLs for more details on creating custom URLs).  If you're editing the menu, this field isn't available and you'll need to edit a module's title in the Module Manager. 

# Menu Item Manager: Menu Item Types Explained, Controlling Layout

Figure 7-3.  Menu Item Manager

The Menu Item Manager, shown in Figure 7-3, gives you a quick glance at the site map for a particular menu.  This screen is also where you create new menu items, as well as edit and delete existing ones.  Most of the icons on the toolbar are self-explanatory; however, a couple of them should be explained a bit more:

Menus

A link to the Menu Manager. 

Default

By setting a menu item as _default_ , you are saying, "I want this menu item to be my front (or home) page."  You could decide to make your front page a menu item in a different menu as well.  If you look at the Menus drop-down menu (see Figure 7-4), you'll notice there's an asterisk next to the Main Menu.  This shows that the default menu item (the front page) is located within that menu. 

Figure 7-4.  Menus drop-down menu

Move

Move menu items by checking off the ones you want to move and clicking Move. 

Copy

Copy menu items by checking off the ones you want to copy and clicking Copy. 

Now let's move on to the New Menu Item screen.  Clicking New in the top toolbar on the Menu Items Manager screen will display the New Menu Items screen.  As you can see in Figure 7-5, there are a variety of menu item types.  Each menu item type creates a different type of link, most of which link to a specific component within Joomla. 

Figure 7-5.  Menu Item: [New]

Internal Link

While not really a menu item type itself, Internal Link serves as a container of internal menu item types.  Almost all of the components in Joomla you can link to via a menu are found here. 

Articles

This is the most popular and powerful menu item type for displaying site articles.  The many options available will be discussed later in this chapter. 

Contacts

The Contacts menu item type links to a Contacts page.  Think of the Contacts page as a typical Contact Us page, but Joomla offers lots of options to either customize the look and feel, number of contacts, or information displayed. 

News Feeds

This displays RSS feeds of your choice.  You can display feeds in one, two, or three levels of hierarchy, depending on how you want to organize them. 

Polls

The Polls menu item type links to the results screen for the poll of your choice.  You can't link directly to the poll selection from this menu item type.  Displaying the poll can only be done through the use of the Polls module. 

### Note

This is only half true.  You could technically work around this by creating an article that loaded the Polls module into itself by using the loadposition plug-in.  Then use the Articles Menu Item type to link to it.  See Showing a Module Inside an Article for more information on _loadposition_. 

Search

Create a link to your Search page using this menu item type. 

User

The User menu item allows you to link to the Login, Register, Forgot Username, Password Reset, and User Profile Edit pages. 

Web Links

This menu item displays URLs that you have entered into the Web Link component.  You can either display a single category or all categories.  There is also an option to link to the Web Link Submissions page so site users can submit their own links. 

Wrapper

This menu item type loads a URL you specify into an _iframe_.  This is used to load other websites or a standalone third-party application into a frame on your own website. 

External Link

The External Link menu item is used to link to a URL not on your site.  Technically speaking, you could use it to link to an internal page on your site, but we recommend using the Alias menu item type for that particular situation. 

Separator

You might have a few menu items (in a single menu and at the same level) that you want to visually separate.  The Separator menu item type does just that by adding an empty menu item. 

### Note

If you are good with CSS, you may want to leave the title blank and style the separator class within the rendered _span_ tag.  This will give you more flexibility when styling separators. 

Alias

Alias creates an _alias_ link to another menu item.  This is useful when you want the same link to exist in two separate menus.  One example of when you might want to use this is if you have a Contact Us link in your top menu, but want a link in your footer menu to go to the same page. 

As you start clicking the different menu item types, you will notice that some expand to give you more options.  Figure 7-6 shows all the various options available in Joomla.  If you install additional components, they will be added to this list as well.  The number of layouts or "views" is determined by what the developer has chosen to create.  If it's not clear or obvious what a menu item does, hover over the text and a tooltip with a clear (hopefully) description will appear. 

Figure 7-6.  Menu Item: [New] expanded

Most of the menu items you'll create will use the article menu type.  Let's walk through the most popular article menu item types: Article Layout, Category Blog Layout, Category List Layout, Section Blog Layout, and Section Layout. 

Article Layout

Bar none, the most popular menu item type is the Article Layout.  In short, it displays an article as shown in Figure 7-7.  Each part of the article display (date, author, etc.)  can be customized. 

Figure 7-7.  Menu Item Type: Article layout

Category Blog Layout

The Category Blog Layout shows a specific number of articles in blog-style format—meaning one article after another, usually in chronological order.  There are many parameters within the menu item that allow you to customize the look.  In Figure 7-8, there are three articles shown.  The first article spans the full width and the next two are in separate columns.  You can change the number of articles you wish to show in either area.  Below the articles, there are links to more articles and pagination to navigate the rest of the articles page by page. 

Category List Layout

Also referred to as Category Table, this layout displays the articles within a specified category in a table.  Figure 7-9 shows what this layout looks like using Joomla's default sample data. 

Section Blog Layout

Very similar to the Category Blog Layout, the Section Blog Layout pulls articles from a single section rather than a single category.  Figure 7-10 shows what this layout looks like using Joomla's default sample data. 

Section Layout

Also referred to as Section Table, this layout shows a list of the categories within a single section.  Clicking on one of the categories will take you to the equivalent of the Category List Layout for that category.  Figure 7-11 shows what this layout looks like using Joomla's default sample data. 

Figure 7-8.  Menu Item Type: Category Blog layout

Figure 7-9.  Menu Item Type: Category List layout

Figure 7-10.  Menu Item Type: Section Blog layout

Figure 7-11.  Menu Item Type: Section layout

# Menu Item Parameters

We could spend the rest of this book going through every Menu Item Parameter for each Menu Item, but you'll get a much better idea of how they work if we go through the most popular one in detail.  The Category Blog Layout has more options than all the others, so we'll focus on it. 

### Note

Even though Article Layout is probably more popular, it has fewer options and a lot of them overlap with the Category Blog Layout. 

If you went through the Quick Start process in Chapter 2 or you clicked Install Sample Data during the installation process, your website has the Joomla sample data in it.  This gives you a good opportunity to click around and see how things are set up.  From the backend, hover over Menu and click Example Pages.  You may notice that all four of the menu item types discussed in "Menu Item Manager: Menu Item Types Explained, Controlling Layout" are in this menu.  Click on Category Blog in order to edit the menu item.  Alternatively, you could have checked the box next to it and clicked Edit in the toolbar. 

You may notice the Change Type button.  This is a feature that is new to Joomla 1.5 and it allows you to change this menu item from a Category Blog Layout to a different one.  In the past, you had to create a new menu item and then delete or unpublish the old one, so this comes in handy if you decide you want to display your articles in a different way. 

## Menu Item Details

These fields apply to all menu item types.  You can see this in Figure 7-12. 

Figure 7-12.  Menu Item: [Edit] for Category Blog Layout

ID

This is the unique ID of the current menu item.  This is also referred to internally as _ItemID_.  You may have seen it in your browser's address bar while navigating the frontend of your website.  ItemID controls many things like whether or not to show a module on a given page, which template to load, and how to build the breadcrumbs. 

Title

The title is the actual text that shows in the menu on the frontend. 

Alias

When Search Engine Friendly (SEF) URLs are turned on, the alias is used as part of the URL. 

### Note

To get a better understanding about how you can use Alias to create Custom URLs, refer to SEF URLs and Creating Custom URLs. 

Link

This field should automatically be populated for most of the menu item types.  It just states what the internal link will be to that menu item minus the ItemID parameter. 

### Warning

Changing the default value can cause broken links and unexpected results if you're not sure how ItemID parameters work.  See Using ItemID to Create Internal Links for more details. 

Display in

Display in is the menu you want this menu item to be located in.  Typically, you would not edit this field unless you wanted to move an existing menu item to another menu. 

Parent Item

If this menu item is not intended to be a top-level menu item, you should set what menu item to place it under.  Menu items that are nested under another menu item are called submenu items. 

Published

If set to Yes, this menu item will show up in the menu on the frontend.  If set to No, it will not show up on the frontend. 

Order

Order controls placement within the menu.  Although you can change the order here, we usually find it easier to use the green arrows or the ordering numbers in the Menu Item Manager to reorder menu items. 

Access Level

Joomla has three access levels.  Public means that anyone and everyone can access that menu item.  Users must be logged in to access menu items marked as Registered.  Special signifies that the user must be logged in and belong to a group higher than Registered.  These include Author, Editor, Publisher, Manager, Administrator, and Super Administrator. 

On Click, Open in

This will usually be left as the default value (open in the same window).  But change this if you want the link to open in a new window. 

### Note

As a best practice, if you are linking to a page on the same website, you should open it in the _parent_ window (also known as _current_ ).  If you are linking to a different website, you should almost always open that page in a new window so that you don't take the user away from your website. 

## Parameters (Basic)

The following basic parameter items (see Figure 7-12) are unique to this menu item type.  Even though some fields are repeated in other menu item types, they work a little differently:

Category

Since this menu item type displays all of the articles in a particular category, you need to select which category.  The format of the options is Section/Category. 

Description

In the Category Manager, you can add a description for each of your categories.  This field tells Joomla whether or not to show it. 

Description Image

In the Category Manager, you can set an image to display for each of your categories.  This field tells Joomla whether or not to show it. 

# Leading

Enter the number of leading articles here, which shows the whole article(s) spanning the full width of your website. 

# Intro

Under Leading articles, the intro text of more articles is displayed in column format.  To specify where _intro text_ ends and _full text_ starts, you have to use the "Read more..." button in the editor.  It is recommended that the value for this field be a multiple of the number of columns.  If you have two columns, then # Intro should be set to an even number.  But if you have three columns, # Intro should be a multiple of three (e.g., 3, 6, 9). 

Columns

This specifies the number of columns you want the article intro text to display in.  If you don't want multiple columns, set this field to 1. 

### Note

Using images in intro text can cause an issue when showing it in this format.  If the image is wider than the space allotted in the column, it can push out or break your template.  Plan for this in your site layout. 

# Links

After the Leading and Intro articles are shown, any articles left in the category will be links at the bottom of the page.  If you just want to show links to the rest of the articles, set this value to 999.  You can disable this feature by setting its value to 0. 

## Parameters (Advanced)

The advanced parameters are more detailed than the basic parameters.  These parameters are specific to this menu item type, so other menu item types will have different options available.  See Figure 7-13") for the available options. 

Figure 7-13.  Menu Item: Parameters (Advanced)

Category Order

This can be any value you want.  In fact, this parameter is not even used.  See the explanation under Primary Order. 

Primary Order

This tells Joomla what order you want the articles to be in when they are displayed.  Default will show the newest article first and the oldest article last. 

### Note

In Joomla 1.0, you could select more than one category to pull articles from.  For this reason, you had the ability to specify the category order.  But in Joomla 1.5, you can no longer select more than one category.  For this reason, the Category Order parameter is not needed because you will never have more than one category.  As of this writing, there are no plans to fix this bug for Joomla 1.5. 

Multi Column Order

This setting tells Joomla which direction to order articles in the columns—either going down in rows or across the columns. 

Pagination

If there are more articles in the category than what is shown, setting this option to Show or Auto will cause pagination links to show at the bottom of the content area (e.g., _« Start Prev 1 2 Next End »_ ). 

Pagination Results

Beneath the pagination links, you will often see Pagination Results to show the current page and the total number of pages (e.g., Page 1 of 2). 

Show a Feed Link

Assuming the Syndicate Module (mod_syndicate) is installed and published on your website, setting this to Hide will override it and hide the feed link for this menu item.  In the default frontend Joomla template, Milkyway (rhuk_milkyway), it would show in the lower-left corner. 

## Parameters (Component)

The component parameters, shown in Figure 7-14"), mostly control what you see when you click a link to view the full article. 

### Note

These parameters are also accessible by clicking the Parameters icon found in the Article Manager toolbar.  When setting an option to Use Global, you are telling Joomla to go to the Article Manager and use the value set there.  The component parameters section of the Menu Item screen serves as a way to override those settings. 

You also have the ability to override most of these parameters from the Parameters (Advanced) tab while editing articles. 

Figure 7-14.  Menu Item: Parameters (Component)

Show Unauthorized Links

If an article is set with an access level of Registered or Special, the user must be logged in to view it.  Setting this parameter to Yes will allow any user to view the intro text on this page, but users would need to log in to view the full article.  This is sometimes referred to as a "carrot," since you are enticing the readers with a teaser, but requiring them to register to view the rest of the article. 

Show Article Title

This will display the article's title. 

Title Linkable

Linkable titles link to the full articles, which is the same as the "Read more..." link.  For Search Engine Optimization (SEO) purposes, we recommend making titles linkable. 

Show Intro Text

When viewing the full article, this field determines if the intro text is repeated again. 

Section Name

This displays the section name under the title. 

Section Title Linkable

This makes the section name a link. 

Category Title

This displays the category name under the title. 

Category Title Linkable

This makes the category name a link. 

Author Name

This displays the author name under the title. 

Created Date and Time

This displays the date and time the article was created under the title. 

Modified Date and Time

This displays the date and time the article was last modified below the article.  If the article has never been modified, nothing will appear. 

Show Navigation

When viewing the full text of an article, this will show the < Prev and Next > buttons to navigate between articles in the same category. 

Read more... Link

This adds a "Read more..." link to the bottom of any article that has both intro text and full text determined by using the "Read more..." button in the article editor. 

Article Rating/Voting

Joomla has a built-in five-point rating system that is used for rating or voting for articles.  Enable or disable it here. 

Icons

In the upper-right corner of each article are icons for PDF, Print, and E-mail.  Setting this parameter to Hide will replace the icons with text. 

PDF Icon

This turns the PDF Icon/Link on and off. 

Print Icon

This turns the Print Icon/Link on and off. 

E-mail Icon

This turns the Email Icon/Link on and off. 

Hits

In this particular example, this field doesn't do anything.  It only affects the Section List Layout and Category List Layout, which display a list of categories or articles in a table.  This setting gives you the ability to hide and show the hits column. 

For each feed item show

This determines whether to syndicate the intro text or the full text of the article.  We recommend showing just the intro text in the feed because it keeps your feed small.  It also coerces readers to visit your site to read the rest of the article. 

## Parameters (System)

These parameters are the same for all menu item types.  They control the overall look and feel of the menu item as well as the page itself (see Figure 7-15")). 

Figure 7-15.  Menu Item: Parameters (System)

Page Title

This gives you the ability to override the page title.  In some cases, it will allow you to add a page title where one wasn't present or possible.  One major benefit to this is that it allows you to control what's shown in the title bar.  This is important for SEO purposes. 

Show Page Title

This will hide and show the page title.  If the page title is hidden and you have something in the Page Title parameter, the page title will still show in the title bar. 

Page Class Suffix

Page Class Suffix will append this value to the end of certain class attributes in the code.  This allows for page-specific CSS styling. 

Menu Image

You can specify an image to show next to your menu item.  If your image is not displaying, check the menu's module in the Module Manager.  It may have the Show Menu Images setting set to No.  If that is the case, your image will not display because the module setting will override the menu item setting. 

SSL Enabled

This link will force the website into SSL mode. 

### Note

SSL stands for Secure Socket Layer.  It is a protocol that encrypts all communication back and forth from the server to your browser.  You can tell this is active when your URL starts with _https://_ instead of _http://_ in your address bar. 

# Menu Modules: Parameters

As you've seen in our previous examples, menus and menu items are created and edited using both the Menu Manger and Menu Item Manager.  The actual display and format of those menus is controlled by a module called _mod_mainmenu_.  In fact, all menus use the _mod_mainmenu_ module and not just the menu called Main Menu. 

Modules are discussed in much more detail in Chapter 9, so don't feel overwhelmed if you don't understand everything you see in the Module Manager. 

From the backend, go to Extensions→Module Manager.  Click the Select Type drop-down and select _mod_mainmenu_ to filter the list by menu modules.  Your screen should look similar to Figure 7-16.  Click the module titled Main Menu to edit the module. 

Figure 7-16.  Module Manager showing only type mod_mainmenu

Take a look around and find the Module Parameters on the right side of your screen (Figures 7-17, 7-18, and 7-19).  The items on the left are generic and apply to all modules (see Chapter 9 for in-depth details on module settings). 

Figure 7-17.  Module Parameters for Main Menu Module: [Edit]

Figure 7-18.  Advanced Parameters for Main Menu Module: [Edit]

Figure 7-19.  Other Parameters for Main Menu Module: [Edit]

## Module Parameters

Menu Name

This specifies which menu the module will display.  If you need to, you can edit this name in the Menu Manager (see the steps earlier in this chapter). 

Menu Style

Menu Style dictates, plainly stated, the style of the menu.  But more specifically:

List

Displays the menu items as an unordered list, e.g., _< ul><li></li></ul>_. 

Legacy–Vertical

Displays the menu items vertically in a table with each menu item in its own table cell. 

Legacy Horizontal

Displays the menu items horizontally in a table with each menu item in its own table cell. 

Legacy–Flat List

Displays the menu items in an unordered list in a similar fashion to List, however, there are a few differences.  The legacy version uses _id attributes_ , which cause compliance problems when you have more than one menu of the same type on the same screen. 

Start Level

Use this parameter to set a level or depth where you want the menu to start.  This is necessary for creating split menus (see the next section). 

End Level

Use this parameter to set a level or depth at which you want the menu to end.  This is also necessary for split menus. 

Always show sub-menu Items

Be default, Joomla will only show submenu items if its parent menu item or a sibling is active.  If you want to show all menu items in a menu regardless of what menu item is currently the active menu item, set this to Yes.  This only applies to menu style List. 

Target Position

If any menu item in the menu specified in Menu Name is set to open in a New Window without Browser Navigation, the value of this parameter will be added to the attributes in the pop up.  Joomla already has some common attributes listed below that are hardcoded.  You should not use these as it would list them twice. 

    toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,

You can use any other legal attributes for window.open.  The following example will cause the popup to be 600 pixels wide by 450 pixels tall and be positioned 75 pixels down from the top and 75 pixels from the left:

    top=75,left=75,height=450,width=600

Visit <https://developer.mozilla.org/En/Window.open> for a list of legal attributes. 

## Advanced Parameters

Show Whitespace

If set to No, all of the whitespace between the menu's HTML tags is removed. 

Caching

This decides whether or not to cache the module. 

Menu Tag ID

The value of this parameter is set as the value of a CSS _id attribute_ on the menu's _< ul>_ tag. 

Menu Class Suffix

This value is appended to the end of the CSS class value on the menu's _< ul>_ tag. 

Module Class Suffix

This value is appended to the end of the CSS class value on the menu's main _< div>_ tag. 

Maximum Menu Depth

Maximum Menu Depth sets how many levels you can drill down into the given menu. 

## Other Parameters

Show Menu Images

This parameter allows you to turn menu images on and off.  Menu item images are set in the Menu Item Manager. 

Menu Image Alignment

Use this to display your menu image on the left or right side of your menu item. 

Menu Image Link

Menu Image Link replaces the menu's linkable text with a linkable image.  This is used when you want users to click on menu images instead of text. 

Expand Menu

Be default, Joomla will only show submenu items if its parent menu item or a sibling is active.  If you want to show all menu items in a menu regardless of what menu item is currently active, set this to Yes.  This parameter only applies to Legacy menu styles. 

Activate Parent

When a menu item is clicked, the rendered page gives that menu item an extra CSS class value of active.  Setting the Activate Parent option to Yes also gives the extra CSS class value of _active_ to the parent item. 

Full Active Highlighting

This provides support for finding the active menu when dealing with certain Link-URL menu item types.  This only applies to Legacy menu styles. 

Indent Image

Each submenu is indented when you navigate through the lower levels.  This parameter determines what method is used to indent submenus. 

Indent Image 1–6

If the Indent Image parameter is set to "Use Parameters below," you can use these six parameters to specify which images to use. 

Spacer

The value of this parameter will act as a delimiter between each menu item.  This applies only to the Legacy–Horizontal menu style. 

End Spacer

The value in this parameter will be placed at the beginning and the end of the horizontal menu.  This only applies to the Legacy–Horizontal menu style. 

# Menu Module: Split Menus

The easiest way to explain what split menus are is through images.  Figure 7-20 shows a typical menu across the top with three menu items.  Looking at the breadcrumb, you'll see Menu Item 1 is the active menu item.  The left side of the screen is blank since there are no submenu items under Menu Item 1. 

If we click on Menu Item 2 in the top menu, the submenu items nested under Menu Item 2 in the Menu Item Manager appear on the left side of the screen as shown in Figure 7-21.  Since both menu modules (top and left side) display menu items from the same menu, this is referred to as a split menu.  You are essentially splitting the same menu into two different areas of the page. 

Now let's create our first split menu.  The first thing we need to do is create our menu in the Menu Item Manager.  The menu used in our example looks like Figure 7-22. 

Figure 7-20.  Split Menus: Menu Item 1

Figure 7-21.  Split Menus: Menu Item 2

Figure 7-22.  Example menu structure in the Menu Item Manager

Once the menu and a couple of nested items have been created, we are ready to move on to creating the "split" part—the two menu modules. 

Create two menu modules in the Module Manager (if you need help with this, see Creating a Menu Module).  In our example, we have a top menu in the _user1_ module position and a left menu in the _left_ module position. 

The key to how split menus are displayed lies in a few parameters in the _mod_mainmenu_ module.  Those three parameters are:

Menu Name

Ensure that both menu modules reference the same menu listed in Menu Name. 

Start Level

Menu items will only display if they are at an equal or deeper level than the Start Level.  The top-level value is 0 and menu items nested immediately under that will be level 1, and so on. 

End Level

Menu items will only display if they are not at a deeper level than the End Level. 

Figure 7-23 shows the parameters for the top menu module.  We start at level 0 and end at level 1.  By ending at level 1, it is stating that it will not display level 1 or deeper menu items. 

Figure 7-23.  Split Menus: Parameter for the top menu

Figure 7-24 shows the parameters for the left menu module.  We start at level 1 and end at level 99.  The End Level can really just be any large number if you don't have any additional nested menu items.  If you do, set it at 2. 

Figure 7-24.  Split Menus: Parameter for the left menu

We should point out that we set the Show Title on both modules to No.  If you set it to Yes, it will always show the title for both modules.  If you have menu items without sub-menu items, that's not an issue.  But you probably don't want a title displayed by itself with no items underneath. 

### Note

Technically, you could split the menu into more than just two parts.  This is not easy to do design-wise, but it can be effective on some sites.  We don't see a practical reason for splitting a menu more than three times, so we don't recommend it. 

# Built-in Site Map

Site maps are important.  Search engines like them so that they can find all of your content.  A site map also helps your visitors find the page they are searching for quickly. 

## Create the Site Map

Site maps in Joomla can be automatically built in a few steps:

  1.  From the backend, go to Extensions→Module Manager. 

  2.  Click New. 

  3.  Click Menu. 

  4.  Enter a title such as Site Map. 

  5.  Change the position to sitemap.  If it does not already exist, just type "sitemap" in the Position Box. 

  6.  Change menu name to "mainmenu" or whatever menu you want to show in your site map. 

## Add Your Site Map to an Article Using the Content—Load Module Plug-in

  1.  Create an article and add the following code to it:

        {loadposition sitemap}

  2.  Navigate to the article to see your site map. 

### Note

In order for this to work, make sure the _Content–Load Module_ plug-in is enabled in the Plugin Manager.  Be sure your WYSIWYG editor doesn't strip out or alter the code just shown.  See Summary in Chapter 5 if you need more help or troubleshooting tips.  For more information on loading modules inside an article, see Showing a Module Inside an Article. 

Third-party site map components often have more options and display better visually.  The built-in site map gives you more options than just hard coding links into an article.  For more information on loading modules inside an article, see Showing a Module Inside an Article. 

# Using ItemID to Create Internal Links

When linking internally, you never want to use SEF URLs.  If you turn SEF URLs off, those links will stop working.  You always want to use the raw, "ugly" URL because Joomla will convert it to a nice SEF URL when the page loads. 

Go to Menu Item Manager for one of the menus you have on your website.  Look at the column to the far right called ItemID.  This number will be substituted for _< ItemID>_ in the following URL: _http://www.  <yoursite>.com/index.php?Itemid=<ItemID>_. 

Obviously, replace _< yoursite>_ with your own and Joomla will do the rest for you. 

# Menu Trash

Simply put, you can think of the Menu Trash as nothing more than a recycle bin for your menu items.  The Trash Manager can be found in the Administrator Backend by going to Menus→Trash Manager.  Figure 7-25 shows an example of what the Trash Manager looks like with a few trashed menu items.  This example shows eight menu items that have been trashed from four different menus. 

Figure 7-25.  Trash Manager: [Menu Items]

There are only two things you can do on this page—you can restore a menu item back to the menu it was removed from or you can delete it permanently. 

## Restore Menu Items

To restore menu items, click the checkboxes next to the menu items you want to restore and click Restore.  You will be taken to a confirmation screen as shown in Figure 7-26.  If you are sure you want to restore the menu items shown, click Restore.  Joomla will confirm you're doubly sure by showing a message box confirming once more that you want to really restore the menu items. 

When menu items are restored and returned to the menu from which they were deleted, they are unpublished.  They don't return to their same positions in the order.  Instead, they'll be the last items in the menu order (at the bottom of the menu).  You can then move the menu item into the desired position and republish it when you're ready. 

Figure 7-26.  Trash Manager: Restore Items

## Permanently Delete Menu Items

To permanently delete menu items, click the checkboxes next to the menu items you want to delete, then click Delete.  This will display a confirmation screen similar to Figure 7-27.  Unlike restoring menu items, Joomla does not ask you to confirm for a second time if you really want to delete the selected menu items.  Deleting menu items from the Trash Manager actually deletes the information from the database.  So, if you accidentally delete a menu item from the Trash Manager, it's gone forever. 

Figure 7-27.  Trash Manager: Permanently Delete Items

# Summary

In this chapter, we've covered how to:

  * Tell the difference between content structure and menu structure

  * Use the menu item types to display content and components in various layouts

  * Use Menu Item parameters to control almost every aspect of a given layout

  * Display and configure menus using Module Manager

  * Create Split Menus

  * Trick Joomla into creating a dynamic site map

  * Create internal links using ItemID

  * Manage deleted menu items using Menu Trash

In the next chapter, we'll learn more about components and take a look at the ones that are built in to Joomla by default. 

# Chapter 8.  Components

Components are typically the biggest and most powerful of the five types of extensions.  Located in the main body of the page, a component is a mini application that runs within your Joomla website.  One of the most used components is _com_content_ , which manages and displays the articles that you add to your site. 

# Extending Joomla with Extensions and Compatibility

Extensions are one of the parts of Joomla that truly make it a powerful content management system.  Extensions allow you to literally "extend" the core functionality to perform other tasks.  For example, Joomla doesn't have a calendar extension out of the box, but you could install one to add that feature. 

In Chapter 2, we learned that there are five different types of extensions: components, modules, plug-ins, templates, and languages.  This chapter focuses on components, but you can extend Joomla using any of these five types. 

Ideally, you want to install extensions that run _natively_ under Joomla 1.5.  That means they rely solely on the Joomla 1.5 framework to run.  If you have an extension that used to run on Joomla 1.0, it may work on Joomla 1.5 in what is called _legacy mode_.  In order to use Joomla 1.0 extensions in Joomla 1.5, you need to have the _System-Legacy_ plug-in enabled in the Plugin Manager. 

### Note

To search for Joomla extensions, visit the Joomla Extensions Directory at <http://extensions.joomla.org>. 

# Built-in Components: Banners, Contacts, News Feeds, Polls, Search, and Web Links

Joomla comes with a few components built in.  Let's spotlight the ones that appear in the backend under Components in the top menu. 

## Banners

You can probably guess what the Banner component does.  It enables you to place banners on your website.  Some websites use the Banner component as a method of generating revenue by selling banner impressions, while other websites might choose to use it to link to other parts of their site. 

The three parts of the banners functionality are banners, clients, and categories.  You can see their order in the menu (Components→Banner), but we'll explain the pieces in reverse order—the order of how they're set up. 

### Categories

Categories provide a way to group similar banners together.  When displaying banners on the frontend, you have the ability to define which category you want the banners to be pulled from.  For more information on loading modules inside an article, see Showing a Module Inside an Article. 

### Clients

In the Clients tab, you can create and edit clients.  If you are selling impressions on your website, then you should set up a client for each company that wishes to advertise with you.  When displaying banners on the frontend, you also have the ability to define which client you want the banners to be pulled from. 

### Banners

Figure 8-1 shows what the Banner Manager looks like when the Joomla sample content is installed.  Each item listed is a separate banner item.  While all of the columns are important, the two columns that show the most interesting information are Impressions and Clicks.  They give you a high-level overview of how the banners are performing. 

Figure 8-1.  Banner Manager

When creating a new banner, choose the category and client name to associate the banner item with.  Spend some time playing with the various options and compare it to what is being displayed on the frontend of your website. 

The Parameters icon on the toolbar shown in Figure 8-1 gives you the ability to turn on some logging functionality.  If you don't need this functionality, don't turn it on.  It will eat up unnecessary amounts of space in your database. 

Although not a component, there's a module called _mod_banners_ that works in conjunction with _com_banners_.  This module is used to actually display the banners.  Working with modules is discussed in detail in Chapter 9. 

## Contacts

Almost every website has a Contact Us page.  The Contact component allows you to create a custom contact page for each person you want a user to be able to contact.  Figure 8-2 shows what a sample contact page may look like.  Almost everything on that page is customizable.  You can turn fields on and off, change the contact image, and turn the form on and off.  These are just a few of the options available.  Jump in and look around for yourself. 

Figure 8-2.  Contacts Component

### Note

Some users don't like how the address looks.  A trick to getting it to look "normal" is to type your city, state, and zip code in the Street Address box.  Then, under Contact Parameters, set Town/Suburb, State/County, Postal/Zip Code to Hide.  The only downside to this is if you have vCard set to Show, it will show your full address in the street address field.  If you want to use the vCard option and have your address look correct, you will want to look into template overrides in Chapter 11. 

Contacts can be displayed by categories as well.  This is beneficial if your website is for a large company that has a lot of upper management.  The user will see a list of contacts and choose the one for which she wants to view contact information. 

## News Feeds

RSS stands for Really Simple Syndication.  Many websites allow you to syndicate their content into your site, which means pulling in news and other information.  There are a lot of standalone readers that read RSS feeds, and the News Feed component in Joomla (shown in Figure 8-3) also has the ability to both read those feeds and display them to your site visitors.  This is a simple way to keep part of your site fresh and up-to-date. 

Figure 8-3.  News Feed Manager

The hierarchy for news feeds works in the same way articles do. _ Categories_ are created and then _feeds_ are put in those categories.  To create a feed, the only thing you need to know is the link to the RSS feed you want to pull in to your site.  If you loaded the sample data during the installation process, you already have a few feeds to look at.  Spend some time playing around with the options available.  The Link field is the only one you should not change unless you intend to pull in news from a different feed. 

Since the feed is pulled from another site, you'll want to take advantage of caching.  Caching stores a copy of the feed information on your web server so it doesn't have to reload from the source each time a page loads.  The default cache time is 3,600 seconds (one hour).  This means Joomla will not have to pull the feed data more than once per hour.  The benefit is that it saves time on your end and it saves processing resources on the server hosting the RSS feed.  Each time the aggregate data is pulled, it takes time for the remote server to respond.  The downside to caching is that if the website syndicating the data adds or changes content, you will not see that change until the hour has passed.  We think this is a small price to pay for the performance boost. 

## Polls

For those not familiar with polls, it's like a very short survey.  You ask a question and visitors can vote on an answer.  Figure 8-4 shows what a poll in Joomla might look like. 

Figure 8-4.  Sample poll

The Polls component is a simple one.  The good news is that there are _not_ a lot of options.  The bad news is that there are _not_ a lot of options.  Figure 8-5 shows the Poll Manager with one poll created.  You might have several more. 

Figure 8-5.  Poll Manager

When creating or editing polls, you have the ability to set a lag time between votes.  This prevents users from voting for the same option over and over.  The default is 86,400 seconds (24 hours). 

The Polls component uses the Polls module to display the poll on your website.  See Chapter 9 if you need help setting up a module in the Module Manager. 

### Note

You have the ability to link to a results screen from a menu item but not the poll itself.  The only way around this is to load a module in an article and then link to that article from a menu.  For more information on loading modules inside an article, see Showing a Module Inside an Article. 

## Search

One beauty of a content management system is that searching for information is easy.  Joomla takes that a step further and provides you with search statistics so you can see what your users are searching for.  Why is this important?  If users have to keep searching for the same thing over and over, you should consider changing the way your users access that content so they can find it more easily. 

While search statistics are nice, they come at a price.  Over time, especially on busy sites, the _jos_core_log_searches_ table in the database that stores the search statistics will become quite large.  Once you've analyzed the search results and made any changes, you may consider resetting the data using the Reset button found on the toolbar in the backend within the Search component.  This also gives you a clean slate to work with.  If you're not interested in analyzing search data, consider leaving the setting off to preserve server resources. 

On the frontend, the Search component has a variety of search options (see Figure 8-6). 

Figure 8-6.  Search component

Search Keyword

Users type what they're searching for and then click Search. 

Search Phrase

The default is to search for all words, but users may chose to search for results with any of the words listed or search for the exact phrase. 

Ordering

This controls the order that the results will be returned in. 

Search Only

Joomla allows you to search only in the locations you want to search.  For the most part, results will be located within articles.  This is also referred to as _Search Area_. 

### Note

You can turn these options off in Plugin Manager by going to Extensions→Plugin Manager.  From there, choose Search from the Select Type drop-down.  Disable the areas you don't want to show and ensure that the ones you do want to show are enabled. 

Search has its own module to allow users to search for what they are looking for as it is typically published on every page.  Figure 8-7 shows what the Search module looks like in the default Joomla template. 

Figure 8-7.  Search module

It may look plain, but using template overrides (described in Template Overrides (MVC)")) and a little CSS, you can pretty much make it look however you want. 

## Web Links

The Web Links component displays a collection of URLs separated into a list of categories.  Clicking a category name displays all the links within that category.  Figure 8-8 shows the links in the Joomla!  Specific Links category. 

Figure 8-8.  Web Links component

The menu item created to access the Web Links component has many options to customize its look and feel. 

### Note

If you only want to display a few links that don't need to be broken up into categories, this component is probably overkill.  If that's the case, we recommend you just paste your links into an article. 

# Other Built-in Components in the Extension Manager

Joomla users often use components but sometimes don't even realize it because they think all components are shown in the Components menu.  Not so.  To see the full list of installed components, go to Extensions→Install/Uninstall and click the Components subsection.  Let's review each component:

Content Page

This is by far the most important component in Joomla.  This component manages all aspects of articles.  When looking at an article on your site, you may have noticed a component identified as _com_content_ in the address bar.  More information on this component can be found in Chapters  and . 

Cache Manager

Cache Manager provides a way for you to delete and purge cached files.  More information on this component can be found in Chapter 16. 

Configuration Manager

Also known as the Global Configuration, it contains settings that affect your website from a global perspective.  More information on this component can be found in Chapter 4. 

Control Panel

When you first log in to the backend, the Control Panel consists of the large icons on the left and the Administrator Modules on the right (shown in Figure 3-1 in Chapter 3).  More information on this component can be found in Chapter 3. 

Installation Manager

The Installation Manager is used to install and uninstall extensions.  More information on this component can be found in Chapter 15. 

Language Manager

The Language Manager installs and sets language preferences for your site users and administrators.  More information on this component can be found in Chapter 14. 

MailTo

When viewing an article on the frontend of your website, there is often a Mail icon in the upper-righthand corner.  This component facilitates the "E-mail to a Friend" functionality.  More information on this component can be found in Chapter 6. 

Mass Mail

Mass Mail is used to send email to groups of users registered on your website.  More information on this component can be found in Chapter 16. 

Media Manager

The Media Manager is used to upload and delete files in the images directory.  More information on this component can be found in Chapter 13. 

Menus Manager

The Menus Manager allows you to create, edit, and move menus and menu items on your website.  More information on this component can be found in Chapter 7. 

Messaging

The ability to send a private message to a backend user is very straightforward.  More information on this component can be found in Chapter 16. 

Module Manager

The Module Manager allows you to add, edit, and delete modules from your website.  More information on this component can be found in Chapter 9. 

Plugin Manager

The Plugin Manager provides an interface to configure installed plug-ins.  More information on this component can be found in Chapter 10. 

Template Manager

Changing the look and feel of your entire website can be done within the Template Manager.  More information on this component can be found in Chapter 11. 

User

The User component is a frontend component that allows users to register for your website, update their profile information, reset their password, and other basic tasks.  More information on this component can be found in Chapter 12. 

User Manager

The User Manager lets you create, modify, and delete users from your website.  More information on this component can be found in Chapter 12. 

Wrapper

When creating a menu item of type _Wrapper_ , this component loads the given URL in an _iframe_.  More information on this component can be found in Chapter 7. 

These are the core components at a high level and some of them will be discussed in more detail in other chapters. 

# Third-Party Components: How to Install

There are thousands of third-party components that do just about everything imaginable.  Just as when you install other extensions, you use the Extension Manager, shown in Figure 8-9, to install components. 

  1.  Go to Extensions→Install/Uninstall. 

  2.  Click the Choose File button and navigate your computer to locate the module archive file (usually a ZIP, but it also might be TGZ, GZ, or TAR). 

  3.  Click the Upload File & Install button. 

Figure 8-9.  Extension Manager

After you have installed a component, you'll see it in the Components drop-down menu.  There are many third-party components available, most of which are free.  See Appendix B for recommendations and more information. 

# Summary

In this chapter, we've covered:

  * How components can be used to extend functionality

  * Native and Legacy compatibility and why it is important

  * Some of Joomla's built-in components

In the next chapter, we'll discuss Module Manager and all of the fun things you can do with modules. 

# Chapter 9.  Modules

Modules provide a sort of window into your content, displaying it in small, customizable blocks.  Modules are usually in the left and right columns of a web page, but they can be just about anywhere you want.  Joomla comes with a number of default modules that show you the most recent news items, a login form, breadcrumbs, or an advertising banner.  Third-party options do a whole lot more. 

At this point, you should have a few menu items created (see Chapter 7 if you jumped ahead) as a prerequisite for getting your modules to appear. 

# The Module Manager

Module names and their positions are determined by their location in your template.  You should name your modules in way that will help you remember their location, e.g., _topmenu, leftcolumn_ , or _footer_.  If you're using the default _Milky_way_ template, you already have a few module positions set up on the frontend of your website.  To find out how to add modules positions to your templates, see Chapter 11. 

The Module Manager provides an overview of your modules, their positions in your template, type of module, and state (see Figure 9-1). 

Figure 9-1.  The Module Manager

In the Module Manager, you can reorder modules when you have more than one module in the same position by clicking the green arrows.  You can also enable/disable modules by clicking the icon in the Enabled column and changing their access level by clicking on the level name. 

# Built-in Frontend Modules

Frontend modules display information on the public-facing portion of your website. 

### Note

Skip to the explanation in View All of the Module Positions to see a trick for how to display all the module positions on a website. 

Joomla comes with a set of basic modules to get you started. 

## Article Modules

Archived Content

Displays a list of archived articles in the form of calendar months. 

Latest News

Shows the latest articles within a specific category. 

Most Read Content

Displays the most popular articles based on number of views. 

Newsflash

Shows an article or groups of articles from a specific category. 

Related Articles

Shows articles with matching metakeywords. 

Sections

Shows a list of links to site sections containing articles. 

## Component Modules

Banner

Displays the banner of your choice.  See Chapter 8 to set up banners. 

Poll

Shows user polls.  See Chapter 8 to set up a user poll. 

## Feed Modules

Feed Display

Displays the results of an RSS feed from another site. 

Syndicate

Creates an RSS link for a specific page on your site. 

## User Modules

Login

Displays a login box.  Once a user is logged in, it displays a welcome message and a logout button. 

Who's Online

Displays a module showing which users are online and logged in. 

## Other Modules

Breadcrumbs

Shows navigation breadcrumbs (or pathway). 

Custom HTML

Displays some custom HTML.  For more details on this module, see Creating a Custom HTML Module. 

Footer

Displays a copyright with your site name and Joomla information/license link. 

Menu

Displays a menu.  Refer to Chapter 7 to learn how menus are set up. 

Random Image

Displays a random image from a specific folder. 

Search

Shows a search box to search your site.  See Chapter 8 to set up search. 

Statistics

Shows a few site statistics like number of articles, web links, and users. 

Wrapper

Displays a URL (usually from another site) "wrapped" in your site template using an iframe. 

## Creating Modules

Creating modules is generally the same process no matter which type.  To create a new module:

  1.  Go to Extensions→Module Manager and click the New button in the top toolbar. 

  2.  Choose the type of module you want to create (see Figure 9-2). 

  3.  Enter a module title and choose both a Position and Order. 

  4.  Select where you want the menu to show up in the Menu Assignment box. 

  5.  Enter a Module Class Suffix if you want to apply specific CSS styles to this module.  Module Class Suffixes are appended to the normal module CSS class.  The default classname is _moduletable_ , so adding a module class suffix of _-login_ would display a module class of _moduletable-login_. 

  6.  Click Save. 

### Note

If your desired module position isn't in the position drop-down, you can create one on the fly just by typing in the name. 

Depending on which type of module you created, you'll have a few module-specific options available.  Play around with the options, choosing the ones that best fit your needs, and see how they affect the module on the frontend of your site. 

## Assigning Modules

In order for your modules to appear on your website, make sure you assign modules to specific menu items.  Since menu items essentially point to pages on your site, you're deciding which modules will show up on which pages.  To assign a module:

  1.  Go to Extensions→Module Manager and open the module by clicking the name. 

  2.  In the Menu Assignment box (see Figure 9-3), select All to have the module show up on all pages.  Select None to have the menu be hidden.  Or chose Select Menu Items to choose specific pages for the module to appear on. 

  3.  Click Save. 

Figure 9-2.  Create a new module: First step showing module types

Figure 9-3.  The Module Menu Assignment box

## Duplicating Modules

If you have modules with a lot of customizations and you need more than one, you can save a lot of time by duplicating them.  To copy a module:

  1.  Go to Extensions→Module Manager and click the checkbox next to the module name you want to duplicate. 

  2.  Choose Copy from the top toolbar. 

Your new copy will be saved as the same name with "Copy of" added (e.g., a new copy of Main Menu will be named "Copy of Main Menu").  Your new module will be unpublished by default. 

## Deleting Modules

If you make a mistake or create a module you no longer need, you can simply delete it.  To delete a module:

  1.  Go to Extensions→Module Manager and click the checkbox next to the module name you want to delete. 

  2.  Choose Delete from the top toolbar. 

### Note

There is no module trash.  Deleting a module is permanent. 

## Moving Modules

If you want to move your modules around, it's quite easy to do so.  To move a module:

  1.  Go to Extensions→Module Manager and open the module you want to move by clicking the name. 

  2.  Choose the desired position from the options in the Position drop-down (see Figure 9-4).  If the position you want isn't there, just type the name in the field. 

  3.  If you have more than one module assigned to that position, you can set the order of the modules within that position by using the Ordering drop-down menu. 

  4.  Click Save. 

Figure 9-4.  Moving and ordering a module

# Creating a Menu Module

In order to display menus on your site, you'll need to create a menu module.  In Chapter 7, we covered how to set up your menus in the Menu Manager and the Menu Item Manager.  To create a Menu Module:

  1.  Go to Extensions→Module Manager and click the New button in the top toolbar (see Figure 9-1). 

  2.  Select the Menu module from the items shown in Figure 9-2. 

  3.  Choose the menu you want to display in this module in the Menu Name drop-down menu (see Figure 9-5).  If your menu isn't listed here, you probably haven't created it yet.  See Chapter 7 for help with creating a Menu Item. 

Figure 9-5.  Choosing a menu name to display in your menu module

  1.  Click Save. 

To customize your menu further or get it to display specific items, see Chapter 7 for a detailed description of the Menu Module parameters. 

# Creating a Custom HTML Module

As you've seen, modules do many things, but sometimes all you want is a little text or HTML code on your site outside of the main content area.  That's the perfect use of a custom HTML module.  This module allows to you paste any text, images, or HTML you want and have it show up in a module position.  To create a custom HTML module:

  1.  Go to Extensions→Module Manager and click the New button in the top toolbar (see Figure 9-6). 

Figure 9-6.  Creating a new custom HTML module

  1.  Enter a module title and choose both a position and order.  Also select where you want the menu to show up in the Menu Assignment box. 

  2.  Enter your text, images, or other HTML in the WYSIWYG editor at the bottom. 

  3.  Click Save. 

# Built-in Administrator Modules

Modules aren't only displayed on the frontend of your site.  They're also used on the backend of your site in the administrator interface to display relevant information.  You can see which Administrator Modules are active by clicking the Administrator tab in the Module Manager (see Figure 9-7). 

Figure 9-7.  Administrator Module Manager

The Administrator Modules listed in the following sections are built-in, but not all are active. 

## Navigation Modules

Admin Menu

Displays the main administrator navigation module. 

Admin SubMenu

Displays the submenu navigation. 

Toolbar

Displays the toolbar icons. 

Quick Icons

Displays the icons on the administrator main page. 

## User Modules

Login Form

Shows the administrator login form. 

Online Users

Shows a list of the logged-in users on the backend. 

Logged in Users

Shows a list of the logged-in users on the frontend and backend. 

User Status

Displays the status of logged-in users. 

## News Modules

Latest News

Shows a list of the latest articles published. 

Feed Display

Displays the results of an RSS feed. 

## Other Modules

Custom HTML

Displays custom HTML. 

Popular Articles

Shows the articles with the most views. 

Footer

Displays the Joomla license, links, and information. 

Title

Shows the toolbar title. 

Item Stats

Shows the number of current menu items in each menu. 

Unread Messages

Displays the number of unread messages. 

Creating an Administrator Module works in the same fashion as a frontend module.  But you should be careful creating or moving Administrator Modules unless you're familiar with the types of modules and the predefined positions.  The default Joomla administrator template has specific module positions and moving them around might create some havoc. 

# Showing a Module Inside an Article

Modules are usually associated with menu items, but sometimes you'll want to associate modules with a specific article.  Modules are commonly assigned to module positions and these positions appear on the web page as defined in your template. 

But sometimes it's useful to have a module actually "embedded" in the article itself and this gives you a great deal of flexibility over where you display your modules.  To do so, follow these steps:

  1.  Go to Extensions→Module Manager and locate the article you want the module to appear in. 

  2.  Create a new module or open an existing module.  Choose the module position you will use for displaying inline in an article.  Let's say "inarticle" is the name of the new module position we'll use.  Click Save. 

  3.  Go to Content→Article Manager and locate the article you want the module to appear in. 

  4.  Click the article name to open it for editing.  Find the place where you want the module to be. 

  5.  Enter _{loadposition myposition}_ where you'll replace _myposition_ with the name of the module position you used in step 2 (see Figure 9-8).  Using the name "inarticle" from step 2, the code you put in the article would be _{loadposition inarticle}_. 

Figure 9-8.  The module tag inserted into an article

Any module assigned to the inarticle position will now load in that article.  Check out your results by viewing the article on the frontend.  Your module should now load directly into the body of the article. 

# Installing Third-Party Modules

There are thousands of third-party modules available from developers.  Sometimes they come packaged with components or plug-ins, but they can also perform functions on their own. 

Installing modules works just like installing any other extension with the Extension Manager.  To install a module:

  1.  Go to Extensions→Install/Uninstall and make sure the Install button in the top toolbar is selected (see Figure 9-9). 

Figure 9-9.  Install modules with the Extension Manager

  1.  Click the Choose File button and navigate your computer to locate the module archive file (usually a ZIP, but also might be TGZ, GZ, or TAR)

  2.  Click the Upload File & Install button. 

After you've installed a module, you'll see it in the module list when creating a new module. 

See Appendix B for a few extension recommendations if you're looking for more modules. 

# View All of the Module Positions

As your site grows, you'll end up with a lot of module positions and finding them can be tough.  Have you ever looked at a module and wondered which position it was in?  Here's how. 

On the frontend, just add the _tp_ parameter with a value of 1 on the end of the website URL.  An example would be _http://www.  <yourwebsite>.com/index.php?tp=1_. 

That's it.  Or, if you have access to the backend as a Super Administrator, you can do the following:

  1.  From the backend, go to Extensions→Template Manager. 

  2.  Click on the template whose module position you want to see. 

  3.  Click Preview in the toolbar. 

For directions on preventing this check from working on your site, refer to Chapter 20. 

# Summary

In this chapter, we've covered:

  * How to use the Module Manager to get an overview of existing modules

  * How to create a module

  * How to create a custom HTML module

  * How to move, manage, copy, and edit your modules

  * Two different ways to view all the module positions on a page

In the next chapter, we're going to move on to another type of Joomla extensions called plug-ins. 

# Chapter 10.  Plug-ins

In Chapter 2, we stated that plug-ins are a lot more powerful than they are given credit for.  This chapter goes into more detail as to why that statement is true. 

When users navigate around your site and pages are rendered by Joomla, plug-ins perform actions while the content loads—executing code throughout the page rendering process.  Plug-ins can search articles on the search results screen or mask email addresses found in articles to protect them from spambots.  In this chapter, we'll explore the various types of plug-ins, how they're installed, and more. 

### Note

In previous versions of Joomla, plug-ins were referred to as mambots. 

# The Plugin Manager

Editing plug-ins is done in the Plugin Manager.  It can be found in your Administrator Backend by going to Extensions→Plugin Manager (see Figure 10-1).  The Plugin Manager interface gives an overview of your installed plug-ins and status information about each. 

Figure 10-1.  Plugin Manager

In most parts of the backend, it's not a problem to click around and change settings to see how things work, but the Plugin Manager is not one of them.  Most items are safe to play with, but some are not. 

### Warning

If a plug-in is disabled by default and you don't have a specific need to enable it, it's best to leave it disabled. 

The Plugin Manager interface is very much like other areas of the backend.  It gives you an overview of the installed plug-ins and the ability to enable and disable them or change their loading order. 

# Plug-in Types

You may have noticed that plug-ins are grouped into different types in the Plugin Manager.  These different types operate in different areas of Joomla and at different points of the rendering process.  Each plug-in type dispatches its own triggers, so let's go over them in detail from a user's perspective—even if some of it gets a little "geeky." 

Authentication

When users log in to your website, their login credentials are verified against the users that are registered on the website.  If you wanted someone to be able to log in using a Google account, you'd want to enable the _Authentication–GMail_ plug-in.  When someone tries to log in, her username and password will be verified by Google using its API.  If she logs in successfully, an account with the same login credentials will automatically be created in Joomla. 

The only authentication trigger that can be dispatched is onAuthenticate. 

### Warning

You should never disable the _Authentication–Joomla_ plug-in.  Doing so will prevent users from logging in to your site.  This even includes Super Administrators.  If you accidentally disable it and can't log back in, change the published field in the jos_plugins table to 1 for the Authentication-Joomla record.  You will most likely need to use phpMyAdmin, a tool for managing MySQL tables, to accomplish this.  If you don't know how to access it on your website, contact your hosting provider for assistance. 

Content

These plug-ins only affect articles.  Content type plug-ins allow you to add functionality to your articles such as cloaking email addresses, adding a rating system, loading modules inside your articles, and much more.  Third-party plug-ins add a lot of functionality to articles. 

The content triggers that can be dispatched are:

  * onPrepareContent

  * onAfterDisplayTitle

  * onBeforeDisplayContent

  * onBeforeContentSave

  * onAfterContentSave

### Note

In Joomla 1.0.x, content type mambots would execute on modules as well.  When Joomla moved from 1.0.x to 1.5.x, that functionality was removed since modules aren't considered content. 

Editors

These plug-ins load the WYSIWYG editors in various locations throughout the frontend and backend. 

The editor triggers that can be dispatched are:

  * onInit

  * onGetContent

  * onSetContent

  * onSave

  * onDisplay

  * onGetInsertMethod

Editors-XTD

These plug-ins allow you to extend the functionality of the editor.  The main purpose is to add extra buttons to work in conjunction with your editor.  These buttons are shown at the bottom of the editor. 

The only editors-xtd trigger that can be dispatched is onDisplay. 

Search

When using the search component, there are a few checkboxes that allow you to control which areas you want to search.  Figure 10-2 shows the six search areas that are available by default.  Each of the search plug-ins found in the Plugin Manager correspond to a search area shown in Figure 10-2.  Disabling a search plug-in disables search for that particular area of the site. 

The only search triggers that can be dispatched are onSearch and onSearchAreas. 

If you are not using the News Feeds or Web Links component, you should disable the corresponding search plug-ins.  It will help remove some clutter from your search screen.  Technically, it speeds the rendering process a little. 

Figure 10-2.  Search Component: Search Areas

System

The system plug-in is by far our favorite type of plug-in.  There's a lot of potential in what you can do with them and a lot of magic can happen in the hands of a skilled developer with a creative imagination. 

The system plug-in dispatches its triggers after several key points in the process of building your page.  A common use for the system plug-in is to edit the page after it's been rendered or just after the framework has been initialized. 

The system triggers that can be dispatched are:

  * onAfterInitialise

  * onAfterRoute

  * onAfterDispatch

  * onAfterRender

### Note

If you really need to use a plug-in inside of a module, you can make it a system plug-in using the onAfterRender trigger.  This is not something that a novice should attempt.  However, if you understand PHP and want to get your feet wet, this is a great place to start. 

User

The user plug-in dispatches tasks while users perform various actions on your website.  These actions might include logging in, logging out, adding a user, deleting a user, and so on. 

The user triggers that can be dispatched are:

  * onLoginUser

  * onLoginFailure

  * onLogoutUser

  * onLogoutFailure

  * onBeforeStoreUser

  * onAfterStoreUser

  * onBeforeDeleteUser

  * onAfterDeleteUser

XML-RPC

XML-RPC stands for Extensible Markup Language–Remote Procedure Call.  In a nutshell, it allows your website to interact with either another website or application on a different server or desktop.  This type of functionality has an endless number of possibilities. 

The only XML-RPC trigger that can be dispatched is onGetWebServices. 

### Warning

Just to be safe, keep XML-RPC plug-ins disabled unless you know exactly what you're doing and the specific reason for activating a particular plug-in. 

# Built-in Plug-ins

Joomla comes with a lot of plug-ins out of the box.  Some of these plug-ins may not appear to be working even if they are enabled.  This is especially true for the content type plug-ins where certain article and menu item parameters may have to be set a certain way for the plug-in to function.  An example of this is the _Content–Page Navigation_ plug-in, where you can chose whether or not to display page navigation in the article parameters and menu item parameters. 

Authentication Plug-ins

These all do the same thing.  They allow you to authenticate yourself using the Joomla _jos_users_ table or from a third-party API. 

Content–Page Navigation

This plug-in facilitates the Prev and Next functionality as a way to navigate between content items in the same category.  This can be seen at the bottom of Figure 10-3. 

Content–Rating

Provides a way for site visitors to rate the article they are viewing.  This can be seen toward the top of Figure 10-3. 

Figure 10-3.  Content–Page Navigation and Content–Rating

Content–Email Cloaking

Spammers use spambots to crawl the Internet looking for email addresses.  If you can view the source code on your current site and read your email address in plain text, so can spambots.  Joomla uses the _Email Cloaking_ plug-in to hide your email address using JavaScript.  This way, the browser can read it, but nasty spambots can't. 

Let's look at an example of email cloaking using one of our own email addresses: ken@usingjoomlabook.com. 

Here's one without Email Cloaking:

    1 My name is Kenneth Crowder.  My email address is ken@usingjoomlabook.com.  This is a 
    test to see how the Email Cloaking plugin works. 

And here's one with Email Cloaking:

    1 My name is Kenneth Crowder.  My email address is
    2 <script language='JavaScript' type='text/javascript'>
    3 <!-- 
    4 var prefix = '&#109;a' + 'i&#108;' + '&#116;o';
    5 var path = 'hr' + 'ef' + '=';
    6 var addy93189 = 'k&#101;n' + '&#64;';
    7 addy93189 = addy93189 + '&#117;s&#105;ngj&#111;&#111;ml&#97;b&#111;&#111;k' + 
    '&#46;' + 'c&#111;m';
    8 document.write( '<a ' + path + '\'' + prefix + ':' + addy93189 + '\'>' );
    9 document.write( addy93189 );
    10 document.write( '<\/a>' );
    11 //-->\n </script> <script language='JavaScript' type='text/javascript'>
    12 <!-- 
    13 document.write( '<span style=\'display: none;\'>' );
    14 //-->
    15 </script>This e-mail address is being protected from spambots.  You need 
    JavaScript enabled to view it
    16 <script language='JavaScript' type='text/javascript'>
    17 <!-- 
    18 document.write( '</' );
    19 document.write( 'span>' );
    20 //-->
    21 </script>.  This is a test to see how the Email Cloaking plugin works. 

Which do you think is better?  In both cases, the website looks like Figure 10-4.  If the end user has JavaScript turned off in their browser, instead of seeing what is shown in Figure 10-4, they would see something like Figure 10-5.  Since all modern browsers support JavaScript, this isn't an issue. 

You may have noticed a space after the email address in Figure 10-4.  This is the one downside to using the Email Cloaking plug-in.  The browser can't differentiate an actual space from white space around the JavaScript code.  The way around it is to either have the email address be standalone or arrange the sentence so that the email address is in the middle and not at the end. 

### Note

Remember that this is a content plug-in and won't execute on modules.  Therefore, any email addresses in a module won't be protected against spambots. 

Figure 10-4.  Content–Email Cloaking: User's view from a browser with Email Cloaking turned on

Figure 10-5.  Content–Email Cloaking: User's view from a browser with Email Cloaking turned on and JavaScript turned off

Content–Code Highlighter (GeSHi)

The Code Highlighter plug-in is useful when you want to display code inside of a content item.  Similar to how code appears in many code editors, the plug-in will modify the colors of certain elements in order to make it easier to read. 

A lot of people have a love–hate relationship with the _GeSHi_ plug-in.  The reason is that you are forced to use noncompliant code in order to make it work.  By default, most WYSIWYG editors strip out noncompliant code.  In order to create these examples, we have to turn the editor off in the Global Configuration. 

A common use of this plug-in is to show PHP code in your content.  The following example code first checks to see if the user is logged in.  Then, the user is either given a "not logged in" type message or the user is greeted by name:

    1 <pre xml:php>
    2 <? php
    3   $user =& JFactory::getUser();
    4
    5   //Check to see if user is logged in
    6   if($user->get('guest'))
    7   {
    8     echo "You are not logged in!"; 
    9   }
    10   else
    11   {
    12     echo "Hello ".$user->get('name')."!  You are logged in!"; 
    13   }
    14 ? >
    15 </pre>

Figure 10-6: PHP example") shows how the PHP code is shown to anyone viewing your website.  This code won't be executed. 

Another common use of the plug-in is to show XML data.  The XML in this example contains three books I made up along with their title and author.  In a real-world scenario, XML data containing information like this would contain ISBN numbers, publisher, number of pages, and so on:

    1 <pre xml:xml>
    2 <books>
    3   <book>
    4     <title>How to Save the World and Make it Look Easy</title>
    5     <author>Andrew Jackson</author>
    6   </book>
    7   <book>
    8     <title>Rock and/or Roll</title>
    9     <author>Jeff Henry</author>
    10   </book>
    11   <book>
    12     <title>Changing the World, One Person at a Time</title>
    13     <author>John Alford</author>
    14   </book>
    15 </books>
    16 </pre>

Figure 10-7: XML example") shows how the XML is shown to anyone viewing your website. 

This is always written using the _pre_ tag, space, _xml_ , colon, and then the language you want to display as shown in the following example:

    1 <pre xml:xxx>
    2 Code here
    3 </pre>

Figure 10-6.  Content–Code Highlighter (GeSHi): PHP example

Figure 10-7.  Content–Code Highlighter (GeSHi): XML example

The xxx after the colon can be replaced with any of the following valid languages that GeSHi supports:

  * actionscript

  * ada

  * apache

  * asm

  * asp

  * bash

  * c

  * c_mac

  * caddcl

  * cadlisp

  * cdfg

  * cpp

  * csharp

 |   * css

  * delphi

  * html4strict

  * java

  * javascript

  * lisp

  * lua

  * mpasm

  * nsis

  * objc

  * oobas

  * oracle8

  * pascal

 |   * perl

  * php

  * python

  * qbasic sas

  * smarty

  * vb

  * vbnet

  * visualfoxpro

  * xml

---|---|---

Content–Load Module

Occasionally, you may want to load a module inside of an article.  This plug-in can assist you in doing that.  To load the _user1_ position, all you need to do is put in the following plug-in code. 

    1 {loadposition user1}

If you only want to display one module, it will need to be in a module position all of its own.  See Showing a Module Inside an Article in Chapter 9 for more information on loading modules into articles. 

Content–Pagebreak

The Pagebreak plug-in allows you to break long articles into separate pages.  Figure 10-8 shows a sample article created to highlight its features.  The Article Index on the right side is basically a table of contents for the article. 

To use this feature, you need to use the Pagebreak button at the bottom of your editor.  Once clicked, a box will pop up that looks like Figure 10-9.  The Page Title is in the browser's title bar as well as the article title.  Looking at Figure 10-8, the title is the "St. Maarten" part of the "Caribbean Vacation – St. Maarten" title.  The Table of Contents Alias is the text that shows in the Article Index on the right side of the article. 

Figure 10-8.  Content–Pagebreak

Figure 10-9.  Editor Button–Pagebreak plug-in popup

Editor–No Editor

This editor is really not much more than a text box to type text into Joomla.  It is especially useful for those who prefer to view the raw HTML code or make edits to articles and modules using markup that WYSIWYG editors would strip out. 

Editor–TinyMCE 2.0

TinyMCE is an LGPL editor written by the developers at Moxiecode.  It is the default WYSIWYG editor in Joomla.  The plug-in has some parameters that some users may want to customize to change how the editor behaves. 

### Note

As of Joomla 1.5.12, the default editor is TinyMCE 3.2. 

Editor–XStandard Lite 2.0

This editor is an alternative to the default TinyMCE editor.  Since it requires you to download and manually install a browser plug-in, it is not really worth the time investment to get it working. 

Editor Button–Image

Found under the editor, this plug-in allows you to select and insert images from Media Manager. 

Editor Button–Pagebreak

This button works in conjunction with the previously discussed _Content–Pagebreak_ plug-in. 

Editor Button–Readmore

The _Readmore_ plug-in is a feature that was introduced in Joomla 1.5.  In previous versions of Joomla, when editing content (now called articles), a user had two editor boxes.  One instance of the editor was for Intro Text and the other was for Main Text.  In Joomla 1.5, everything above the Readmore is treated as Intro Text and everything after is treated as Main Text. 

This functionality is great for showing snippets of an article on a page such as the home page that requires the user to click "Read more..." in order to view the full article. 

Search–Content

If disabled, articles will not be shown in the search results.  It will also remove "Articles" from the Search Only options shown earlier in Figure 10-2.  Search limits and restrictions to article types can be set within the parameters of this plug-in. 

Search–Weblinks

If disabled, web links will not be shown in the search results.  It will also remove "Web links" from the Search Only options, as shown in Figure 10-2.  Search limits can be imposed within the parameters of this plug-in. 

Search–Contacts

If disabled, contacts will not be shown in the search results.  It will also remove "Contacts" from the Search Only options, as shown in Figure 10-2.  Search limits can be imposed within the parameters of this plug-in. 

Search–Categories

If disabled, categories will not be shown in the search results.  It will also remove "Categories" from the Search Only options, as shown in Figure 10-2.  Search limits can be imposed within the parameters of this plug-in. 

Search–Sections

If disabled, sections will not be shown in the search results.  It will also remove "Sections" from the Search Only options, as shown in Figure 10-2.  Search limits can be imposed within the parameters of this plug-in. 

Search–Newsfeeds

If disabled, newsfeeds will not be shown in the search results.  It will also remove "Newsfeeds" from the Search Only options, as shown in Figure 10-2.  Search limits can be imposed within the parameters of this plug-in. 

System–SEF

If Search Engine Friendly URLs in Global Configuration is set to Yes, this plug-in will search for any non-SEF URLs and make them SEF URLs. 

System–Debug

If Debug System or Debug Language in Global Configuration is set to Yes, this plug-in will display debug type information at the bottom of your website.  This is especially useful when building your website or writing extensions.  If your site is live, you may want to set the access level of this plug-in to Special so that your public and registered users do not see the debug messages. 

System–Legacy

Joomla 1.5 tries to be as backward compatible with Joomla 1.0 extensions as possible.  Since Joomla 1.5 has a new framework, the old functions will not work.  The solution to this is the Legacy plug-in.  In a nutshell, it maps old functions to the new framework. 

### Note

Developers, this plug-in is a great way to see how to call Joomla 1.0 functions in Joomla 1.5.  It makes upgrading your extensions to run natively on Joomla 1.5 a whole lot easier. 

System–Cache

This plug-in facilitates the functionality involved in the caching feature within Joomla. 

System–Log

When enabled, Joomla will log system errors to log files within the _logs_ folder.  This can be helpful when troubleshooting issues on your website. 

System–Remember Me

If a user checked the Remember Me box when logging into the frontend of your website, this plug-in will automatically log them in when they return. 

System–Backlink

The name Backlink sounds like it would facilitate the use of a Back button on your website, which is not the case.  Think of it more as a backward-compatible link because it attempts to convert Joomla 1.0 links to Joomla 1.5 links. 

User–Joomla! 

This plug-in allows users to be automatically created.  Unless you're an extension developer, this isn't something you need to worry about. 

XML-RPC–Joomla

This API plug-in allows for other websites and applications to perform a search on your website, ideally displaying the search results on their website.  This feature is not something that most Joomla users have to worry about.  When in doubt, leave this plug-in disabled.  Having this plug-in disabled doesn't affect search engines being able to crawl your site. 

XML-RPC–Blogger API

This API plug-in allows for interaction with applications that support the XML-RPC protocol found in the _phpxmlrpc library_.  This feature is not something that most Joomla users have to worry about.  When in doubt, leave this plug-in disabled. 

# Third-Party Plug-ins: How to Install

There are thousands of third-party plug-ins available that perform many different functions.  Installing third-party plug-ins is as straightforward as installing other extensions—you'll use the Extension Manager, shown in Figure 10-10:

  1.  Go to Extensions→Install/Uninstall and make sure the Install subsection link is clicked. 

  2.  Click the Choose File button and navigate your computer to locate the plug-in archive file (usually a ZIP, but also might be TGZ, GZ, or TAR). 

  3.  Click the Upload File & Install button. 

Figure 10-10.  Extension Manager

After you have installed a plug-in, you'll see it in the list when visiting the Plugins subsection in the Extension Manager.  There are many third-party modules available, but see Appendix B for a few of our recommendations. 

# Summary

In this chapter, we've covered:

  * The ins and outs of the Plugin Manager

  * The different types of plug-ins

  * The various plug-ins that come built in to Joomla by default

In the next chapter, you'll learn everything you ever wanted to know about Joomla templates. 

# Chapter 11.  Templates

Joomla is a template-based content management system.  It uses templates to display your information the way you want.  You can have a single template for your entire site or an individual template for each page.  We recommend using a single template since it's easier to make changes and updates, but you have the flexibility to choose based on your needs. 

If you already have a website and want to convert it to Joomla, this chapter will help you get your template together, but also read Chapter 17 to see the steps involved in converting an existing site. 

# The Template Manager

The Template Manager (Figure 11-1) is where you assign templates, change template parameters, edit template code, and assign the template to either the entire site or specific areas.  Joomla comes with three basic templates to start with—Milkyway (Figure 11-2), Beez (Figure 11-3), and JA_Purity (Figure 11-4)—and all of them have unique designs and parameters. 

Figure 11-1.  The Template Manager for frontend site templates

Figure 11-2.  The Milkyway template with sample data

The Beez template is focused on pushing Joomla 1.5 capabilities and accessibility. 

Figure 11-3.  The Beez template with sample data

In 2007, the Joomla Project announced a template contest and accepted submissions from the community.  The community voted JA_Purity as the overwhelming winner. 

Figure 11-4.  The JA_Purity template with sample data

# Installing and Assigning Templates

Templates in Joomla are considered extensions (like components, plug-ins, and modules) since they essentially extend Joomla in various ways.  There are two ways to install templates in Joomla.  We'll show you both ways, but we recommend using the Extension Manager installer as the preferred method. 

## Installing a Template Package File

We'll assume you've already downloaded a template package (usually a template folder that's been compressed into a ZIP or TGZ file) from either a free source or one of the many Joomla template developers.  RocketTheme is our favorite, and it has many attractive templates for sale and a bunch of nice freebies for you to try out. 

Let's walk through the steps to install a template package file using the Extension Manager installer:

  1.  Go to Extensions→Install/Uninstall. 

  2.  Click the Choose File button and select the template package on your computer (see Figure 11-5). 

  3.  Click the Upload File & Install button. 

Figure 11-5.  Installing a template package

You should now see the installation success screen, as shown in Figure 11-6. 

Figure 11-6.  Successful template installation

If your upload and installation was successful, you can skip to Assigning the Default Template.  If not, make sure you're using a valid template package.  Some template developers will package other items with their template and include them in the ZIP.  They'll usually ask you to unzip the archive to find the actual template package inside, but not always. 

## Uploading Template Files

If you're a more advanced user, you can upload your template files using FTP directly into the _templates_ folder in your Joomla directory, shown in Figure 11-7.  To do this, you'll need an FTP program.  There are many options available, but we recommend FileZilla for PCs and Transmit for Macs. 

Figure 11-7.  Uploading via FTP using Transmit

If you need help using FTP, we recommend you read Appendix A for tips.  Otherwise, consult the developer of your FTP software. 

### Note

If your template contains extra components, plug-ins, and modules, you'll have to use the Extension Manager installer to install the template package.  If you use FTP, you'll install the template but not all the "goodies" (like modules or other parts that may enhance the template) that go along with it. 

## Removing a Template

If you don't need a template anymore, or you just installed it to test it out, you may want to remove it and its associated files.  To remove a template, it is recommended that you use the Extension Manager to fully uninstall it:

  1.  Go to Extensions→Install/Uninstall. 

  2.  Click the Templates link in the secondary navigation bar (see Figure 11-8). 

Figure 11-8.  The Templates link in the secondary navigation bar

  1.  Select the checkbox next to the name of the template you want to remove (see Figure 11-9). 

  2.  Click the Uninstall button in the top toolbar. 

Figure 11-9.  Click the checkbox to remove a template

You should now see the confirmation of a successful removal, as shown in Figure 11-10. 

Figure 11-10.  Template successfully uninstalled

## Assigning the Default Template

Once you've installed a new template, you'll need to assign it so Joomla knows you want to use it on your site.  To assign your new template to be the default for the entire site:

  1.  Go to Extensions→Template Manager. 

  2.  Select the radio button next to the name of the template you want to assign (see Figure 11-11). 

Figure 11-11.  Selected template radio button

  1.  Click Default in the top toolbar. 

This sets the template of your choice to be the default template for the entire site. 

### Note

You can't assign Administrator templates to specific areas—only site templates. 

## Assigning a Template to Specific Site Sections

This is a great feature but not very commonly used in Joomla.  Almost always, users will have a single template for their entire site.  But once in a while you may find a need for using one template in one area of your site and one in another (it may be as simple as a background color change from one site section to another).  To assign a template for a specific section:

  1.  Go to Extensions→Template Manager. 

  2.  Click the name of the template you want to assign. 

  3.  Find Menu Assignment box on the left and click the "Select from List" radio button. 

### Note

If you don't have more than one template installed, your default template is assigned to all menu items and you will get the "Cannot assign default template" notice.  You'll need to install a second template in order to assign it to specific menu items. 

  4.  Choose the menu items where you want the template to be used (see Figure 11-12).  If your menu items aren't here, you'll need to set them up in the Menu Manager or the Menu Item Manager.  See Chapter 7 for how to do this.  Hold down the control key on the PC or command key on the Mac to select multiple items. 

Figure 11-12.  Selected template radio button and assigning specific menu items

  1.  Click Save in the top toolbar. 

Using this method, you could literally have a different template for each page on your site.  We don't recommend this because maintaining your site would probably be a nightmare, but it's possible! 

### Note

If you assign a template to a menu item that already had a template assigned to it, your new assignment will replace the previous one. 

# Template Folder Structure

The template folder structure and the main template file ( _index.php_ ) form the "skeleton" of visual presentation of your website content much like the Menu Manager forms the structure for the information.  This single page will be the framework that all your content loads into. 

Joomla has a very specific folder structure for templates.  The template folder itself is usually named according to the name of the template and contains the following folders and files:

css

The folder that contains the site css files. 

html

The folder that contains any template overrides.  See Template Overrides (MVC)") in Chapter 11 for information on how overrides work. 

images

The folder where your template images are kept.  This is not for images that are used elsewhere on your site.  See Chapter 13 for how and when to use the Media Manager. 

index.php

This is your main template file. 

params.ini

This is where your template parameters are stored.  See Template Parameters in Chapter 11 for details on how parameters work. 

template_thumbnail.png

This is a small preview image of your site template design (usually a screenshot of your site reduced down to 200px wide and 150px tall) and can be a JPG, GIF, or PNG. 

templateDetails.xml

This is where your template parameters are stored.  See Template Parameters in Chapter 11 for details on how parameters work. 

favicon.ico

This is a small favicon image that displays in the browser's URL bar.  You can find many resources on the Internet with information on how to create favicons. 

component.php

Provides specific styling and layout for printer-friendly pages like "Print this Page" and "Email this to a Friend." 

# Editing Templates

There are two primary ways to edit your template files—manually with a code editor or in the Administrator Backend.  If you're just starting out with Joomla, you will probably prefer to edit your template on the backend using the Template Manager. 

## Editing with the Template Manager

The Template Manager is a great tool for making quick changes to your site template, especially when you don't have FTP access.  But people often find it cumbersome if you're doing a lot of template work on your site. 

  1.  Go to Extensions→Template Manager. 

  2.  Either select the radio button next to the template you want to edit and click the Edit button in the top toolbar, or you can just click the template name. 

  3.  Choose Edit HTML or Edit CSS in the top toolbar, depending on what you want to edit. 

If you chose Edit HTML, you will see the Template HTML Editor (see Figure 11-13). 

Figure 11-13.  Template HTML Editor

If you chose Edit CSS, you will see the Template CSS Editor, shown in Figure 11-14.  You'll see a list of all the CSS files associated with that template.  To edit a specific file, click the radio button next to the name and click the Edit button in the top toolbar to open that CSS file in the Template CSS Code Editor. 

Figure 11-14.  Template CSS Code Editor

Whether you're editing the template file or any of the CSS files, make sure to click the Save button when you're done to save your changes.  If you make a mistake, just click Cancel and reopen the file again.  If you want to save your work and keep working, click the Apply button. 

### Note

You won't be able to make changes to your template file ( _index.php_ ) or CSS files if the permissions aren't set to writable ( _chmod 644_ ) on your server.  Usually, you can change this in your FTP program, but ask your hosting provider if you need help with this. 

## Edit Using an External Editor

You can also edit your template file ( _index.php_ ) using a text editor or code editor of your choice and then upload your file via FTP to the web server.  For intermediate and advanced users, this is usually the preferred method since it can be a faster process for multiple or extensive updates.  You can edit your template file and directly upload it into your _template_ folder via FTP to see your results. 

### Note

If you are making changes to your site template but the changes don't seem to be updating, you may need to either clear your cache using the Tools→Clear Cache menu function or turn off caching altogether in the Global Configuration.  See Chapter 4 for more information. 

## Adding Images

If you need to add images to your templates, we recommended that you keep them in the _< templatename>/images_ folder and not the Media Manager, which should be used for the rest of the images on your site.  That way, your template and all of its support files are all in one place. 

### Note

The Media Manager doesn't have access to the images in your template folder.  See Chapter 12 for how the Media Manager and Chapter 6 for how the Article Manager access images and other media files. 

# Anatomy of a Template File

A Joomla template is a PHP file called _index.php_ that contains mostly HTML with a few key Joomla-specific code tags.  We've created a sample barebones template in order to walk through a few of the key elements in the _index.php_ file.  Our simple _index.php_ file contains:

    <? php
    // no direct access
    defined( '_JEXEC' ) or die( 'Restricted access' );
    ? >
    <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; 
    ? >" lang="<?php echo $this->language; ? >" >
    <head>
    <jdoc:include type="head" />
    <link rel="stylesheet" href="<?php echo $this->baseurl ? >/templates/<?php echo
    $this->template ? >/css/template.css" type="text/css" />
    <! --[if IE]>
      <link rel="stylesheet" type="text/css" href="<?php echo $this->baseurl
    ? >/templates/<?php echo $this->template ? >/css/template_ie.css" />
    <![ endif]-->
    </head>
    <body>
    <div id="mainContent">
      <div id="header">
           <div id="sitename"><a href="<?php echo $this->baseurl ? >" alt="<?php echo 
    $this->title; ? >" ><? php echo $this->title; ? ></a></div>
        </div>
          <div id="rightHeader"><jdoc:include type="modules" name="topmenu" style="-
    1"/></div>
        </div>
        <div id="mainCenter">
             <jdoc:include type="message" />
             <jdoc:include type="component" />
        </div>
        <div id="footer">&copy;<?php echo date("Y"); ? > <? php echo $this->title; ? > All 
    Rights Reserved.</div>
        </div>
    <jdoc:include type="modules" name="debug" />
    </body>
    </html>

That's the entire template.  Now, let's look at each part starting from the top:

    <? php
    // no direct access
    defined( '_JEXEC' ) or die( 'Restricted access' );
    ? >

This prevents users from accessing and executing the file by itself; it's a security measure.  The next part contains:

    <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language;
    ? >" lang="<?php echo $this->language; ? >" >

The first lines will be based on your target DOCTYPE.  Currently, Joomla doesn't handle the _strict_ DOCTYPE so you should use _xhtml1-transitional_.  For a list of valid Document Type Definitions, visit <http://www.w3.org/QA/2002/04/valid-dtd-list.html>. 

The _< html>_ line that follows automatically defines your website's language based on your Joomla configuration.  This is to help users with languages other than English. 

The template head follows:

    <head>
    <jdoc:include type="head" />

The next section describes JDOC statements in more detail, but the head JDOC statement determines the following information:

    <base href="http://www.mywebsite.com/" />
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta name="robots" content="index, follow" />
    <meta name="keywords" content="joomla, Joomla" />
    <meta name="description" content="Joomla, the ultimate CMS." / >
    <meta name="generator" content="Joomla!  1.5 - Open Source Content Management" />
    <title>Your Page Title</title>
    <link href="/templates/starter/favicon.ico" rel="shortcut icon" type="image/x-icon"
    />
    <script type="text/javascript" src="/includes/js/joomla.javascript.js"></script>
    <script type="text/javascript" src="/media/system/js/mootools.js"></script>
    <script type="text/javascript" src="/media/system/js/caption.js"></script>

Then we'll dynamically generate a link to your CSS file in the template CSS folder in the next lines:

    <link rel="stylesheet" href="<?php echo $this->baseurl ? >/templates/<?php echo 
    $this->template ? >/css/template.css" type="text/css" />

The first method in the previous code returns the URL to the home page of your website:

    <? php echo $this->baseurl ? >

The second method in the previous code returns the name of your active template as defined in the _templateDetails.xml_ file:

    <? php echo $this->template ? >

So when Joomla processes and loads the page, it looks like this:

    <link rel="stylesheet"
    href=" **http://www.mywebsite.com** /templates/ **mytemplate** /css/template.css"
    type="text/css" />

With these variables set dynamically, you can reuse your template over and over for many sites and never have to change the path, letting Joomla do the work for you. 

Farther down the template, you'll see:

    <div id="sitename">
        <a href="<?php echo $this->baseurl ? >" alt="<?php echo $this->title; ? >" ><? php 
    echo $this->title; ? ></a>
    </div>

Again, we're using the PHP method to automatically add in the main site URL, but now we're also determining the site title by using:

    <? php echo $this->title; ? >

So, when Joomla processes the previous code, the result is:

    <div id="sitename">
        <a href="http://www.mywebsite.com" alt="My Site Name" >My Site Name</a>
    </div>

### Note

You could also use _<? php echo $mainframe->getCfg('sitename'); ? >_ instead to insert the site name as defined in your Global Configuration. 

Next, we come to a _topmenu_ module:

    <div id="rightHeader">
        <jdoc:include type="modules" name="topmenu" style="-1"/>
    </div>

We'll go into JDOC statements in the next section, but this line will load the module(s) assigned to the _topmenu_ position in the Module Manager.  The _style_ portion of the line determines module chrome (see Module Chrome). 

The next part of the template is where most of the magic happens:

    <jdoc:include type="message" />
    <jdoc:include type="component" />

The message statement is where special messages are displayed ("Your password is not correct.  Try again.").  The component statement is where the main content (e.g., articles) and component information will be loaded when your page loads. 

Finally, we come to the page footer.  This isn't required, but it's an easy way to add common information to the bottom of every page:

    <div id="footer">
        &copy;<?php echo date("Y"); ? > <? php echo $this->title; ? > All Rights 
    Reserved.</div>
    </div>

Again, we're using the title method to get the site name and we're using a little PHP, not a Joomla function, to determine the current year (based on the web server's internal clock).  The processed result of the previous code is:

    <div id="footer">
        &copy;2009 My Site Name All Rights Reserved.</div>
    </div>

In the process of building your template or developing your site, you may need debugging information to help troubleshoot errors.  To display debugging information, add the following line to your template, preferably at the bottom:

    <jdoc:include type="modules" name="debug" />

If you need debugging information, make sure you enable it in the Global Configuration. 

### Note

If debugging isn't turned on in the Global Configuration, this JDOC statement will be ignored.  See Chapter 4 for details on how to do this. 

That's the structure of our barebones template and how each part works.  Your template will be different and you can move things around to suit your needs and site design. 

## JDOC Statements

We saw a few JDOC statements in the previous section, so now let's clarify what they do.  They are basically placeholders in your template for specific types of information.  Here are the JDOC types and an example of each:

`head <jdoc:include type="head" />`

As shown in the previous section, this type includes the standard Joomla header information, including site name, metadata, and CSS or JavaScript links.  There should be only one in your template. 

`message <jdoc:include type="message" />`

This displays important messages to your users.  It may be a component failure or just a user who has failed to log in.  It gives a more specific error message about the problem and possibly how to resolve it.  There should be only one in your template. 

`component <jdoc:include type="component" />`

As previously described, the component type displays your main content and component information.  It usually lives in the center of your template and should never be duplicated. 

`module <jdoc:include type="module" name="left" />`

This displays a module in the position named. 

`modules <jdoc:include type="modules" name="left" />`

This displays a module in the position named but allows for individual module chrome within a single position. 

`installation <jdoc:include type="installation" />`

This is used by the Extension Manager when installing a template. 

JDOC statements require a type, but may optionally also have a style:

    <jdoc:include type="module" name="left"style="xhtml" />

This is referred to as _module chrome_ and determines the look of a particular module position.  Read more about module chrome in Module Chrome. 

## Template Conditionals

Boolean conditionals in your template are used to display information when certain conditions are met.  This is a powerful way to customize your template for each section of your website.  For example:

    <? php if($this->countModules('right')) : ? >
          <div id="right">
              <jdoc:include type="modules" name="bottom" />
          </div>
    <? php endif; ? >

The first line uses the _countModule_ method to count the number of published modules in the _right_ position.  If there are any published modules in that position, the conditional is positive and will display the bottom module with the _< div>_ tag.  If the conditional isn't met, nothing will be displayed. 

You can also set multiple conditions for displaying information:

    <? php if($this->countModules('right **or** left')) : ? >
          <div id="right">
              <jdoc:include type="modules" name="bottom" />
          </div>
    <? php endif; ? >

The first line counts the number of published modules in the right _or_ left positions and displays the bottom module and _< div>_ tag if it's positive.  You can also use the _and_ operator like in this example:

    <? php if($this->countModules('right **and** left')) : ? >
          <div id="right">
              <jdoc:include type="modules" name="bottom" />
          </div>
    <? php endif; ? >

This will check to see if both the right and left positions contain a published module and return the bottom module with a _< div>_ tag if it's true. 

### Note

Getting creative with these simple conditionals will give you layout varieties only possible if you create multiple site templates—and they're much easier to maintain. 

Template conditionals can also use arithmetic and comparison operators.  See a complete list at <http://docs.joomla.org/Template_reference_material>. 

# Module Chrome

Module chrome is the way modules are displayed on your site.  As we saw in our previous example showing the structure of a template, a module is displayed by adding the following JDOC statement to your template file:

    <jdoc:include type="modules" name="topmenu" style="-1"/>

The previous statement displays the raw output of any module assigned to the _topmenu_ position in the Module Manager.  Following are the chrome options built into Joomla that are determined by the style parameter.  You can use either the names or the corresponding numbers:

none (-1)

Output the raw module content. 

table (0)

Output the module in a table.  This is the default option. 

horz (1)

Output the module as a table inside an outer table. 

xhtml (-2)

Output the module in _< div>_ tags. 

rounded (-3)

Output the module in nested _< div>_ tags to create rounded corners. 

outline

Output the module with a border and usually used to preview module positions. 

You can create custom module chrome attributes.  Check out the Joomla Documentation wiki at <http://docs.joomla.org/Tutorial:More_on_Joomla%21_modules> for more information. 

You can also customize the appearance of modules by using module class suffixes.  See Chapter 9 for more information. 

# Template Parameters

Template parameters (stored in the _templateDetails.xml_ file in the template folder) give users a way to customize a single template in many ways to avoid creating multiple templates.  Template creators can also build in many options to help website maintainers avoid writing their own template code. 

Template parameters also tell the Joomla Extension Manager where to install all the different files and folders when you install a template for the first time.  The Extension Manager reads the section between the _< files></files>_ tags.  Following is a sample from the Milkyway _templateDetails.xml_ file:

    <files>
        <filename>index.php</filename>
        <filename>templateDetails.xml</filename>
        <filename>template_thumbnail.png</filename>
        <filename>params.ini</filename>
        <filename>images/arrow.png</filename>
        <filename>css/index.html</filename>
        <filename>css/template.css</filename>
        <folder>html</folder>
    </files>

All the files will be installed and folders created, if needed.  You can also avoid naming each file in subfolders and instead install an entire folder. 

### Note

Changing this part of your _templateDetails.xml_ file will have no effect on a template that is already installed.  But it might cause a template to fail or to not install fully if incorrectly changed before installing. 

In the next example, we'll use the Milkway template (see Figure 11-15) since it allows you to select a color variation, a background variation, and the width of your template—all without knowing any code! 

Figure 11-15.  Parameters in the Milkyway template

### Note

If your _params.ini_ file is unwriteable by Joomla, you'll need to set the permissions of that file to 755.  You can usually do this with an FTP application, but if you need more help, you should contact your hosting provider. 

In order to give your users the ability to select parameters, you'll need to add the parameter information to your template XML file ( _templateDetails.xml_ ).  In Milkyway, the parameters are:

    <params>
              <param name="colorVariation" type="list" default="white" label="Color 
    Variation" description="Color variation to use">
                   <option value="blue">Blue</option>
                   <option value="red">Red</option>
                   <option value="green">Green</option>
                   <option value="orange">Orange</option>
                   <option value="black">Black</option>
                   <option value="white">White</option>
              </param>
              <param name="backgroundVariation" type="list" default="blue"
    label="Background Variation" description="Background color variation to use">
                   <option value="blue">Blue</option>
                   <option value="red">Red</option>
                   <option value="green">Green</option>
                   <option value="orange">Orange</option>
                   <option value="black">Black</option>
                   <option value="white">White</option>
              </param>
              <param name="widthStyle" type="list" default="fmax" label="Template Width"
    description="Width style of the template">
                   <option value="fmax">Fluid with maximum</option>
                   <option value="medium">Medium</option>
                   <option value="small">Small</option>
                   <option value="fluid">Fluid</option>
              </param>
        </params>

Each individual parameter resides within its own set of _< param></param>_ tags and all of them reside within a parent set of _< params></params>_ tags so Joomla can find them when you open the template in the Template Manager. 

The definitions for each parameter are set up as drop-down menu options.  For example, the drop-down menu for color variations is:

    <param name="colorVariation" type="list" default="white" label="Color Variation" 
    description="Color variation to use">
              <option value="blue">Blue</option>
              <option value="red">Red</option>
              <option value="green">Green</option>
              <option value="orange">Orange</option>
              <option value="black">Black</option>
              <option value="white">White</option>
    </param>

You can see that the details of the color variation parameter are defined in the first _< param>_ tag:

type

This is set to show a drop-down menu.  Other options might be languages, textarea, usergroup, or even custom parameter types.  An extensive list of type options can be found on the Joomla Documentation wiki at <http://docs.joomla.org/Tutorial:Template_parameters>. 

default

This sets the default value when nothing is selected. 

label

This is the label shown to the user next to the drop-down menu. 

description

This is the label description shown when the user rolls over the label. 

Then each _< option>_ tag defines the option value the user sees and the option that is written to the _params.ini_ file when selected and saved in the Template Manager. 

The _params.ini_ file for the Milkyway template contains the selected parameters shown in Figure 11-4:

    colorVariation=blue
    backgroundVariation=blue
    widthStyle=fmax

The values of each correspond to the option values in the _templateDetails.xml_ file.  When you change the parameters, the _params.ini_ file is updated with the new information.  Changing the color and background variations to red would change the variables to:

    colorVariation=red
    backgroundVariation=red
    widthStyle=fmax

When your template loads, it checks the parameter values in that file and performs your customization options in the template.  In the Milkyway template, there are two checks for the parameter values:

    <link rel="stylesheet" href="<?php echo $this->baseurl
    ? >/templates/rhuk_milkyway/css/<?php echo $this->params->get('colorVariation');
    ? >.css" type="text/css" />
    <link rel="stylesheet" href="<?php echo $this->baseurl
    ? >/templates/rhuk_milkyway/css/<?php echo $this->params-
    >get('backgroundVariation'); ? >_bg.css" type="text/css" />

These load the specific CSS files for color variation and background color.  In the CSS folder, there are multiple CSS files, two of which are named _blue.css_ and _red.css_.  The words _blue_ or _red_ , depending on your parameter selection, are inserted here:

    <? php echo $this->params->get('backgroundVariation'); ? >

So, depending on which CSS file you load, you'll automatically retrieve and set colors, fonts, and just about anything else you can do with CSS. 

# Template Overrides (MVC)

Template overrides are a powerful aspect of Joomla.  They allow you to customize the look and functionality of your site without altering core code.  This helps in many ways, including not breaking your site when updates are installed or reverting changes if you make a mistake. 

The Joomla MVC, which stands for _Model View Controller_ , looks like Figure 11-16") from a bird's-eye view. 

Figure 11-16.  The Joomla Model View Controller (MVC)

### Note

Not all Joomla 1.5 components follow this design pattern, but most do.  Look for a folder called _views_ in the component folder to confirm it does. 

Do not be too concerned if you don't completely understand how MVC works.  To be honest, we know a few seasoned developers that don't fully understand it, either.  The important thing to know is the presentation layer (also called _View_ ) is separate from the rest of the extension.  Before Joomla loads a view file for an extension, it first checks to see if a template override for a given view file exists in the _html_ folder inside the current template folder.  If it finds one, it will use that overriding file instead of the one packaged with the extension. 

### Note

You can only use template overrides on components and modules, not plug-ins. 

Creating a template override is easiest to understand if you see an example, so let's create a template override for the login module ( _mod_login_ ).  Some components and modules have multiple view files, however the login module only has one.  The view file for _mod_login_ is located at _/modules/mod_login/tmpl/default.php_. 

As mentioned previously, the template overrides belong in your template's _html_ folder.  In our example, we need to copy the _default.php_ file to _/templates/rhuk_milkyway/html/mod_login/default.php_. 

If the _mod_login_ folder doesn't exist, you'll need to create it.  Once you do this, Joomla will no longer look for the _default.php_ file in the module's folder, but rather the template override file in your template folder instead. 

You are now free to edit the template override file as you see fit without having to worry about the original code being affected by upgrades. 

# Summary

In this chapter, we've covered how to:

  * Install, configure, and remove a template

  * Set up a template folder structure

  * Break down a template file

  * Set up template conditionals and JDOC statements

  * Apply styles and chrome to JDOCs and modules

  * Use the Joomla MVC to customize a design and functionality

In the next chapter, we'll cover user management in Joomla. 

# Chapter 12.  User Manager

Users are an essential part of any website and content management system.  When you give your site visitors the ability to register, perform functions, or customize their preferences, there's a greater sense of belonging and community.  This encourages them to keep coming back. 

In Joomla, user administration has a small number of predefined user groups with roles and abilities intended to make it easy to use. 

# User Manager

Managing users takes place within the User Manager.  You can access the User Manager by navigating to Site→User Manager.  You can also access it by clicking the User Manager icon in the Control Panel.  Figure 12-1 shows the User Manager prepopulated with some example users. 

Figure 12-1.  User Manager

Although most of the columns might appear self-explanatory, following is a brief overview of each:

Name

This is the proper name of the given user. 

Username

This is what the user logs into her account with. 

Logged In

A green checkmark indicates that the user is currently logged in. 

Enabled

A green checkmark means that particular user's account is enabled.  An _X_ indicates that the user's account is disabled. 

Group

Each group assigns different permissions to each particular user.  Later in this chapter, we cover how user permissions and groups work. 

E-Mail

This is the user's email address. 

Last Visit

Last Visit shows the last time a particular user logged in to the website. 

ID

This is Joomla's internal ID for the user. 

By default, the users are sorted by name in alphabetical order.  If you click on the _Name_ header at the top of the column, the users will be sorted backward alphabetically.  Data can be listed by ascending or descending order in most of the other columns as well. 

When you have a lot of users, filtering the results makes finding users much easier.  If you know the name of the user, the easiest way to find their account is to type their name in the Filter field and click Go.  If you want to see all users with Super Administrator access or other user groups, use the Select Group drop-down.  Lastly, if you want to look at all users who are currently logged in, choose the Select Log Status drop-down menu. 

To force users to log out, check the box next to their name and click Logout.  This immediately logs them out of the frontend of the site. 

# Adding and Editing Users

It's more common for users to register themselves, but sometimes you may want to add them yourself.  To add users, go to the User Manager and click the New icon on the toolbar.  Then fill out their relevant details. 

### Note

Once you click Save, an email will be sent to the email address of the new user with her account details. 

To edit an existing user, you can either click the user's name or you can check the box next to the user's name and click _Edit_ on the toolbar.  The screens are identical except that when you are editing a user, the fields are populated with the current user's data.  Figure 12-2 shows the User: [Edit] screen. 

Figure 12-2.  User: [Edit] screen

The User screen is divided up into three distinct areas: User Details, Parameters, and Contact Information. 

## User Details

Name

The Name field can be whatever you want.  In Figure 12-2, you can see that the Name of this user is Administrator.  It just as easily could have been a full name like Gene Kelly. 

Username

The Username field is the user's login.  Usernames must be at least two characters long and should not contain any symbols. 

E-mail

This is the user's email address. 

New Password

Enter the user's password here.  Although not secure and definitely not recommended, you could technically assign a password of one character.  The only requirement for this field is that it is not blank and that it matches the Verified Password field below. 

Verify Password

This field is compared to the New Password field to ensure that you've accurately typed in your password. 

### Note

If you make the same typo twice in setting a password and can't access your account, you'll need another Super Administrator to reset your password for you.  If you have only one Super Administrator, refer to Appendix D to learn how to reset your password directly in the database. 

Group

By setting the group, you are defining what the user can and can't do in Joomla.  The different permissions and group types are detailed in User Permissions in Chapter 12. 

Block User

Blocking a user will prevent them from logging in to Joomla.  You can think of this as enable versus disable, since that is really all it is. 

Receive System E-mails

Occasionally, Joomla will send an email out to certain users.  This setting allows you to turn those emails on and off.  If someone submits an article or a web link, a system email will be generated and sent to Super Administrators. 

Register Date

This is the date the user registered or signed up on your website. 

Last Visit Date

The Last Visit Date is the date the user last logged in. 

## Parameters

Backend Language

If more than one language is installed, you can set a language preference when navigating the backend of your website.  Leaving this as Select Language will keep it as the default language, which is set in the Language Manager. 

Frontend Language

If more than one language is installed, you can set a language preference when navigating the frontend of your website.  Leaving this as Select Language will keep it as the default language, which is set in the Language Manager. 

User Editor

Leaving this as Select Editor will keep it as the default editor set in Global Configuration. 

Help Site

Users can choose whether to use the local help files or access them remotely from specific websites.  If your first language is not English, you may want to change this option.  This is globally set in the Global Configuration. 

Time Zone

Since servers are set up all over the world, time zone shifts need to be accounted for.  The standard is to set servers to Greenwich Mean Time (GMT) or UTC+0, but not all servers adhere to that standard. 

### Note

Greenwich Mean Time is based on the current time in Greenwich, Greater London, England. 

## Contact Information

If you're using the Contacts component, you can link contact details with their user account.  If you look at Figure 12-2, you'll notice that the only information in the Contact Information area states that there are no contact details linked to this user.  Figure 12-3 shows what that space would look like if we tied the contact "Kenneth Crowder" to the admin username. 

### Note

User contact information is not editable from the User Manager.  It is only editable from within the Contacts component. 

Figure 12-3.  User: [Edit] Contact Information screen

# User Registration

You've now seen how a site administrator can create users in the User Manager, but users more commonly register themselves on your website. 

The Global Configuration has a few settings that customize the registration process.  Those settings were discussed in the User Settings section of Chapter 4.  Now, we'll jump to the frontend of your website to take a look at the user registration process. 

## Login Module

For most users, the main point of entry is the Login Module.  Figure 12-4 shows the default Login Module. 

Figure 12-4.  Login Module

The top half of the Login Module allows an existing user to enter his login credentials and log in.  The Remember Me checkbox gives users the choice for Joomla to remember who they are the next time they return.  If users regularly visit your website, this is a nice time-saving feature. 

### Warning

You should never use any sort of Remember Me type of functionality on a public computer.  This goes for any website and not just Joomla websites.  If the wrong person were to stumble upon a site that automatically logged you back in, they could use your account or information for illegal or unethical purposes. 

The bottom half of the Login Module enables users to create an account, retrieve their lost password, or retrieve a forgotten username. 

## Creating an Account

When users create an account on your website, they see less options than an administrator would when creating their accounts from the website's backend.  Figure 12-5 shows a typical User Registration page.  Once the Register button is clicked, the account will be created.  If the values in the User Settings section of the Global Configuration allow such, a user may be able to immediately log in. 

Figure 12-5.  User Registration

## Forgot Your Password? 

We're sure you've never forgotten a password, but your users sometimes will.  Figure 12-6 shows the "Forgot your Password" screen. 

Figure 12-6. " Forgot your Password?"  screen

The user enters his email address used when creating an account and then clicks Submit.  He will then be taken to the "Confirm your Account" page.  Meanwhile, Joomla will send a _token_ (a specially encrypted key) via email to the user.  Once the token is received, it needs to be entered into the text box on the "Confirm your Account" page.  If the token is correct, the user will be able to reset his password on the following page. 

User passwords in Joomla are encrypted using a "salted" MD5 hash before they are written to the database, e.g., the password _starfish_ would be stored in the database as 4e6db389432806afc5b356c99872f27f:ZLrwlpS1SlLUjvJqNA3vJfwEk4TTYqUZ. 

This means that even if a website owner wanted to look at your password in the database, they wouldn't be able to figure out what the actual password was.  So, for security reasons, Joomla cannot retrieve your password and email it to you. 

## Forgot Your Username? 

Believe it or not, people also forget their usernames.  Figure 12-7 shows the "Forgot your Username?"  screen.  To recover a username, the user enters the email address used to create the account and then clicks Submit.  A username reminder email will be sent to her email address on record. 

Figure 12-7. " Forgot your Username?"  screen

# Recover Your Admin Password

We hope that you're reading this to learn how to reset your admin password _in case_ you forget it and not because _you already did_.  Technically, there is no way to actually "recover" the administrator password since passwords in Joomla are encrypted using a "salted" MD5 hash before they are saved in the database.  However, there are two ways to reset your admin password—the easy way and the hard way. 

## The Easy Way

Open your browser and navigate to _http://www.  <yourwebsite>.com/index.php?option=com_user&view=reset_. 

Enter your email address and click Submit.  Joomla will send you an email containing a special code called a token.  The token will confirm that you are the owner of the account.  Using the token, you will be able to reset your password. 

## The Hard Way

Resetting your password the hard way has a bigger potential to break things, but this is your only option if the easy way doesn't work.  It requires a higher level of technical expertise:

  1.  Log in to your web-hosting control panel.  This might be cpanel, but if you don't know what it is, you should contact your hosting provider. 

  2.  Find and open phpMyAdmin, the tool for managing MySQL databases. 

We are going to execute some variation of the following SQL against your users table.  Before blindly executing the SQL, please read the explanations of fields you may need to change:

    UPDATE jos_users SET password=MD5('usingjoomlabook.com') WHERE username='admin';

jos_users

If you have chosen not to use the default _database prefix_ , you will want to change _jos__ to whatever that prefix is. 

admin

We'll assume that you are trying to reset the password for admin, however, you may not be.  This field should be changed to whatever username you wish to reset. 

usingjoomlabook.com

Of course, you're free to substitute usingjoomlabook.com for whatever password you want. 

That's it.  You should now be able log in to your Administrator Backend using the username and password you entered into the MySQL database. 

# User Permissions

The access levels of your site users can be categorized into one of eight user groups.  These groups are designed to control what your users can see and edit. 

The predefined groups are Super Administrator, Administrator, Manager, Publisher, Editor, Author, Registered, and Guest.  Table 12-1 outlines the permissions each group has by default.  Each Group inherits the permissions from all groups below it.  As an example, Registered users view restricted content as well as perform basic browsing. 

Table 12-1.  User permissions by group

Group | Backend permissions | Frontend permissions

---|---|---

Super Administrator | Global Configuration

Template Manager

Language Manager

Mass Mail | All below

Administrator | User Manager

Trash Manager

Extension Manager

Module Manager

Plugin Manager

Global Check-in

Clean/Purge Cache | All below

Manager | Article Manager

Front Page Manager

Section Manager

Category Manager

Media Manager

Menu Manger

Components

Private Messaging

Help

System Info | All below

Publisher | No access to backend | Can publish articles

Editor | No access to backend | Can edit all articles

Author | No access to backend | Can create articles

Can edit own articles

Registered | No access to backend | Can view restricted content

Guest | No access to backend | Basic browsing

Since these user groups and access levels are fixed in Joomla, it's not possible to customize them.  But if you're an advanced user, you can see a complete access control list by looking at the following Joomla file: _\libraries\joomla\user\authorization.php_. 

This isn't for everyone.  We only point it out because some more experienced users may want to modify it to allow other groups to be able to perform actions they normally would not be able to do.  For example, you might want a Manager to be able to use Global Check-in. 

### Note

Whenever you modify a core Joomla file, make a note of your changes in a text and put it in Joomla's root directory.  This way, when you upgrade your installation to the latest release, you'll be able to "re-hack" the code back to whatever permissions you want. 

# Summary

In this chapter, we've covered how to:

  * Manage users using User Manager

  * Log in to a website using the Login Module

  * Retrieve a lost username

  * Reset your password

  * Register for a new account

  * Assign user groups based on the permission levels

In the next chapter, we'll explore how to use the Media Manager to manage files. 

# Chapter 13.  Media Manager

Using media in your site makes it much more engaging than just plain text.  With Joomla, you can add images, audio, video, or even Adobe Flash to your web pages with just a few clicks. 

In this chapter, we'll cover how to upload media, add it to your articles, and delete media. 

# The Media Manager

The Media Manager is a simple tool for not only managing your media files, but also incorporating them into the pages of your website.  To open the Media Manager, go to Site→Media Manager to open the default Thumbnail View. 

Figure 13-1.  Media Manager Thumbnail View

The Media Manager displays images, folders, and other files inside the images directory.  The folders on the left column are all subfolders within that directory and the plus symbol next to each expands the folder tree down further.  Clicking on each of these folders displays their contents. 

### Note

The Media Manager doesn't manage images or other files that are used in your template.  Those should be stored in the template folder.  See Chapter 11 for more information on template media. 

# Navigating Views and Managing Media

The Thumbnail View (Figure 13-1) might not show the information you want to know about each file.  The Detail View (Figure 13-2) in the Media Manager shows a little more detail about each file—the file size and pixel dimensions. 

Figure 13-2.  Media Manager Detail View

In both views, only a small thumbnail of each image is shown.  If you want to see the full-size image, click either the image thumbnail to open the image in a _lightbox layer_ or click the filename to open it in the Media Manager window. 

### Warning

Don't delete any of the following image folders and their contents:

  *  _images/banners_

  *  _images/M_images_

  *  _images/smilies_

  *  _images/stories_

Joomla uses these folders and the files they contain. 

# Uploading and Deleting Media

Both uploading and deleting media works the same way for images as it does for Flash or other media. 

## Uploading Media

We're now going to walk through the basic steps of uploading an image.  There are two ways to upload media using the Media Manager.  To upload an image using the default form uploader, follow the steps listed next. 

  1.  Go to Site→Media Manager. 

  2.  Select the folder on the left where you want to upload the image.  If you need to create a new folder, you can do so by using the Create Folder button above the image thumbnails (see Figure 13-3). 

Figure 13-3.  Creating a new folder in the Media Manager

  1.  Click the Choose File button and select the file on your computer, as shown in Figure 13-4. 

  2.  Click Start Upload. 

Figure 13-4.  Uploading in the Media Manager

### Note

The upload functionality is limited by the POST limit set by your hosting provider.  To check your limit, go to Help→System Info→PHP Information and look for the _post_max_size_ variable to see the maximum upload size in megabytes. 

The time it takes to upload a file will depend on the speed of your connection, the speed of your web server, and a number of other factors. 

The second way to upload media is using the Flash uploader built into Joomla.  This allows you to upload multiple files at once.  To upload images using the Flash uploader:

  1.  Go to Site→Media Manager. 

  2.  Select the folder on the left where you want to upload the image.  If you need to create a new folder, you can do so by using the Create Folder button above the image thumbnails (shown previously in Figure 13-3). 

  3.  Click the Browse Files button and select the file on your computer.  Repeat this step until you have selected all the files you want to upload, as shown in Figure 13-5. 

Figure 13-5.  Upload multiple files with the Media Manager

  1.  Click Start Upload. 

Once your files have successfully uploaded, you can click the Clear Completed button to make sure it worked or upload more. 

### Note

If you want to use the Flash uploader, you'll need to enable it in the Global Configuration.  See Media Settings for more information on how to do this.  Currently, the Flash uploader is incompatible with Flash version 10. 

Again, the time it takes to upload a file depends on the speed of your connection, the speed of your web server, file sizes, and a number of other factors. 

## Deleting Media

To delete a single media item in the Media Manager:

  1.  Go to Site→Media Manager. 

  2.  Select the folder on the left to locate the item you want to delete. 

  3.  Click the delete icon next to that item (see Figure 13-6). 

Figure 13-6.  Deleting a single item in the Media Manager

To delete multiple media items at once from a single folder:

  1.  Go to Site→Media Manager. 

  2.  Select the folder on the left to locate the items you want to delete. 

  3.  Click the checkboxes next to each item, as shown in Figure 13-7. 

  4.  Click Delete in the top toolbar. 

Figure 13-7.  Deleting multiple items in the Media Manager

### Note

You can't move media around.  If you need to move an item to another folder, you'll need to delete that item and reupload it to the proper folder using the previous steps. 

# Using Media in Your Articles

Adding media is a good way to spruce up your website's look.  Once you've uploaded your images and other items though the Media Manager, you're ready to add them to your articles. 

## Adding an Image

We're now going to add an image to an article.  To add images and other types of media to your articles:

  1.  Go to Content→Article Manager and click the name of the article where you want to add an image. 

  2.  Insert your cursor in the article body where you want the image to be placed. 

  3.  Click the image button in the toolbar.  It looks like a small photo of a tree (refer back to Figure 13-8). 

Figure 13-8.  The TinyMCE Toolbar

  1.  Type in the path of the image you want to add (see Figure 13-9).  A preview of your image should appear once you've typed the complete path and image name. 

Figure 13-9.  The TinyMCE image editor

  1.  Click Insert. 

  2.  Click the Save button to save the article. 

Your image should now appear at the location of your cursor, as shown in Figure 13-10. 

Figure 13-10.  Image added to an article

## Changing an Image

Make a mistake or want to update an image?  To change an existing image:

  1.  Go to Content→Article Manager and click the name of the article where you want to change an image. 

  2.  Select the image you want to replace. 

  3.  Click the image button in the toolbar.  It looks like a small photo of a tree (see Figure 13-8). 

  1.  Type in the new path and new name of the image you want to add, as shown in Figure 13-11.  A preview of your image should appear once you've typed the complete path and image name. 

Figure 13-11.  Changing an image in the TinyMCE image editor

  1.  Click Insert. 

  2.  Click the Save button to save the article. 

Your new image should have replaced the old one—milk for bread (see Figure 13-12). 

Figure 13-12.  New image replaces the old one

## Removing an Image

Deleting the image is like deleting text.  Follow these steps:

  1.  Go to Content→Article Manager and click the name of the article where you want to add an image. 

  2.  Select the image you want to delete. 

  3.  Hit Delete on your keyboard. 

# Summary

In this chapter, we covered how you can use the Media Manager to:

  * Upload images and other types of media, single or multiple items

  * Create folders to organize your media

  * Delete a single item or multiple items at once

  * Add images to your articles

  * Change or replace an existing image in an article

In the next chapter, we'll discuss the ins and outs of the Language Manager. 

# Chapter 14.  Languages

Joomla currently supports over 50 world languages, which is more languages than any other content management system.  If your website users speak one language and your administrators another, you can customize your language settings to serve the needs of each.  Language settings can also be set on an individual user basis so if you speak French, Japanese, or Farsi, you'll know that Joomla speaks your language—even if it goes from right to left. 

The Joomla Project works with designated Joomla Translation Teams to translate Joomla.  These teams contribute their language packs and make them freely available. 

# The Language Manager

The Language Manager (see Figure 14-1) is the section where you'll assign a default language for the frontend of your website, the backend, or both.  They can be completely different languages if you like. 

Figure 14-1.  The Language Manager: Site languages

Go to Extensions→Language Manager.  In the toolbar, you have the Default icon for setting the default language when you have more than one installed.  Clicking between the Site and Administrator subsections under the section title will show you the languages you have installed.  On a default installation, Joomla comes only with the English (United Kingdom) language pack. 

### Note

Language packs are a translation of the Joomla functions, not translations of your website content.  To translate the content of your articles, menus, and other areas, you'll need a multilingual manager like Joom!Fish.  See the end of this chapter for more information. 

# Finding and Installing Languages

You can install as many languages as you like, but we recommend you only use accredited translations that have been fully tested.  A bad language string or improperly encoded language file can take down an entire site.  Visit the code repository on JoomlaCode at <http://joomlacode.org/gf/project/jtranslation>. 

Click the Files link on the left to see the available packs.  There are two separate package (ZIP) files for both the site and administrator languages.  Each package contains separate INI files for each section of Joomla, an XML installation file, and an XML information file for the Language Manager. 

## Installing Other Languages

It's the same process whether you're installing an admin language pack or a site language pack.  To install a language pack:

  1.  Go to Extensions→Install/Uninstall and click the Choose File button to select a ZIP file. 

  2.  Navigate to the language pack on your computer hard drive. 

  3.  Click the Upload File & Install button. 

You can install each individual language pack for the site or the admin, but we usually install both just in case.  In the Language Manager (see Figure 14-2), we've installed two language packs for the frontend of our site—German and Slovak. 

Figure 14-2.  Language Manager: Extra frontend site languages—Default Language: English

## Assigning a Language Pack to the Site or Administrator

Now we're going to assume that the site administrator speaks German and the site users speak Slovak so we'll set up those languages for each.  Once the language packs are installed, perform the following. 

  1.  Go to Extensions→Language Manager and click the _Site_ submenu link if it isn't selected to view the installed site languages (see Figure 14-2). 

  2.  Click the radio button next to the language pack you want to assign as the default and click the Default button in the top toolbar. 

Now switch to the frontend of your website and you'll see how the Joomla internal portions have been translated to Slovak.  In Figure 14-3, the content remains in the original language, but the Login Form and the article details have been translated. 

Figure 14-3.  Frontend of our website with the Slovak language pack

Now we'll translate the Administrator Backend using the German language pack we installed earlier.  To change the default language, do the following:

  1.  Go to Extensions→Language Manager and click the _Administrator_ submenu link if it isn't selected to view the installed site languages (see Figure 14-4). 

Figure 14-4.  Language Manager: Extra backend site languages — Default Language: German

  1.  Click the radio button next to the language pack you want to assign as the default and click the Default button in the top toolbar. 

Your page will now reload with the German language pack and the Joomla interface will be entirely in German (see Figure 14-5).  The content remains in the original language. 

Figure 14-5.  Language Manager: Extra backend site languages

Naturally, you can set up any languages you prefer using these steps. 

## Assigning a Language Pack to a Single User

Assigning a language to a single user can be done by either the site administrator or the users themselves.  Using our previous example of having the frontend in Slovak and the backend in German, we're going to help one user by giving them everything in English. 

To assign language packs to an individual user:

  1.  Go to Site→User Manager and locate the user you want to edit.  Click on the username to edit their account. 

  2.  In the _Parameters_ box on the right, find the language drop-down menus for both the Backend Language and Frontend Language.  Select English (United Kingdom) in both (see Figure 14-6). 

  3.  Click Save. 

Figure 14-6.  User Manager: Editing Backend Language

Now this single user will have both frontend and backend interfaces in English while the rest of the users will have either German or Slovak. 

### Note

This setting overrides the default setting in the Language Manager. 

To allow individual users to change their own language settings requires setting up a User Details link on the frontend.  This is a process with three big steps:

  1.  Create a new User Menu by going to Menus→Menu Manager and click the New icon in the toolbar.  Enter a menu title and module title you'll remember (we'll call ours User Menu).  If you haven't set up a menu before, see Chapter 7 for how to do this. 

  2.  Go to Menus in the top menu and select the name of your new menu.  Click the New icon in the toolbar to add a Default User Layout menu item (under User in the list of menu item types).  Give it a name like Your Details and click Save.  If you haven't set up a new menu item before, see Chapter 7 for how to do this. 

  3.  Go to Extensions→Module Manager and find the menu module you created in step 1.  Click the Publish icon next to its name to publish the module and click the word Public in the Access Level column to change it to Registered.  Make sure that it's published in a visible module position.  If you're logged in and your menu isn't visible on the frontend of your website, see Chapter 9 for more information. 

That's a lot of details in those three steps, so take your time to get each of them right.  You should now see something similar to Figure 14-7.  We're using the default Milkyway template on the frontend and our menu is in the left column (module position left). 

Figure 14-7.  Menu module in Milkyway after logging in showing User Details link

Once this menu module is set up, Registered users (and higher) can click the link to edit their user details (see Figure 14-8). 

Figure 14-8.  Edit User Details on the frontend

Just like on the Administrator Backend, each user can select his language of preference and then click Save for the changes to take effect. 

### Note

In order for users to be able to set their own language preferences, the Frontend User Parameters option in the Global Configuration→System settings must be set to Show.  Refer to Chapter 4 for details on the Global Configuration. 

# Creating a Language Pack

There will be rare cases when a language you need isn't available, or you might not need an entirely different language, but just want to customize some of the language strings in an existing language pack to your preference.  Both can be accomplished by creating a custom language pack. 

We recommend using the Translation Manager extension to create a new language pack.  Visit the JoomlaCode repositroy at <http://joomlacode.org/gf/project/joomla_1_5_tr1/>, where you can download it for free. 

Click the _Files_ link on the left to see the download link for the latest version. 

Install the Translation Manager extension like any other extension by using the Extension Manager (see Chapter 15 for help with installing extensions).  Go to Components→Translation Manager to see the main screen, shown in Figure 14-9. 

Figure 14-9.  The Translation Manager main screen

Let's take a look at the Translation Manager toolbar options:

View Files

To view the files that accompany a translation package, click the radio button next to the name and click the View Files icon.  From there you can edit individual language files.  This is the same as clicking the number of files in the Files column. 

Default

Click the radio button next to the language name and then the Default icon to make it the default language for this site.  This is the same as assigning a frontend or backend language in the Language Manager. 

Package

Click the radio button next to the language name and then click the Package icon when you're ready to package up the language files for install.  The package tool will create a ZIP and show you a link to download it (see Figure 14-10). 

Figure 14-10.  Language package download link

Delete

Click the radio button next to the language name then click the Delete icon to delete a set of language files.  Joomla will give you a confirmation message to make sure you really want to delete them. 

Edit

Click the radio button next to the language name, and then click the Edit icon to the main XML language settings file.  This is the same as clicking the icon in the XML column next to the language you want to edit. 

New

Click the New icon to create a new set of language files. 

Parameters

The parameters here affect how language files are filtered and processed.  We recommend leaving them at their default settings. 

Now let's go over the basics of creating a new language pack.  Before you start, there are a lot of options for language information you should know:

Language ISO tag

You'll need to know the two parts that make up the language tag.  The first part is the ISO 639-1 or ISO 639-2 code (either two or three letters) from here:

<http://www.loc.gov/standards/iso639-2/php/English_list.php>  
---

The second part is the ISO 3166 code (two capital letters) from here:

<http://www.iso.org/iso/english_country_names_and_code_elements>  
---  
Language Locales

These are specific language codes that include encoding names. 

Windows Code Page

These are character encodings for Microsoft Windows.  See the options here:

<http://msdn.microsoft.com/en-us/goglobal/bb964653.aspx>  
---  
PDF font

The PDF font to be used for this language

Right to Left

Select Yes if this is a right-to-left language. 

To get started with creating a new pack:

  1.  Go to Components→Translation Manager and click the New button in the top toolbar (see Figure 14-11).  If you've done your homework, you can go ahead and enter all the options here, including your contact information. 

  2.  Choose Administrator, Installation, or Site language pack.  We'll select Site for our example. 

  3.  Click Save. 

Figure 14-11.  Translation Manager: Creating a new language pack

Your new language pack will now appear in the Translation Manager but it won't contain any published language files yet.  To start translating language files:

  1.  In the Translation Manager, click the radio button next to the name of your new pack and then click the View Files icon in the top toolbar. 

  2.  Click the file named _[core]_ to edit the core language file. 

  3.  You will now see the language file editor, shown in Figure 14-12.  On the left are the original English language strings and on the right are the translations.  Make your changes and click the Save icon. 

Figure 14-12.  Creating a new [core] language file in the Translation Manager

Each time you make your first change to a language file, it will be saved as a new file in your new language pack.  The Translation Manager will also keep track of how much progress you've made on each file (see Figure 14-13). 

Figure 14-13.  Translation progress of each file

### Note

You can also create all your language files at once by scrolling down to the bottom of your screen and setting the Display# option to All.  Then click the checkbox in the column header so that the checkboxes next to the filenames are all automatically selected at once.  Then just click the Save icon to save all of them and then begin translating each file. 

Now that you've created the language pack for the frontend site language, repeat the same steps just shown for the Administrator and Installation language packs—except choose the other radio buttons when creating the new packs (see Figure 14-11). 

# Other Language Options

Third-party language solutions are not very common because support within Joomla is so powerful, and one free product—Joom!Fish—does just about everything you'd need to set up a multilingual site.  It offers user on the frontend a drop-down menu to choose the language they want their site content to be in.  Naturally, this requires you, the site administrator, to translate all of your articles and other site content into multiple languages. 

## Joom!Fish

Figure 14-14.  Joom!Fish Multilingual Content Manager

Joom!Fish (see Figure 14-14) uses the I18n standard (<http://www.w3.org/International/getting-started/>) for software internationalization and creating truly international websites.  It also is a powerful tool for keeping track of translations of your content.  Joom!Fish was developed by one of Joomla's own core developers, Alex Kempkens, so it has close ties to the Joomla Project. 

Alternately, there has been another multilingual solution on the horizon for some time now called Nooku.  It was created by previous Joomla developer Johan Janssens but, as of this writing, it hasn't yet been released to the general public. 

# Summary

In this chapter, we've covered:

  * The ins and outs of the Language Manager

  * Finding and installing languages

  * Assigning a given language to your website or to specific users

  * Creating your own language pack

  * Using Joom!Fish to support multiple languages

In the next chapter, we'll discuss installing, uninstalling, and upgrading extensions. 

# Chapter 15.  Extension Manager

Being able to extend a content management system is no longer a perk—it's a requirement.  These add-ons in Joomla are called extensions.  In Chapter 2, we discussed that there are five different types of extensions: components, modules, plug-ins, templates, and languages.  Other chapters have discussed the basics of installing extensions in Joomla.  This chapter will take you much more in depth and explain other ways of installing, as well as uninstalling, extensions. 

If you're looking for tips or information on choosing extensions, see Appendix B.

# Installing Extensions

The install tab in Extension Manager gives Administrators and Super Administrators the ability to install extensions.  Extensions come archived in a single file that can be downloaded from JoomlaCode (at <http://www.joomlacode.org>, the code repository for Joomla) or a developer's website. 

Before beginning, we need to make sure that everything is in order.  Navigate to Help→System Info.  Click the Directory Permissions tab.  All of the directories should have a status of Writable.  If any of directories are not writable, you should fix them before attempting to install any extensions. 

As seen in Figure 15-1, there are three methods to installing extensions. 

Figure 15-1.  Extensions Manager: Install

## Upload Package File

This is by far the easiest and most widely used method of installing extensions. 

  1.  Click Browse....

  2.  Find and select your extension's package file on your computer. 

  3.  Click Upload File & Install. 

If all goes well, you'll receive a message stating the installation was successful.  If not, you will receive an error message that hopefully sheds some light as to what went wrong.  See the Troubleshooting tips at the end of this section. 

## Install from Directory

Occasionally, you will need to install from a directory.  We have found that this is typically the case when the extension's package file is large and takes a while to upload and process the file, thus causing server timeouts. 

To use this feature, you will need the ability to upload the contents of the extension package file archive to the server using FTP.  The specific location is up to you; however, you should upload the contents to a folder inside the website's _tmp_ directory. 

Let's walk through an example of how this works.  We'll assume that our extension is a module called _mod_blog_clip_ :

  1.  Create a folder in the website's _tmp_ directory called _mod_blog_clip_. 

  2.  Extract the extension's archive to your desktop. 

  3.  Upload the extracted files via FTP to the _mod_blog_clip_ directory you created in step 1. 

  4.  The Install Directory: field is prepopulated with the path to the _tmp_ directory.  Simply add a slash and then the folder name to the end of the path. 

  5.  Click Install. 

If all goes well, you'll receive a message stating the installation was successful.  If not, you will receive an error message that hopefully sheds some light on what went wrong.  See the Troubleshooting tips at the end of this section. 

## Install from URL

To install from a URL, give the installer the URL to the extension's package file and click Install.  Joomla will retrieve the extension's package file from the remote server and process it as if it was being uploaded and installed from your desktop. 

If all goes well, you'll receive a message stating the installation was successful.  If not, you will receive an error message that hopefully sheds some light as to what went wrong.  See the Troubleshooting tips at the end of this section. 

### Warning

We may be paranoid, but we prefer to download and install package files ourselves, opting not to install from a URL.  By installing from a URL, you're placing a certain amount of trust in the website you are installing from.  If you download the package file first, you have the opportunity to examine it.  For that reason, we don't recommend this method of installation. 

## Troubleshooting

From time to time, there are a few issues that arise when installing extensions.  Although this list is not all-inclusive, it covers some of the most common issues:

Directory Permissions

Ensure that the proper directories are writable. 

Navigate to Help→System Info.  Click the Directory Permissions tab.  All of the directories should have a status of Writable. 

Error!  Could not find an XML setup file in the package

Check the extension's package file.  It's either missing the XML file or the archive needs to be extracted in order to get to the actual package file.  Sometimes developers will archive the extension along with documentation or other extensions such as modules and plug-ins. 

### Note

A little known trick that sometimes resolves this error is to unarchive the ZIP file (or whatever format the developer uses) and re-ZIP it.  It seems that some ZIP files are "friendlier" than others. 

Browser times out or you have a really slow Internet connection

Try using the Install from Directory installation option. 

# Uninstalling Extensions

Uninstalling extensions is not difficult.  Figure 15-2 shows the Components tab within the Extension Manager. 

Figure 15-2.  Extensions Manager: Components

You'll notice that the first four items are black, while the rest are grayed out.  When extensions are grayed out, it means that they are a core extension and they can't be uninstalled.  If you wish to disable a particular core extension, click the green checkmark next to its name. 

The column in the far right is the Compatibility column, which displays whether or not an extension runs natively in Joomla 1.5 or requires _legacy mode_.  It's preferable to use extensions that run natively to receive the full benefits of Joomla 1.5.  If an extension is not compatible with Joomla 1.5 or requires the legacy layer, it would have an X instead of a checkmark. 

# Upgrading Extensions

We wish we could tell you one simple way to upgrade your extensions in Joomla, but we can't.  When developers release new versions of their extensions, the complexity of the changes varies dramatically.  They may have only updated a few files, so just overwriting the old files with the new ones would be sufficient to update.  But it becomes more complex when there are changes to the extension's database tables.  Simply overwriting the files usually won't work.  Some smart developers take this into consideration and add checks to their code to automatically upgrade the database tables if it notices the code has been upgraded. 

The bottom line is when upgrading an extension, you need to look at the process of that specific extension and determine what you need to do on a case-by-case basis.  Typically, developers will document the steps needed to upgrade their extension from a previous version.  Other times, there's no documentation and you are left to guess. 

### Note

If you uninstall and reinstall an extension, there's a risk of losing data in the extension's database tables.  Some extensions think that when you uninstall, it's forever and not just for an upgrade.  Some extensions allow you to install on top of the existing version and it will automatically upgrade it.  Carefully consult the upgrade procedures of each extension and perform a backup before you change anything. 

# Summary

In this chapter, we've covered:

  * Various ways to install extensions

  * How to uninstall extensions

  * How to upgrade extensions

In the next chapter, we'll discuss some tools that Joomla provides to make maintaining your website much easier. 

# Chapter 16.  Tools

The Tools menu contains a set of tools that aid in maintaining a healthy website.  Even though they may be seldom used, they serve an important purpose when needed. 

# Global Check-in

When an article is edited, Joomla will lock it so that multiple users can't edit it at the same time.  The article (this also applies to components, sections, categories, and menu items) is unlocked when you click the Save or Close buttons in the toolbar when editing.  When you close the browser without clicking Save or Close, your session expires, or you just navigate away from an open article, you never unlock it.  When this happens, no one else can edit it.  This is actually a great feature and prevents website administrators from "content conflict."  However, we're all human and sometimes we forget to close an article properly. 

When items are being edited, the checkboxes next to the item names are replaced with a small padlock.  If you hover over the padlock as in Figure 16-1, a popup will appear telling you who opened the item and when. 

Figure 16-1.  Checked-out article in Article Manager

There are two ways to unlock a locked item:

  * Have the person who has it locked edit the item and click Close. 

  * Use Global Check-in. 

To use the Global Check-in feature, click Tools→Global Check-in.  Looking at Figure 16-2, you'll see that Global Check-in not only checks in articles but many other types of items as well. 

Figure 16-2.  Global Check-in

### Warning

If you want to edit an item that is locked and checked-out, pay special attention to the time.  If you see that it was checked out recently, it might be a good idea to make sure the person who checked it out is not still editing it.  If you use Global Check-in and then make edits to an item while someone else is also editing it, the second person to save the item will overwrite the first person's edits. 

# Clean Cache

The term _cache_ (pronounced like the word "cash") might be a fairly common word, but not everyone knows exactly what it is.  Essentially, it's a space where items can be quickly stored and reused in order to save resources and time. 

Each time you view a page on your website, Joomla does a lot of work to build each piece of the page, and then puts them together like pieces of a jigsaw puzzle.  When the page is complete, the web server sends the rendered code back to your browser where you actually view the page. 

When caching is turned on, the individual puzzle pieces are saved to files after they are built.  The next time someone needs that puzzle piece, Joomla will get it from the file instead of working to build it again.  After a set period of time, that puzzle piece will expire and Joomla will build a new puzzle piece and place it into cache.  Typically, cache refresh happens every 15 minutes.  Cache settings can be found in Global Configuration to specify the amount of time to cache these puzzle pieces. 

On smaller sites, caching serves little purpose.  On large sites, caching is vital to minimize server load time, which, in turn, greatly improves your site's performance. 

To access the Cache Manager, click Tools→Clean Cache.  Figure 16-3 shows the Cache Manager with a few cached items.  To clear them, check the ones you want to delete and then click Delete. 

Figure 16-3.  Cache Manager–Clean Cache Admin

Clearing the site's cache may need to be done if you have made substantial changes to your website and they aren't appearing on the frontend. 

# Purge Expired Cache

When the cache refreshes, the old cache files are not removed.  To purge expired cache, simply click Tools→Purge Expired Cache.  You should see a screen such as the one in Figure 16-4. 

### Warning

Pay close attention to the warning listed in Figure 16-4.  If you have a large number of expired cache items, consider performing this action during a time of day with lower traffic. 

Once you have read the warning message and are ready to proceed, click the "Purge expired" button in the top toolbar. 

Figure 16-4.  Purge Expired Cache

Figure 16-5 shows the Cache Manager screen after the expired cache has been purged.  Depending on site traffic, you should notice most or all the cache files are now purged. 

Figure 16-5.  Cache Manager–Clean Cache Admin after expired cache is purged

# Read/Write Private Messages

With the advent of instant messaging, this feature becomes less relevant.  With the Private Messaging component, you can send private messages to other users with access to the backend of your Joomla site. 

The best way to demonstrate how this component works is to send a private message to someone and then read the private message from the other account.  Let's start by writing a private message. 

## Write Private Messages

We're going to suppose that user "kenneth" has asked user "admin" to create a user account for someone.  There are two ways to get to our starting point—the Write Private Message screen, shown in Figure 16-6:

  * Click Tools→Write Message. 

  * Click New in the toolbar from the Private Messaging screen. 

Figure 16-6.  Write Private Message screen

The Write Private Message screen has three fields:

To:

This drop-down list contains the usernames of all Managers, Administrators, and Super Administrators.  These are the only user types that have access to the backend, so they are the only ones who can receive private messages. 

Subject:

Give your private message a good subject. 

Message:

Use this text area to write the body of your private message. 

When you are done writing your message, click _Send_. 

## Read Private Messages

The mail icon in the upper-right corner tells you how many unread private messages you have.  Figure 16-7 shows one unread message in this particular user's inbox.  Naturally, once the message is read, the number will change to 0. 

Figure 16-7.  Private Messaging: Unread message count

To read the message, you can either click the small envelope icon shown in Figure 16-7 or you can go to Tools→Read Messages. 

From the Private Messaging screen (see Figure 16-8), you can see message details similar to an email inbox.  The red X in the Read column signifies that the message has not been read.  Once read, that image will change to a green checkmark. 

Figure 16-8.  Private Messaging screen

To view your message, click the subject text.  Our sample private message is shown in Figure 16-9. 

Figure 16-9.  View Private Message screen

## Private Messaging Configuration

You may have noticed the Settings icon on the toolbar in Figure 16-8.  This takes you to the Private Messaging Configuration screen shown in Figure 16-10. 

Figure 16-10.  Private Messaging Configuration screen

These configuration options pertain to your account only and are not shared by other users:

Lock inbox:

If your inbox is locked, no one can send you private messages. 

Mail me on new Message:

When you receive a new message, you will be notified via email.  The email will not contain the message itself. 

Auto Purge Messages:

After a specified number of days, private messages will be deleted from your inbox. 

### Warning

Even if a message is unread, it will still be deleted when it is the specified number of days old. 

If you use Private Messaging, consider increasing the Auto Purge Messages number. 

Once you have made your changes, make sure you click Save. 

# Mass Mail

Mass Mail is a component that allows you to email users who are registered on your website.  You can choose to email everyone or just a select group of individuals.  This component works fine for smaller websites, but we wouldn't recommend it for large sites. 

### Note

You should check with your host to see if they throttle the number of emails per hour you're allowed to send out before you're red-flagged as a potential spammer.  The Mass Mail component has no throttling like newsletter components, so use it with care if you're sending out a lot of emails. 

The Mass Mail interface is pretty straightforward.  Access Mass Mail by going to Tools→Mass Mail.  The Mass Mail interface only has a few options as shown in Figure 16-11. 

Figure 16-11.  Mass Mail interface

Mail to Child Groups:

If checked, all children of the selected group will be included in the email. 

For example, if you selected the group Author and checked the "Mail to Child Groups" checkbox, Editors and Publishers would also receive the email. 

Send in HTML mode:

If checked, the message will be sent in HTML mode.  This is useful if you wish to enter HTML in the message text area. 

Group:

Select the user groups you wish to send this email to. 

Recipients as BCC.  Adds copy to site email:

User email addresses will be added to the blind carbon copy (BBC) field of the email.  This prevents users from seeing the other email addresses the message was sent to. 

Subject:

You must enter an email subject. 

Message:

Enter your message in this text area.  If you selected Send in HTML mode, you can use HTML here. 

When you are satisfied with your message, click the Send mail icon. 

There are also a few parameters accessible from the Parameters icon in the toolbar.  Clicking the icon will bring up the parameters as shown in Figure 16-12. 

Figure 16-12.  Mass Mail parameters

Subject Prefix

You can assign a default prefix to use on the subject of all outgoing emails.  You might want to add your site name as the Subject Prefix to help users recognize your email as being a valid email. 

Mailbody Suffix

The text entered in this area is appended to the end of every email that Mass Mail sends out.  You might want to use this as a footer. 

After the parameters are set and your message is written, click _Send mail_ to send the email out to your users. 

# System Info

System Info provides an overview of certain Joomla and server settings.  The tabs in System Info are especially important when troubleshooting problems with your Joomla site:

System Info

This tab contains basic information about your server and the installed applications needed to run with Joomla. 

PHP Settings

This tab contains PHP settings set by your server administrator that can affect the stability or performance of your website. 

Configuration File

This tab contains the contents of your website's _configuration.php_ file.  Most of these settings can be changed from within the Global Configuration. 

Directory Permissions

This tab contains directory permission information vital for proper operation of your website.  Every row in the status column should say _Writable_ in green letters.  If a directory is not writable, you will see Unwritable in red letters.  To correct this, you'll need to change the permissions on those folders or contact your hosting provider for assistance. 

PHP Information

This tab gives you an overview of your server's PHP settings. 

# Summary

In this chapter, we've covered:

  * Global Check-in and how to use it

  * Cache and how to clear it

  * Reading and writing private messages

  * Using Mass Mail to email all or a select group of users

  * System Info and the information is gives you

In the next chapter, we'll discuss how to convert an existing website or graphical design to Joomla. 

# Chapter 17.  Hands-on: Converting a Site to Joomla

This chapter will walk you through the process of converting an existing site to Joomla.  We are going to assume you have a basic knowledge of HTML and CSS, and you've already read Chapter 11, which explains the basics of how templates work. 

If you don't already have an existing site to convert, you might consider using one of the default Joomla templates as a starting point or even creating your own from scratch. 

# Designing Your Website

We build websites by starting with an overall page design in Adobe Photoshop or Adobe Fireworks—the most common tools for designing a website.  Once a "look and feel" is established and we're happy with everything else, that file gets converted to HTML.  Depending on your layout and design, the conversion process varies greatly in order to optimize your site for the Internet.  This book isn't about that conversion process.  If you're not comfortable with slicing up a Photoshop file, there are a number of online services that will do it for a nominal fee. 

# Finding Zones in Your Design

We're going to assume you already have HTML pages that you're ready to convert to Joomla—either from your own design or from an existing website.  For this walkthrough, we'll use our mock website, JoomlaPetCenter.com (see Figure 17-1). 

Figure 17-1.  The Joomla Pet Center home page

It looks like a pretty typical website with a main menu across the top of the page under the page header and a secondary menu on the left side.  Under the secondary menu is a login box.  The welcome message "Welcome to the Joomla Pet Center!"  is in the main area of the page and below it is the footer across the bottom. 

In order to start thinking like Joomla, break down your page structure into "zones."  These zones are areas that separate your content into blocks. 

We've highlighted the following zones on the home page:

  * Header: The top area of the page, usually containing a logo, the site name, or other decorative elements. 

  * Top Main Menu: Websites usually have either a horizontal navigation bar across the top, a vertical navigation bar on the left column, or a combination of both. 

  * Left Secondary Menu: For this site, these are additional items that don't fit in the top main menu, but on other sites it may show submenu items contained in one of the site sections. 

  * Login Box: This is where the user logs in to the site, possibly to access special content. 

  * Main Content Area: This is where the majority of your site content will appear as the user navigates around the site. 

  * Footer: This is the bottom portion of the page that may contain links or copyright information. 

Identifying these parts of the page creates a blueprint for our site.  The rest of our site pages will follow the same basic structure, so we're ready to move on to the next step. 

# Preparing the HTML and CSS

Now that we've determined the structure of our pages, let's take a look at the structure itself, shown in Figure 17-2. 

Figure 17-2.  Joomla Pet Center home page zones

There are plenty of philosophies on how you'd code a page in HTML and this isn't the right book to explain that.  However, it's always a good practice to use CSS and separate your page structure markup from your presentation markup.  Using our previous structure, we start by creating a simple PHP file containing a DIV for each zone, which might look like:

    <html>
    <head>My test page</head>
    <body>
    <div id="container">
        <div id="header">This is where my header will go</div>
        <div id="main-menu">This is where my main menu will go</div>
        <div id="content-area">This is where my content area will go</div>
        <div id="second-menu">This is where my secondary menu will go</div>
        <div id="login">This is where my login box will go</div>
        <div id="footer">This is where my footer will go</div>
    </div>
    </body>
    </html>

There's an outer DIV "container" added there to enclose all of the zones marked by their own DIVs.  Now, create a stylesheet (often named _template.css_ ) and add styles for each of those DIVs.  For example:

    #container {width: 900px;]
    #main-menu (width: 200px;}
    #content-area {width:700px;}
    #login {width 200px;}

While this CSS code is only the beginning of your design, it defines the widths of the DIVs to match the zones we highlighted earlier.  The two zones in the left column (main-menu and login) are set to display with a width of 200 pixels and the content-area at 700 pixels, which matches the overall width dimension of the container.  Adding images and font definitions will further refine the look, so let your imagination run with your designs. 

If you've paid for someone to convert your design or have done the conversion yourself, you don't have to worry about these things.  Just set up your folder structure as explained below. 

Create a folder for your new template and another folder inside it for the CSS file and another for images.  Add these two files to it so it looks Figure 17-3. 

Figure 17-3.  The first building blocks of a Joomla template

The extra _index.html_ files are blank and put in just to prevent nosey users from viewing the folder contents if they type in the direct URL. 

Once you've got your template folder set up, it's time to dive deeper as we walk you through the building process. 

# Hands-on Walkthrough

You should have two key files at this point: an _index.php_ file containing your basic page structure in HTML and a _template.css_ file containing CSS styles to make your page look good.  You should have them in the basic template folder structure from the previous step.  Also, if you have any images, they should be in the _images_ folder. 

## Insert the Joomla Tags

The Joomla tags are what brings your content from the database and renders it on the pages in HTML.  Let's add the tags to see how this works. 

The first thing to do is add the standard header code to _index.php_ :

    <? php
    defined( '_JEXEC' ) or die( 'Restricted access' );
    JHTML::_('behavior.mootools');
    ? >

This does two things.  It prevents users from accessing this file in an inappropriate manner and it loads the Mootools JavaScript library (<http://www.mootools.net>).  If you don't want to use the Mootools library, you can leave that line out. 

Next, add the DOCTYPE information.  Nowadays, most sites will use the XHTML 1.0 Transitional type.  See the W3 Consortium for more information on other types (<http://www.w3.org/QA/2002/04/valid-dtd-list.html>). 

    <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; 
    ? >" lang="<?php echo $this->language; ? >" dir="<?php echo $this->direction; ? >" >

The HTML tag following the DOCTYPE automatically sets the language and language direction. 

Now, add the _JDOC_ (Joomla Document) tag for the header between the _< head>_</head> tags (which adds all the relevant header information) and a dynamic link to your CSS stylesheet:

    <head>
    <jdoc:include type="head" />
        <link rel="stylesheet" href="<?php echo $this->baseurl ? >/templates/<?php echo 
    $this->template ? >/css/template.css" type="text/css" />
    </head>

Remember how we determined our zone locations and what each was for?  In Chapter 9, we discussed the types of modules that are built-in, and among them are the Menu Module and Login Module.  We'll add those module positions into the template to make them appear on our page:

    <body>
    <div id="container">
        <div id="header">My Company, Inc.</div>
        <div id="main-menu">
              **<jdoc:include type="modules" name="main-menu" style="none" />**
        </div>
        <div id="content-area">
              <jdoc:include type="message" />
              <jdoc:include type="component" />
        </div>
        <div id="second-menu">
              **<jdoc:include type="modules" name="second-menu " style="none" />**
        </div>
        <div id="login">
              **<jdoc:include type="modules" name="login" style="none" />**
        </div>

You'll notice the two tags that aren't modules called _message_ and _component_.  The JDOC statement for messages will show errors and other special messages.  The JDOC component statement will be where your content and all component output appears. 

We'll follow those up with our footer and closing tags:

        <div id="footer">
              &copy;<?php echo date("Y"); ? > <? php echo $mainframe->getCfg('sitename'); ? >
        </div>
    </div>
    </body>
    </html>

The date tag calls the date from the server clock and displays the year.  The mainframe tag retrieves the name of your site from your site configuration (see Chapter 4 for Global Configuration options and how to change this). 

Your final template file should look something like this:

    <? php
    defined( '_JEXEC' ) or die( 'Restricted access' );
    JHTML::_('behavior.mootools');
    ? >
    <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; 
    ? >" lang="<?php echo $this->language; ? >" dir="<?php echo $this->direction; ? >" >

    <head>
    <jdoc:include type="head" />
        <link rel="stylesheet" href="<?php echo $this->baseurl ? >/templates/<?php echo 
    $this->template ? >/css/template.css" type="text/css" />
    </head>

    <body>
    <div id="container">
        <div id="header">This is where my header will go</div>
        <div id="main-menu">
              <jdoc:include type="modules" name="main-menu" style="none" />
        </div>
        <div id="content-area">
              <jdoc:include type="message" />
              <jdoc:include type="component" />
        </div>
        <div id="second-menu">
              <jdoc:include type="modules" name="second-menu " style="none" />
        </div>
        <div id="login">
              <jdoc:include type="modules" name="login" style="none" />
        </div>
        <div id="footer">
              &copy;<?php echo date("Y"); ? > <? php echo $mainframe->getCfg('sitename'); ? >
        </div>
    </div>
    </body>
    </html>

Naturally, every website is different, but the basic elements should be there.  That's it for the main template file.  Save this in your template folder and make sure it's named _index.php_. 

## Set Up the Template XML File

The _template.xml_ file contains information about your template, what files to install, where to install them, and what module positions to create.  You can either use one of the existing _template.xml_ files from your Joomla installation as a starting point, or you can create your own in a text editor.  If you're not familiar with XML (eXtensible Markup Language), you can find more information at <http://www.w3.org/XML>. 

Let's start off by adding the header information:

    <? xml version="1.0" encoding="utf-8"? >
    <! DOCTYPE install PUBLIC "-//Joomla!  1.5//DTD template 1.0//EN"
    "http://dev.joomla.org/xml/1.5/template-install.dtd">
    <install version="1.5" type="template">
        <name>yourtemplate</name>
        <creationDate>12/15/09</creationDate>
        <author>Your name</author>
        <authorEmail>you@youremail.com</authorEmail>
        <authorUrl>http://www.yourwebsite.com</authorUrl>
        <copyright></copyright>
        <license>GPL</license>
        <version>1.0</version>
        <description>Your description goes here.</description>

The first line defines this document as an XML document and the second line defines how Joomla should treat this document using a DTD.  You don't need to worry about this since the Joomla team has done that part of the work for you. 

### Note

The DTD will change for Joomla 1.6, so you will need to change the version number in both the DOCTYPE and _< install>_ tags to be compatible. 

The information tags about you follow.  The name of your template, the date, version number, and your name will all show up on the Template Manager after installation.  You can enter other information as you see fit. 

The next thing we need to do is tell the Joomla installer what files are in our template folder and where to install them.  Since we want our CSS files in a _css_ folder and we want our images in an _images_ folder, we'll start with the _< files>_ tag and list each file individually.  If the file is in the template folder (like the _template_thumbnail.png_ ), you don't need a path.  But if the file is in a folder, you need to include the path:

        <files>
              <filename>index.php</filename>
              <filename>index.html</filename>
              <filename>templateDetails.xml</filename>
              <filename>template_thumbnail.png</filename>
              <filename>images/index.html</filename>
              <filename>images/background.png</filename>
              <filename>images/header.png</filename>
              <filename>images/logo.png</filename>
              <filename>css/index.html</filename>
              <filename>css/template.css</filename>
        </files>

We've added a few images in there to represent ones you might have.  Notice the opening and closing tags for both _< filename>_ and _< files>_. 

Next, we're going to create our module positions.  We may not know all the modules we'll need in the future, but that's fine.  Add each position and enclose it in the _< position></position>_ tags.  These are the modules from the zones we created earlier:

        <positions>
              <position>main-menu</position>
              <position>second-menu</position>
              <position>login</position>
        </positions>

Make sure to finish up your XML file with the closing tag:

    </install>

Save your XML file with all of this code.  Congratulations!  You've just created your first Joomla template.  Now let's install it and test your handiwork. 

## Uploading Your Template

Your template folder should be fairly complete by now and probably looks something like Figure 17-4. 

Figure 17-4.  Sample template folder contents

In order for the Template Manager to recognize your new template, it needs to be uploaded or installed into the _templates_ directory.  To upload it, you can use FTP (see Appendix B for information on how to FTP your site files) or you can zip your template folder and use the Extension Manager installer. 

  1.  Go to Extensions→Install/Uninstall. 

  2.  Click the Choose File button and navigate your computer to locate the template archive file. 

  3.  Click the Upload File & Install button. 

All that remains is to assign your template to make it active.  See Chapter 11 if you need help doing this in the Template Manager. 

# Summary

In this chapter, we've covered:

  * Finding zones on your existing website or graphical design

  * Step-by-step instructions to build your Joomla template from the ground up

  * How to correctly write your template's XML file

  * Installing your template

In the next chapter, we'll cover a few dynamic solutions and some powerful ways to extend Joomla and add features. 

# Chapter 18.  Extending Your Site: Recommended Solutions

It is time to introduce you to Helen.  Helen is a pet owner and also the owner of a small pet store.  Like most small businesses, her marketing budget does not leave room to hire an outside agency to build her a full-featured website with all of the bells and whistles; however, using Joomla, Helen is able to build and maintain her site with ease and within budget. 

The following sections contain common problems users frequently solve with Joomla, and describe which extension we feel is the best solution for each particular problem.  We have debated and weighed the pros and cons of each solution in order to provide you with the best extensions for each particular problem.  We even found ourselves excluding extensions that we love for fear of overwhelming novice Joomla users with complex extensions. 

At the end of each section, we also will mention other extensions that could be used to solve the particular problem. 

# E-Commerce: Set Up a Simple Online Storefront Using VirtueMart

  * Extension: VirtueMart

  * Website: <http://www.virtuemart.net>

  * Cost: Free

  * License: GNU/GPL

  * Minimum requirements: Joomla 1.0 or 1.5, PHP 4.2+, MySQL 3.23+

When it comes to e-commerce solutions, you don't need to look any further than VirtueMart to set up an online shop and shopping cart.  Whether you want to sell your goods domestically or internationally, you're covered.  It would be impossible to explain every feature VirtueMart has to offer without writing a separate full-length book, so we'll touch on some of the key features to get you up and running. 

VirtueMart enables you, the website owner, to easily and quickly build an online store or product catalog.  The number of VirtueMart features is extensive so this list isn't exhaustive, but only highlights some of the major areas:

  * Product listings. 

  * Accept payments from all of the major credit card companies and process payments through any major payment gateway. 

  * Assign products to multiple categories. 

  * Ratings/review system. 

  * Show related products. 

  * Full look-and-feel customization. 

  * Inventory control. 

  * Shopper groups allow you to give automatic discounts to groups of buyers. 

  * Order management. 

  * Invoicing. 

  * Auto-notify buyer when order status changes. 

  * Reports. 

  * Assign different tax rates based on country and state. 

  * Multiple shippers. 

  * Shipping rates based on country, zip code, weight, etc.  You can also use shipping modules to autocalculate the total from USPS, UPS, FexEd, and so on, based on product size and weight. 

  * Coupons. 

There are numerous settings—the default settings are perfectly fine for most websites—but if you want to customize a particular aspect, chances are there's a setting for it. 

After installing VirtueMart, you will be given the option of installing sample data into your shopping cart.  Novice users will find it easier to begin building their online store with sample data installed since it gives them a launching point to build and learn from.  After you become more familiar with VirtueMart, you might want to start with a fresh installation without the sample data. 

## Store Frontend

Helen, the owner of our fictitious pet store, has set up VirtueMart on her website, www.joomlapetcenter.com.  When a user clicks the Shop Online menu item, they are taken to the shopping cart's main category page as shown in Figure 18-1.  A real pet store might sell products for many types of animals, but we'll just stick with dogs and cats. 

Figure 18-1.  VirtueMart: Main category page

The optional Store Description at the top is followed by your published product categories.  Users then click on the Category they wish to browse.  Categories may contain products for sale, more categories, or both.  If a user clicks on Dogs, she would see the Category Browse page for the Dogs category, as shown in Figure 18-2. 

Figure 18-2.  VirtueMart: Category Browse page

  * The Category has a description that is shown just under the Dogs title. 

  * The default product sorting is by Product Name, however this is configurable in the backend of the VirtueMart Component. 

  * We only have two items in our Dogs category.  Notice that the Dog Bowl doesn't have an "Add to Cart" button, but Dog Leash does.  The reason is in order to add the Dog Bowl to your shopping cart, you must select a color.  We'll go over the Product Details page next. 

  * The price is listed under each product's image.  Prices can be listed with tax included or not included. 

  * At the bottom, there's a rating system that shows how previous customers rate this particular product. 

To view the Product Detail page, you can click on the Product Name, image, or the [Product Details...] link. 

Figure 18-3") shows us the Product Detail page for our Dog Bowl. 

### Note

The Product Detail page is sometimes also referred as the "flypage." 

Figure 18-3.  VirtueMart: Product Details page (aka "flypage")

VirtueMart includes a few prepackaged templates for these pages.  It's flexible enough for you to create your own easily with minimal programming experience, but for most people, the default flypage does all you need. 

The middle part of Figure 18-3") shows the options available when ordering this product.  In our case, the user must choose the color in order to purchase the item.  You can have as many options here as you need.  You also have the ability to change the price depending on the option chosen, as shown in Figure 18-4.  In this example, we are adding $2.17 (plus tax) to the price if they choose to purchase an extra large bowl. 

Figure 18-4.  VirtueMart: Product options can affect price

Once a user clicks "Add to Cart," the product is added to their shopping cart.  At that point, the user can either keep shopping or proceed to Checkout. 

At the bottom of the Product Details page shown in Figure 18-3"), you can see the built-in customer rating and review system.  This feature allows visitors to rate and comment on products in your online store.  This setting, like almost all others, can be turned on or off.  When a review is submitted, you are able to review it before making it live to help prevent spam or unwanted comments. 

VirtueMart comes with a lot of other extensions that can be used in conjunction with itself, but these extensions need to be installed separately.  The _Cart_ module is the only one that is required for a good user experience; however, it is worth looking at the others as they have specific uses if needed. 

## Administrator Backend

Now that you know what you can do on the front-end of the site, let's take a look at the backend.  There are a lot of details in VirtueMart's Control Panel, so we'll hit the high points. 

Figure 18-5 shows VirtueMart's Control Panel.  The right side contains links to commonly performed tasks.  The menu on the left side acts like an accordion.  If you click on one of the menu items, it will expand, displaying submenu items.  Assuming you have VirtueMart installed and have your sample data loaded, the best way to get a feel for the interface is to click around, change things, and then see how it affects the frontend. 

## Creating a Product Category

As with articles in Joomla, you organize your VirtueMart products in categories.  Helen will start by organizing her pet products by animal type and start with a Dogs category.  To create a new product category:

  1.  Go to Components→VirtueMart. 

  2.  In the Control Panel, click Category Tree, as shown in Figure 18-5. 

Figure 18-5.  VirtueMart: Control Panel

  1.  In the toolbar, click New. 

  2.  On the Category Information screen (see Figure 18-6), enter the appropriate information.  Helen creates the Dogs category as shown earlier in Figures 18-1 and 18-2. 

### Note

As a general rule, if you're unsure about what an option does, just leave the default setting. 

  1.  Click the Images tab as shown in Figure 18-7. 

  2.  In the Images tab, click Browse under Full Image. 

  3.  Find and select an image to upload. 

  4.  Select the radio button for Auto-Create Thumbnail?. 

### Note

If you want to upload a different thumbnail than the full image, you can upload your own image. 

  1.  Click Save. 

Figure 18-6.  VirtueMart–Add a Category–Category Information

Figure 18-7.  VirtueMart: Add a Category–Images

Now that we have a product category, we should put a product in it.  Let's take a look at how Helen would add a dog bowl to our new Dogs category. 

## Adding a Product

Helen is convinced her dog bowls are going to be a big seller, so she'll make that her first product.  To add a new product to her VirtueMart store:

  1.  Go to Components→VirtueMart. 

  2.  In the Control Panel, click Product List, as shown earlier in Figure 18-5. 

  3.  In the toolbar, click New.  You should see the New Product screen shown in Figure 18-8. 

  4.  Fill out the SKU with the appropriate information. 

### Note

SKU stands for Stock Keeping Unit and is a unique number to identify products.  You can set up your own system or use another vendor's. 

Figure 18-8.  VirtueMart: New Product–Product Information

  1.  Enter the Name as you would like it displayed to your customer.  Helen will enter Dog Bowl. 

  2.  Select one or more Categories that you want the content item to appear in.  Helen will choose the Dogs category created in the previous section. 

  3.  Enter a Product Price (Net).  You will notice that Product Price (Gross) is automatically filled out for you. 

  4.  Enter a Product Description to explain your product to your customer.  This is seen on the product page.  You can use the Short Description field to enter a short description that will display on the category page. 

  5.  Click the Product Status tab. 

  6.  Enter the number of items that you have In Stock.  If you have chosen not to have VirtueMart handle inventory, leave this field blank. 

  7.  If you wish to have options such as size or color, enter them in the Attribute List within this tab. 

  8.  If you plan on shipping your product or having your shipping amount calculated, you will want to make sure that you fill out the fields in the "Product Dimensions and Weight" tab. 

  9.  Upload a product image in the Product Images tab.  It works just like the Images tab in Figure 18-7 except the image uploaded is for the product and not the category. 

  10.  If you want to show related products with this item, those items can be chosen in the Related Items tab. 

  11.  When you are finished setting options, click Save. 

Helen has just added her first product.  The new product should look something like Figure 18-3"), shown earlier. 

VirtueMart is top-notch when it comes to integrating e-commerce into Joomla.  It's a powerful and flexible component. 

## Other Extension Options

If you find that this extension doesn't suit your particular needs, we suggest you see SimpleCaddy. 

# Blog: Blogging Functionality Built In

  * Extension: N/A (built into Joomla)

  * Cost: Free

  * License: GNU/GPL

Of all of the extensions we're spotlighting here, this is the only one that's actually built into Joomla.  In recent years, blogging has only increased exponentially and blogs even sometimes blur the lines of what we've come to understand as writing a "web log." 

There are one or two extensions out there that add blogging functionality to Joomla, but we feel they're not worth the cost since you can blog in Joomla without them.  Joomla has three menu types that will facilitate this functionality:

Category Blog Layout

This menu type displays the intro text of articles that are in a given category. 

Section Blog Layout

This menu type displays the intro text of articles that are in a given section. 

Front Page Blog Layout

This menu type displays the intro text of articles that have been flagged to show on the front page. 

Most often, you would choose to use the Category Blog Layout menu type. 

By default, the articles will display the most recent article first.  This is how blogs are typically ordered.  The only settings we feel you should consider changing are the numbers in the Parameters (Basic) section:

#Leading: **0**

This would show X number of full articles at full-page width.  We prefer not to show full articles on this page since they can be very long.  Setting this to 0 just tells Joomla to disable this feature. 

#Intro: **5**

Depending on your site, 5–10 usually works best.  This tells Joomla how many articles to show on each page.  Only the intro text (everything above the Read more... divider) will show. 

Columns: **1**

If you want your articles to be shown in columns, set this to 2 or 3.  Be forewarned, if you have anything with a fixed width (e.g., an image or tables) in your intro text, this could push out or break templates having narrow columns. 

#Links: **5**

After your intro text is shown, this tells Joomla how many links to previous posts to show.  Users will still be able to navigate to much older blog posts, so field does not signify how many blog posts they can go back to view, but rather how many links they see at the bottom of each screen. 

The downside to this way of blogging in Joomla is that you don't have access to certain bells and whistles, such as tagging or trackbacks.  Some may consider those items important, but if you want to blog and won't miss those extras, we think Joomla works great. 

# Calendaring/Event Management: Manage and Share Online Calendars with JCal Pro

  * Extension: JCal Pro

  * Website: <http://dev.anything-digital.com>

  * Cost: $29 USD

  * License: GNU/GPL

  * Minimum requirements: Joomla 1.5.7, PHP 5.2+, MySQL 4.1+

Helen travels to dog shows and other pet events all year.  She needs a way to keep track of those events, as well as let her site visitors know about them.  The best way is to add a calendar to her site and for this we recommend using JCal Pro.  Once you've installed the extension, we'll start off by creating your first calendar. 

### Note

After you install JCal Pro and before you begin, it's important to set your time zone settings.  Go to Components→JCal Pro→Settings from the top menu.  In the Environment tab, configure the time zone to match your server time zone and the time zone setting in the Joomla Global Configuration. 

## Creating a Calendar

In JCal Pro, you can have a virtually unlimited number of calendars.  We're going to create a single calendar for the entire site, but each user could have her own private calendar.  To create a new calendar:

  1.  Go to Components→JCal Pro→Manage Calendars and click the New button in the top toolbar. 

  2.  Enter a name and description for your calendar (see Figure 18-9). 

Figure 18-9.  JCal Pro: Create a calendar

  1.  Choose the level of access for your calendar.  Helen chose Public, but you might want something else.  Refer to Chapter 12 for more information on access levels in Joomla. 

  2.  Make sure the Published checkbox is selected. 

  3.  Click Save. 

Though you've successfully created your first calendar, it won't be of much use until we create some categories and events, and it won't even be visible until we create a menu item. 

## Creating a Calendar Menu Item

In order to make Helen's calendar visible to her site users, we'll need to create a menu item link to it. 

  1.  Go to Menus in the top menu and select the menu where you want the link to be. 

  2.  Select New in the top toolbar to create a new menu item. 

  3.  From the list of menu item types, choose JCal Pro and then Calendar as the type. 

  4.  Helen wants her link to say "Calendar," so she enters that in the Title field (see Figure 18-10).  Since this is the only calendar on her site, she'll leave the default parameters as they are and click Save. 

Figure 18-10.  JCal Pro: Create a calendar menu item

If you switch to the frontend of your site, you should now see your new menu item called Calendar or whatever name you chose.  Clicking on this link will display your calendar (Figure 18-11). 

Figure 18-11.  JCal Pro: Default calendar on the site frontend

Since our calendar is empty, let's move on to creating some categories and events. 

## Creating Event Categories

Calendar categories allow you customize which events are shown to your users.  Helen now wants to create a category for dog shows and one for pet care reminders.  To create a calendar category:

  1.  Go to Components→JCal Pro→Manage Categories and click the New button in the top toolbar. 

  2.  Enter a name and description for your calendar (see Figure 18-12).  You can choose a color to make it easier for site visitors to see which category an event is in. 

Figure 18-12.  JCal Pro: Manage Categories

  1.  Choose the level of access for your category.  Helen chose Public, but you might want something else.  Refer to Chapter 12 for more information on access levels in Joomla. 

  2.  Make sure the Published checkbox is selected. 

  3.  Click Save. 

Go ahead and create as many categories as you need using these steps and then we'll move on to adding an event. 

## Adding an Event

Helen is going to share a new local movie night for pet owners.  She starts off by creating a new event:

  1.  Go to Components→JCal Pro→Manage Events and click the Add button in the top toolbar. 

  2.  Enter a title and description for your event (see Figure 18-13).  Choose a calendar and a category for the event. 

  3.  Choose the event parameters.  JCal Pro offers many options for scheduling or auto-creating multiple events.  Helen has chosen "Repeat weekly on Mondays," ending a few months later. 

  4.  Make sure Published and Event Approved are both set to Yes in the Publishing Info box. 

  5.  Click Save. 

Figure 18-13.  JCal Pro: Adding a new event

Now, switch to the frontend of your website and you should be able to see your event in the calendar. 

## Adding a Mini-Calendar

A mini-calendar is a great way to add a small, simple calendar to your site.  Unlike many extensions, JCal Pro installs all the modules, plug-ins, and extension-specific add-ons supported by your website.  No further installation is needed to set up your mini-calendar.  Helen will put her mini-calendar module in a side column, but it could be placed anywhere.  Adding a mini-calendar works like adding any other module:

  1.  Go to Extensions→Module Manager and click the New button in the top toolbar. 

  2.  Click the JCal Pro Mini-calendar link (Figure 18-14) or select the radio button next to it and click Next. 

Figure 18-14.  JCal Pro: Module Manager–New Mini-Calendar Module

  1.  Choose the module parameters, as shown in Figure 18-15.  If you only wanted the mini-calendar to show specific calendars or categories, you could enter their ID numbers here (find their ID numbers under Manage Calendars or Manage Categories).  Helen has chosen to show all calendars and categories that are publicly visible, so she'll leave the default parameters as they are. 

  2.  Choose the module position where you want to the mini-calendar to appear.  Helen will choose _left_ to show it in the left column. 

  3.  Click Save. 

Figure 18-15.  JCal Pro: New Mini-Calendar Module Parameters

If you switch the to frontend, you should see your new mini-calendar module as seen in Figure 18-16.  Days on which you have events will be highlighted with links, allowing the user to click and see the event details in a daily view. 

Figure 18-16.  JCal Pro–Mini-Calendar Module

JCal Pro is actively developed and a great way to handle calendaring on your Joomla website. 

## Other Extension Options

If you find that this extension doesn't suit your particular needs, we suggest you explore these other options:

  * Jevents

  * EventList

  * Google Calendar: Although not really an extension, you can use the wrapper functionality to wrap your Google Calendar.  See Chapter 7 on how to set up a wrapper. 

# Forms: Create Custom Forms to Collect and Store Information with bfForms

  * Extension: bfForms

  * Website: <http://www.forms-for-joomla.com>

  * Cost: £29.99 GBP (approximately $50 USD)

  * License: GNU/GPL

  * Minimum requirements: PHP 5.2.4+

bfForms, formerly known as Joomla Forms, gives website owners the ability to create a wide variety of forms for their website.  This isn't just a generic form-building component—there's a lot of power behind it.  Whether you need to create a drop-down list that is populated from fields in the database, send user submitted data to an API, or just create a basic form, bfForms can do it. 

If you have a concern about spam protection, IP addresses of submitters are checked against two blacklist databases.  This means if a form is submitted from a known spammer, bfForms will stop the submission and you won't get an email.  You also have the ability to manually blacklist IP addresses. 

If security is a concern, you can force forms to only submit over _https/ssl_.  Forms submitting over _https/ssl_ will find that the data is encrypted as it travels over the Internet from the visitor's computer to your website's server.  This is the same level of protection that banks use on their websites. 

We wish we could tell you that bfForms was really easy to use the first time you try to make a form, but there's a bit of a trade-off to provide all the features.  However, once you get through your first form, it gets easier and the concepts start to make sense.  Remembering these steps will make your journey a lot smoother:

  1.  Create a New Form

  2.  Add Form Fields

  3.  Create Submit Actions

  4.  Create a Menu Item to your Form

  5.  Test your Form

It looks like Helen has created a Contact Us form for her website.  Figure 18-17 shows what Helen's form looks like. 

Figure 18-17.  bfForms: Sample contact us form

Upon submission, Helen will get an email, the visitor's information will be saved to the database, and then the user will be taken to a "Thank you" screen. 

## Field Types

There are 34 different field types in bfForms, but we're only going to use four of those in our form.  To add a new form field, click on Form Fields and then click New.  Figure 18-18 shows some of the form field types available, broken down by five category tabs. 

Figure 18-18.  bfForms: Field Types

Click through the tabs and browse the options available.  Some of the most common fields are:

US States

A drop-down box prepopulates with all of the U.S. states. 

Countries

A drop-down prepopulates with a list of all of the countries in the world. 

User Name

If the user is logged in, her username will appear in this field.  This can either be a visible field or a hidden field. 

User ID

If the user is logged in, her user ID will appear in this field.  This can either be a visible field or a hidden field. 

User Email Address

If the user is logged in, her email address will appear in this field.  This can either be a visible field or a hidden field. 

User's Full Name

If the user is logged in, her full name will appear in this field.  This can either be a visible field or a hidden field. 

Date Picker

A configurable calendar that allows you to pick dates. 

HTML

This is not really a form field exactly, but it allows you to type any HTML to be displayed. 

After you choose a field type and give it a title, the next screen is filled with field validation, filters, permissions, styling options, and other general settings.  The options shown are relevant to the field type selected.  For instance, it would not make sense to validate a file upload field to ensure that it contains a proper email address. 

## Submit Actions

Quite simply, a Submit Action is the action you want bfForms to take when the user clicks the Submit button on the frontend.  You have the option to perform as many actions as you'd like.  Currently, there are eight Submit Actions (see Figure 18-19), but we'll cover the top five:

Figure 18-19.  bfForms: Submit Actions

Send an Email

This is pretty self-explanatory.  This action enables you to send the contents of the form to an email address of your choice.  If you want an email to go to the submitter and a separate email to go to an administrator, just create two submit actions. 

Save to Database

Using this action, submissions are saved to the database to be viewed or exported at a later time. 

Execute PHP Code

In our opinion, this is the most powerful Submit Action (not because Ken wrote it).  If there's anything you can't do with the other Submit Actions, Execute PHP will allow you to write your own PHP code to perform that action.  Understandably, you would need to be an experienced PHP programmer to do so. 

### Note

Ken wrote this Submit Action to facilitate a requirement he had to send form data to SalesForce.com's Web2lead solution.  Now there is a Submit Action called _Post to_ SalesForce.com _Web2lead Generation_ that facilitates that functionality without any programming knowledge. 

Thank You

Users will be shown "thank you" text of your choice. 

Redirect

Upon submission, the user will be taken to a URL of your choice.  If you use this Submit Action along with others, you need to make it last.  Submit Actions are processed in order and taking the user away from the form page will stop the processing. 

## Layout

Although Helen, like most people, will use the default layout provided, you have the option to customize the look and feel of the form as you see fit.  This would be a task that you would have a web designer perform; however, there is no harm in trying yourself. 

## Final Thoughts

The developer of bfForms, Phil Taylor, has many years of experience writing extensions for Joomla and even its predecessor, Mambo.  For some, the price tag may seem a little hefty, but once you see the power behind what you can create, it makes that number seem much smaller.  Creating extensions like bfForms is not just a hobby for Phil—it's his full-time job.  This is how he is able to offer a great product with great support. 

### Note

If you have an idea for a plug-in, such as a new field type or Submit Action, feel free to contact bfForms and share your idea.  If they like it, you may see it in the next release. 

Even better, if you have any programming experience, you can extend bfForms yourself and add new field types or Submit Actions.  If you take this route, consider emailing it to bfForms.  If the quality of the code is good and there is a need for such a plug-in, they will add it to the core product.  Besides benefiting future bfForms users, it will save you from having to install your plug-ins in bfForms on your future websites. 

## Other Extension Option

If you find that this extension doesn't suit your particular needs, we suggest you explore another option jForms. 

# Photo Gallery: Set Up an Online Photo Gallery Using Phoca

  * Extension: Phoca Galleries

  * Website: <http://www.phoca.cz>

  * Cost: Free

  * License: GNU/GPL

  * Minimum requirements: Joomla 1.5, PHP 4.4.1+, GD Library (<http://www.php.net/manual/en/book.image.php>) for thumbnail creation

When it comes to photo galleries in Joomla, Phoca Gallery is one of the best.  Packed full of features and the ability to customize nearly every little detail, this gallery is the flagship component for Phoca. 

If you think of a category as an album, the process of creating a gallery is simple.  After the category is created, you can add as many images as you want to it.  Categories can be nested into other categories as well to give you any sort of hierarchy you wish. 

We can see that Helen has decided to create two galleries, one for Dogs and one for Cats.  She has posted some fan photos that she received of people with their pets.  When Phoca Gallery is loaded, the main area on the screen looks something like Figure 18-20. 

Figure 18-20.  Phoca Gallery: Top-Level Category

If you click on Dogs, you will be taken into that category to see other categories and images located inside.  In our case, we have only one level of categories, so you will not see any subcategories when you click Dogs.  Figure 18-21 shows the user-submitted photos of fans with their dogs. 

Figure 18-21.  Phoca Gallery: Dogs category

Each category has a back button as the first image.  Clicking the green arrow will take you up one category.  In our example, it would take you back to the top-level category.  Each thumbnail has a variety of actions that you can perform on an image.  Looking at Figure 18-21, there are only two icons: Image Detail and Image Download.  Image Detail will enlarge the image in a modal pop-up box similar to a lightbox or slimbox as shown in Figure 18-22.  Clicking the thumbnail itself will produce the same result as clicking the Image Detail icon.  Image Download allows you to download the image.  Not shown but available, some of the other icons are PicLens, Subcategory, Geotagging, Camera Info, External Links, Eshop (VirtueMart), Delete, and Publish/Unpublish. 

If you are unfamiliar with Geotagging, it is the ability to pinpoint on a map where the image was taken.  This is great for vacation and scenery type images. 

Let's look again at Figure 18-22.  Here we have Raymond and Sharon with their beloved Chinese Crested Powder Puff dog named Misty shown in a _modal_ pop-up box (a type of overlay box for images).  You can rotate through the images automatically by clicking the play button to activate the slideshow functionality.  You can also simply click the arrows to navigate through to the previous or next image.  Clicking either of the two close buttons or just clicking outside of the image area will close the popup. 

Even though we are not using subcategories, we think it's important to discuss them since they do play an important role in organizing your images. 

Assuming that this area of the website became very popular and Helen was inundated with images to post, instead of having all of the dogs in one category, she may want to break them out.  Helen could easily create subcategories within Dogs for each type of dog, or at least the more popular types of dogs.  Then, all she would have to do is move the image from one category to another by changing the Category in a drop-down box on the backend. 

If you are building a personal website, you may want to organize your categories by date, for example, Year→Month→Event or even just Year→Month.  A picture is worth a thousand words, so take a look at Figure 18-23 to see one example of a category structure.  Images ideally would go either in the category for the month or the event, although you can have them at any level except the top level. 

Figure 18-22.  Phoca Gallery: Image Detail modal pop-up box

Figure 18-23.  Phoca Gallery: Example of using dates for hierarchy

Now that we have seen what the frontend of the component looks like, let's take a brief look at the backend. 

The administrator interface is shown in Figure 18-24 and most of the tasks you will perform after it is set up will be in Images and Categories.  If you want to upload lots of photos at one time, there's a Multiple Add feature that dramatically speeds up the process. 

Figure 18-24.  Phoca Gallery: Control Panel

Creating categories and uploading images are the two most important aspects to maintaining a photo gallery.  Let's walk through each. 

## Adding a Category

Helen wants a gallery of pet owners and their pets.  The first step in getting her gallery up and running is to add categories.  To create an image category:

  1.  Go to the Components menu and choose Phoca→Gallery. 

  2.  Click New. 

  3.  Fill out the Title.  Helen will call her first category Dogs. 

  4.  Set Access User Rights, Upload and Add User Rights, and Delete and Publish User Rights to Nobody.  Feel free to assign other values here if you wish. 

  5.  Click the Folder icon next to User Folder and select the directory for this category.  If a folder does not exist, you can create one here as well. 

  6.  Look over the rest of the fields to see if any apply.  Helen will leave the rest as the default. 

  7.  Click Save. 

Now that Helen has set up a single category, she'll set up one more for cats using the same steps and then move on to adding images. 

## Uploading an Image

Helen gathered a few photos of site fans and their dogs and wants to add them to the Dogs category.  To add an image:

  1.  Go to the Components menu and choose Phoca Gallery→Images. 

  2.  Click New. 

### Note

If you want to upload multiple images at one time, there is a Multiple Add feature that dramatically speeds up the process. 

  3.  Enter a Name.  Helen will add the names of the pet owners. 

  4.  Select a Category that your image will live in.  Helen will choose the Dogs category created in the previous section. 

  5.  Click the Image icon next to Filename and choose your file.  You also have the option to upload your file if it has not been uploaded previously. 

  6.  Look over the rest of the fields to see if any apply.  Helen will leave the rest as the default. 

  7.  Click Save. 

We didn't even touch the tip of the iceberg when it comes to features—just the basics of what a gallery would look like and how to get a basic gallery started.  Visit their demo site at <http://www.phoca.cz/demo> to view a full demo of all of the Phoca Gallery features.  Phoca also develops a number of other applications. 

## Other Extension Options

If you find that this extension doesn't suit your particular needs, we suggest you explore these other options:

  * JoomGallery

  * Simple Image Gallery

# Document Library: Create Online Document Storage Using RokDownloads

  * Extension: RokDownloads

  * Website: <http://www.rockettheme.com/extensions>

  * Cost: Free

  * License: GNU/GPL

  * Minimum requirements: Joomla 1.5, PHP 5.2+

Helen has decided that she will share a variety of documents with her site visitors, so we'll set up RokDownloads (see Figure 18-25) to accomplish that.  Her first document contains registration details about an upcoming show. 

Figure 18-25.  RokDownloads: Document manager

Before she uploads any documents, we first want to create a document folder. 

## Creating a Folder

Folders in RokDownloads work much like folders on your computer—they help to logically organize your documents.  To create a folder in RokDownloads:

  1.  Go to Components→RokDownloads in the top menu to open the RokDownloads Manager. 

  2.  Locate the Folders toolbar on the left side and click the green plus icon to create a new folder (Figure 18-26). 

Figure 18-26.  RokDownloads: Folder toolbar

  1.  Enter a name for your folder and then click the Create button. 

You should now see your new folder in the left column.  In order for your documents to be public, select the folder and click the Publish icon in the Folder toolbar. 

## Uploading a File

Now it's time for Helen to upload her Microsoft Word document.  To upload a document:

  1.  Go to Components→RokDownloads in the top menu to open the RokDownloads Manager. 

  2.  Locate the Folders toolbar on the left side and click the folder where you want to upload your document (Figure 18-27). 

Figure 18-27.  RokDownloads: Select a destination folder

  1.  Click the Upload icon in the top toolbar to open the uploader tool. 

### Note

If your browser gives you an alert on whether or not to allow the upload applet to run, allow it to.  Otherwise, the uploader tool won't work. 

  1.  Click the Browse button to select the file on your computer and then click the Upload button to begin uploading (Figure 18-28). 

Figure 18-28.  RokDownloads: Uploading a document

You should now see your file in the file list on the right side.  Right now, the document isn't published.  To publish the document, either click the Publish/Unpublish icon next to it or check the checkbox next to the name and click the Publish Files icon above the list of files. 

### Note

If the Java uploader isn't working for you or you're experiencing difficulties uploading files, you can switch to the default Joomla uploader in the RokDownloads Configuration and try again. 

If you want to upload more files or create more categories, this is the time to do it before we start linking to files or folders. 

## Creating a Menu Link

Now that Helen has uploaded a document, she wants to make that document, and any other documents she uploads in the future, visible on her website.  Like with other Joomla extensions, we'll create a menu link to accomplish that.  To create a menu link to a RokDownloads folder, perform the following:

  1.  Go to Menus in the top menu and select the menu where you want the link to be. 

  2.  Select New in the top toolbar to create a new menu item. 

  3.  From the list of menu item types, choose RokDownloads and then Rokdownloads Folder Layout as the type.  If you wanted to have a menu link to a single file, you'd choose Rokdownloads File Layout (Figure 18-29). 

Figure 18-29.  RokDownloads: Menu link to a file or folder

  1.  Helen wants her menu link to say "Documents," so she enters that in the Title field. 

  2.  Select the RokDownloads folder you created in the previous section under Parameters (Basic) in the right column.  There are a number of other parameters there to customize the look of your page.  We'll leave them as the default for now, but you can come back her later and adjust them. 

  3.  Click Save in the top toolbar. 

Now switch to the frontend of your site and you should see a Documents link in your menu.  Click it to see something similar to the folder view in Figure 18-30. 

Figure 18-30.  RokDownloads: Display file folder

Now, whenever a file is added to the RokDownloads folder, the file will appear on this page. 

## Latest Downloads List

Helen is planning on having a lot of documents for download, so she'd like to highlight new files as she adds them.  A Latest Downloads Module will always show her new files and it works like adding any other module:

  1.  Go to Extensions→Module Manager and click the New button in the top toolbar. 

  2.  Click the Rokdownloads Latest Downloads link (Figure 18-31) or select the radio button next to it and click Next. 

Figure 18-31.  Module Manager – New RokDownloads Module

  1.  Choose the module parameters.  Helen has chosen to show the five newest documents and have restricted documents visible so she'll leave the default parameters as they are (see Figure 18-32). 

Figure 18-32.  RokDownloads: Module Parameters

  1.  Choose the module position where you want the latest downloads list to appear.  Helen will choose left to show it in the left column.  Add a title like Latest Downloads. 

  2.  Click Save. 

If you switch to the frontend, you should see your new documents module as shown in Figure 18-33. 

Figure 18-33.  New RokDownloads: Latest Downloads Module

## Other Extension Options

If you find that this extension doesn't suit your particular needs, we suggest you explore these other options: DOCman and Phoca Download. 

# Reviews: Create an Online Review System Using JReviews Express

  * Extension: JReviews Express

  * Website: <http://www.reviewsforjoomla.com>

  * Cost: $39 USD

  * License: GNU/GPL

  * Minimum requirements: Joomla 1.5, PHP 5.2+

Helen has decided to give her users the ability to rate various pet products on the market.  She's just installed JReviews and the Setup Check (see Figure 18-34) in the center of the home screen shows we need to do a few things before JReviews will work. 

Figure 18-34.  JReviews home screen

## Setting Up Review Sections and Categories in Joomla

Since JReviews is associated with your Joomla categories just like your articles are, we'll need to set those up first.  Think about how many different types of review categories you might need.  Helen will set up a different section for each animal type, like "Pet Products" and a category for each type of product like "Dog Products" and "Cat Products."  For help on setting up sections and categories in Joomla, refer to Chapter 5. 

## Setting Up Review Criteria

The next step is to set up the criteria by which your users will rate the products.  Helen wants users to be able to rate products based on different criteria for either dog or cat products. 

First, Helen sets up her criteria that will apply to all the dog products she'll have:

  1.  Go to Components→JReviews Express in the top menu and then choose Criteria Manager from the menu on the left to open the Criteria Manager. 

  2.  Click the New button to create a new criteria set and enter a name for this criteria set.  We'll call it Dog Products because the criteria will apply to all dog products on Helen's site (Figure 18-35). 

  3.  Helen has chosen Quality, Price, and Chewiness as her three criteria.  We'll also add a short tooltip explanation for each into the Tooltips field. 

  4.  Click Submit. 

Figure 18-35.  JReviews: New dog criteria

Now we'll set up rating criteria that will apply to cat products.  Repeating the same steps, we'll set up the furriness and fun as rating options (Figure 18-36). 

Figure 18-36.  JReviews: New cat criteria

## Setting Up a Review Category in JReviews

In order for JReviews Express to know which articles and categories to add ratings to, we'll set them up in the Categories Manager. 

  1.  Go to Components→JReviews Express in the top menu and then choose Categories Manager from the menu on the left. 

  2.  Click the Setup Categories button to see both the categories and the rating criteria we set up in the previous step.  Helen will select the Dogs category and the criteria for Dog Products from the drop-down menu (Figure 18-37). 

Figure 18-37.  JReviews: Set up categories for dogs

  1.  Click the Submit button to save the category criteria. 

### Note

Setting up categories and assigning criteria is an irreversible process once your users have submitted ratings.  Make sure they're really set up the way you want. 

As shown in Figure 18-38, we'll also set up the category and criteria for cat products using the same steps. 

Figure 18-38.  JReviews: Set up categories for cats

Now your articles are set up to have user ratings on them.  Your articles don't have to be products—they can be movies, companies, or just about anything you can think of. 

## User Reviews on the Frontend

Switching to the frontend of Helen's website, we see that any article in our review categories now shows the review information, including the option for users to add their own (Figure 18-39). 

Figure 18-39.  JReviews: Frontend ratings

Our _Dog Chew Toy_ article is now ready for users to post their ratings and comments on. 

### Note

If you have Community Builder installed, JReviews comes with a MyReviews plug-in to show all of a user's reviews on their profile page.  See the next section of this chapter for more information on Community Builder. 

## Configuration and Access Options

The JReviews configuration is accessible from the side menu and contains following options:

General

These settings contain overall options for names, the rating scale, and choosing a theme for your review pages. 

List page

These settings control how your listing is displayed. 

Reviews

These settings control how user reviews are displayed. 

Images

These options control how images are displayed. 

Notifications

Here you can enable or disable notifications of new, edited, or reported reviews. 

Cache

For high-traffic sites, these settings manage caching for better speed. 

The JReviews access settings are accessible from the side menu and contain options for allowing certain user groups to perform actions like review moderation.  For Helen's site, we've left both the configuration and access settings as the defaults, but familiarize yourself with them to see if you'd like to change them for your site. 

JReviews also comes with three modules—a Listings Module, Reviews Module, and Totals Module to display your reviews and listings according to popularity and more. 

## Other Extension Option

If you find that this extension doesn't suit your particular needs, we suggest you explore another option: Simple Review. 

# Building a Community: Extend User Profiles and Functions with Community Builder

  * Extension: Community Builder

  * Website: <http://www.joomlapolis.com>

  * Cost: Free

  * License: GNU/GPL

  * Minimum requirements: Joomla 1.5, PHP 5+

It should be no surprise how important a website's community is and how it makes a site flourish.  Community enriches a site and engages its users.  The oldest and most well-known community tool for Joomla is Community Builder. 

Community Builder enables users to build their own user profiles and has a plug-in architecture for third-party add-ons.  It also integrates with other third-party Joomla components like JReviews Express or JCal.  It also has its own login module with a login redirect and customized registration pages. 

Upon installing Community Builder, you'll notice there are seven main sections, as shown in Figure 18-40. 

Figure 18-40.  Community Builder: Main menu

User Management

This is where users are managed.  It works basically like the User Manager in Joomla, but shows you the extra fields and information Community Builder adds. 

Tab Management

Tabs are sections of each user profile page.  They can work like actual tabs or can be just parts of the profile.  Tabs contain the fields you assign to them. 

Field Management

Fields are what extend user profiles.  A field can be a text field, an image, a checkbox, drop-down menu, or a variety of other options.  Each field must reside within a tab. 

List Management

The List Manager allows you to customize lists of users on the frontend of your website. 

Plugin Management

Here you can manage the default plug-ins and templates that come with Community Builder, or install new ones. 

Tools

The Tools Manager provides a few simple tools to make sure your database stays in good working order. 

Configuration

You'll find settings here for controlling what users can see and do. 

Before we can see any of these things in action, we'll need to set up a user list in order to see user profiles. 

## Creating a User List

Community Builder comes with a default user list already set up (the All Members list in the List Management section).  We just need to create a menu link to it so Helen can show a list of all her site members:

  1.  Go to Menus→Main Menu in the top menu or select the menu of your choice where you want the menu item to appear. 

  2.  Click the New button and click on Community Builder on the left to reveal the options (Figure 18-41). 

Figure 18-41.  Community Builder: Choosing a menu type

  1.  Click the "Users lists" link to create a new menu item. 

  2.  Enter a title for the list.  Helen will simply call hers "Users." 

  3.  Click Save. 

If you now switch to the frontend, you'll see your new menu item.  Clicking it will show you a list of all your users, as shown in Figure 18-42. 

Figure 18-42.  Community Builder: Default user list

Clicking on a user will take you to his profile and might look something like Figure 18-43. 

Figure 18-43.  Community Builder: Sample profile

## Adding a Profile Tab

Helen would like users to be able to add information about their pets and a photo in a special tab on their profile page.  So we're going to add a new tab called Pet Info.  To add a new tab:

  1.  Go to Components→Community Builder→Tab Management in the top menu to open the Tab Manager. 

  2.  Click the New button in the top toolbar. 

  3.  Add a title for the tab.  Helen will call hers "Pet Info."  Add a description and set the Publish state to Yes (see Figure 18-44).  You can leave all the other settings as their defaults. 

  4.  Click the Save button. 

### Note

If you wanted the new tab to display as a section on the page, you'd change the Display type setting to Div with title or one of the other options that best suits your needs. 

Figure 18-44.  Community Builder: Creating a new profile tab

If you switch to the frontend of the site, you'll see a new tab in user profiles.  Let's add some fields to that tab. 

## Adding Profile Fields

Now Helen will add two new fields to her new Pet Info tab.  One will allow users to select what kind of pet they have and the second will allow users to upload a photo of their pet. 

First, Helen will set up a multicheckbox for types of pets:

  1.  Go to Components→Community Builder→Field Management in the top menu to open the Field Manager. 

  2.  Click the New button in the top toolbar to create a new field (see Figure 18-45). 

  3.  In the drop-down menu next to the Type, choose Check Box (Multiple).  Helen will choose the tab we set up in the previous section called Pet Info. 

  4.  Enter a name, title, and description for the field. 

  5.  Scroll down to the bottom of the page and add the options for this field (Figure 18-46).  Since this is a multi-checkbox, Helen will let users choose several pets.  So we'll add Dog, Cat, Rodent, Bunny, Turtle, and Fish.  Click the "Add a Value" button to add as many fields as you need and the arrow buttons to reorder the values. 

  6.  Click the Save button when you're ready. 

Now when users edit their profile on the frontend (by going to Edit→Update Your Profile) they have the option in the Pet Info tab to select the pets they have (Figure 18-47). 

Figure 18-45.  Community Builder: New multi-checkbox field

Figure 18-46.  Community Builder: Adding new checkbox values

Figure 18-47.  Community Builder: Choosing checkbox values

The next step is to add a field in the same tab so users can upload their pet photo. 

  1.  Go to Components→Community Builder→Field Management in the top menu to open the Field Manager. 

  2.  Click the New button in the top toolbar to create a new field (Figure 18-48). 

  3.  In the drop-down menu next to the Type, choose Image.  Helen will choose the tab we set up in the previous section called Pet Info. 

  4.  Enter a name and title for the field. 

### Note

You can set the maximum dimensions for images and thumbnails in the right column, but for Helen's website, we'll leave them with no limits. 

  1.  Click the Save button. 

Figure 18-48.  Community Builder: New image field

Now when users edit their profile on the frontend (by going to Edit→Update Your Profile) they have the option in the Pet Info tab to upload their pet's photo (Figure 18-49). 

Figure 18-49.  Community Builder: Uploading a new pet photo

Once uploaded, user profiles will look something like Figure 18-50. 

Figure 18-50.  Community Builder: Profile with new tab and new fields

### Note

Many extension developers have created Community Builder plug-ins that extend or add information to user profiles.  Check out individual developer websites for details. 

The power of tabs and fields in Community Builder is virtually limitless.  We encourage you to explore and see what kind of great ideas you come up with. 

## Other Extension Option

If you find that this extension doesn't suit your particular needs, we suggest you explore another option: Tuiyo. 

# Podcasting: Publish Podcasts on Your Site and on iTunes with the Podcast Suite

  * Extension: Podcast Suite

  * Website: <http://www.jlleblanc.com>

  * Cost: Free

  * License: GNU/GPL

  * Minimum requirements: Joomla 1.5, PHP 5+ (PHP 5.2+ recommended)

Creating and distributing podcasts is not only fun, but it's a great way to promote your website.  Helen has put together a podcast discussion with a well-known dog breeder.  If you're new to podcasting, a podcast is simply an MP3, but often done in the style and episodic fashion of a radio show.  There are no real rules on how you should do it, as long as it's entertaining. 

## How a Podcast Works

Subscribing to a Podcast actually means subscribing to an RSS (Really Simple Syndication) feed.  This RSS feed contains information about the podcast, such as the name, a synopsis of what they're about, the author's name, links to download them, and other relevant information.  The Podcast Suite in Joomla will automatically create (with a little help from you) an RSS feed that contains all the information you need. 

## Setting Up Podcast Suite

We're going to assume you already have an MP3 file ready to go and you've already installed the Podcast Suite.  We're also going to assume that you know how to use an FTP program to transfer files to your web server.  FTP in Appendix A can give you some tips on how to use FTP. 

Before you do anything else, you'll need to set up your podcast parameters.  Go to Components→Podcast Suite→Manage Clips.  Click the Parameters button in the toolbar to see the options shown in Figure 18-51. 

Figure 18-51.  Podcast Suite: Parameters

Don't worry if you don't see all the parameters on one screen.  We've combined them for this image to give you an overview.  The items you should customize are:

Path for uploaded media

The default location for your audio files is in the podcast component's folder, but we recommend changing that to a top-level folder on your web server like _podcast_files_ or something similar.  If you use the default location, you will lose all your sound files if you ever uninstall the Podcast Suite. 

Title

Enter the title of your podcasts here.  Helen will call hers "Pet Podcasts." 

Description

Enter a general description for your podcasts here. 

Copyright

You should enter the current year here. 

Those are the only items you need to change to set up podcasting on your website.  However, if you want to distribute your podcasts through Apple's iTunes, you should also fill out the iTunes-related items near the bottom. 

### Note

In order to distribute your podcasts on iTunes, you need to create at least one podcast in the Podcast Suite. 

iTunes Block

Setting this to Yes will block your podcast from iTunes. 

iTunes Explicit

Setting this to Yes will put the _Explicit_ flag on your podcasts in iTunes.  This is used for explicit content or content with profanity. 

iTunes Author

Enter your name or the name of your site here.  This will be shown on the iTunes channel page. 

iTunes Image

Enter a URL here to the preview image you're using on iTunes. 

iTunes Categories

Depending on the general subject of your podcasts, you can choose up to two categories for iTunes to reference them. 

iTunes Keywords

The keywords work like metakeywords do.  They are related search terms for identifying and finding podcasts. 

iTunes Owner Name & E-mail

Your podcast needs to have a name and a contact email for it to be approved. 

iTunes Subtitle

Enter a subtitle here.  It will appear under the name of your podcast title on iTunes. 

Once you've entered all your preferred settings, click the Save button. 

## Create a Podcast Category

Now you need to create an article category for your podcasts.  Podcasts are associated with articles where you can add more detailed information.  To set up a new podcast category:

  1.  Go to the Category Manager and click the New button in the top toolbar. 

  2.  Enter a category title (e.g., _Podcasts_ ).  Select a parent section. 

  3.  Make sure the access level is set to Public.  See Permissions for more information on access levels. 

  4.  Optionally, you may also enter a description of the category in the text box.  This information will show up on category pages when the menu item parameter is enabled.  For more information about this parameter, see Menu Item Parameters in Chapter 7. 

  5.  Click Save. 

If you need further help setting up categories, see Category Manager Overview in Chapter 5. 

## Create a Podcast Menu Item

Next, you need to create a menu item linked to your podcast category so users can find them.  This also creates the feed users will use to subscribe to your podcast.  To create a menu item:

  1.  Go to Menus in the top toolbar and click the name of the menu you want to add your podcast link to.  In Helen's case, she chose Main Menu. 

  2.  Click the New icon in the top toolbar to create a new menu item. 

  3.  There are a number of options here, but Helen will choose the Podcast Suite type.  Clicking the name will reveal the Feed option (see Figure 18-52).  Click the Feed link. 

Figure 18-52.  Podcast Suite: Set up the podcast feed as a new menu item

  1.  In the right column, you'll see the Parameters (Basic).  Select the podcast category you set up in the previous section.  Helen simply called her category "Podcasts." 

  2.  Open the Parameters (Component) section of the right column and enter all the same options you entered when setting up the main Podcast Suite parameters.  The settings options are the same here as on that screen. 

### Note

Yes, we agree, it's a big pain to duplicate all your earlier settings.  We wish the settings would cascade if nothing was adjusted in the menu item parameters, but they don't.  Yet the benefit of having podcast parameters here as well as in the Podcast Suite component is that you can have multiple podcasts per website. 

  1.  Give your new menu item a name (e.g., _Podcasts_ ) and click Save. 

If you switch to the frontend of your site, you should see a new _Podcasts_ link in your menu.  Click it to see your feed URL.  It's <feed://joomlapetcenter.com/podcasts> in Helen's case.  Save this URL.  You'll need it later on. 

### Note

You might want to validate your feed URL to make sure it's working properly.  We recommend using Feed Validator, which also has a lot of great information about feed best practices. 

You won't see any podcasts there yet because you haven't uploaded any.  Let's do that next. 

## Upload Your Podcast Audio File

The next step is uploading Helen's MP3 file through FTP to the _podcast_files_ folder (or the audio folder you designated in the previous section).  Unfortunately, there's no way to upload files directly using the Podcast Suite.  Once uploaded, go back to the _Manage Clips_ page and refresh your browser window to see the file (see Figure 18-53). 

Figure 18-53.  Podcast Suite: Files Manager

## Publish Your Podcast

If you see your audio file, you can follow these steps to set up your podcast:

  1.  Click the filename to open a new Add Podcast Metadata screen (see Figure 18-54). 

Figure 18-54.  Podcast Suite: Add Podcast Metadata

  1.  Add a title for this podcast and a brief description. 

  2.  You'll probably want to leave the other information blank because we already set it up earlier in the parameters.  If you want to override any of that information, enter your changes here. 

  3.  Click Save and Publish in Article.  Your podcast will now be automatically added to a Joomla article and you'll be taken the Article Editor screen. 

  1.  Select a section and the category you created for the podcasts a few steps back in the Article Editor (Figure 18-55). 

  2.  Set the Published button to Yes. 

  3.  Click Save. 

Figure 18-55.  Podcast Suite: Article Editor—adding a new podcast

Now that you've set up your first podcast, you can start the process of getting your podcast on iTunes. 

## Setting Up Your iTunes Channel

If you want to distribute your podcasts on iTunes, you'll need to familiarize yourself with how podcast channels work on iTunes.  We recommend reading the following to help you get started:

  * Apple's Official Instructions for Making a Podcast at <http://www.apple.com/itunes/whatson/podcasts/specs.html>

  * Apple's Podcasting FAQs at <http://support.apple.com/kb/HT1597>

### Note

Apple does _not_ host your audio files on its server.  It's up to you to host them.  iTunes will read your RSS feed and point users to the location of the podcasts on your web server. 

When you're ready to submit your podcast, open iTunes and click the iTunes Store link on the left.  This will take you to the home page of the iTunes Store.  Then click the _Podcasts_ link in the left column of the home page and scroll down to the bottom left to find the "Submit a Podcast" link.  Once clicked, you'll enter the URL to your podcasts.  Remember Helen's podcast feed link?  <feed://joomlapetcenter.com/podcasts>. 

Your feed link will be different, so enter yours in the field.  Click Submit and you're done. 

## More Parts

So far you've only used the Podcast Suite component for managing audio files and creating your feed, but there are two things that were installed along with the component—a content plug-in and a module.  Here's a description of each:

Content–Podcast

If you go to the Extensions→Plugin Manager, you'll see the plug-in that associates podcasts with their accompanying articles and produces the RSS feed. 

Podcast Module ( _mod_podcast_ )

If you go to the Extensions→Module Manager, you'll see an unpublished module that shows a link for users to subscribe to your podcast in iTunes.  Publish this module in an active module position to make it visible. 

## Other Extension Options

While there are audio players for Joomla, there are no other options for setting up podcasts in Joomla.  Fortunately, the Podcast Suite works well and you don't need to look any further. 

# Discussion Forum: Set Up an Integrated Discussion Forum Using Kunena

  * Extension: Kunena

  * Website: <http://www.kunena.com>

  * Cost: Free

  * License: GNU/GPL

  * Minimum requirements: Joomla 1.5, PHP 5.0.3+ (5.2+ recommended), MySQL 4.1.20+ (5.0+ recommended)

Discussion forums are a great way to build a community of users around your site.  Helen has decided she wants to provide her site users a way to interact and she's chosen the popular forum software Kunena. 

We'll assume that you have already downloaded Kunena and have installed it using the Extension Manager in the same way other extensions are installed.  You should see something like Figure 18-56. 

Figure 18-56.  Kunena: Control Panel

It may look like a lot of options, but there are only half as many as it appears because the side links are duplicates of the icon links in the center.  Let's examine what's behind each item:

Kunena Control Panel

This is where you are at the moment.  Like the Joomla Control Panel, it's the launching point for all the features. 

Kunena Configuration

There is a very detailed configuration screen for Kunena that allows you to customize just about every aspect imaginable.  We recommend that you really take your time and read through this page and the help notes next to each and every item.  It's divided up in to nine sections: Basics, Frontend, Security, Avatars, Uploads, Ranking, BBCode, Integration, and Plug-ins.  We'll get into some of these later in this section. 

Forum Administration

This is where you will be managing forums—moderating posts, setting access permissions, creating/editing forums, and more. 

User Administration

The User Profile Manager is the way to control access, rank, and the views of individual users. 

Edit Smilies

Kunena comes with a set of smilies forum users can incorporate into their posts and you can add your own or customize these. 

Rank Management

As people participate in the forum more, their post count increases and their rank or status increases.  Here you can set post limits and what the names of the ranks are. 

Uploaded Files Browser

If you allow users to upload and attach files to their posts, you can view/manage all the files here. 

Uploaded Images Browser

If you allow users to upload and attach images to their posts, you can view/manage all the images here. 

Edit CSS File

Kunena inherits some styles from Joomla, but also has many of its own stored in its CSS file.  You can edit it here to customize the look of Kunena. 

Prune Forums

Pruning is a way to remove old or obsolete posts from your forum.  You can select which forums and a pruning period. 

Synchronize Users

There will be no users in Kunena when you first install it, so Synchronize Users will synchronize user accounts between Joomla and Kunena. 

Recount Category Stats

If your category statistics appear to be incorrect or out of date, this will correct it. 

Support Website

This is a direct link to <http://www.kunena.com> for help and support. 

On top of all this, Kunena plays nicely with community extensions like Community Builder so user profiles are integrated. 

## Synchronize Your Users

There are no users in Kunena when it is installed, so you will need to go to the Synchronize Users link on the left (or the icon on the Kunena Control Panel).  Click the Sync icon in the top right toolbar.  Once users have been synched up, there's no need to sync again. 

## Create a Menu Link to Your Forum

Next, you need to create a menu item linked to your forum so users can find it.  To create a forum menu item:

  1.  Go to Menus in the top toolbar and click the name of the menu you want to add your forum link to.  In Helen's case, she chose Main Menu. 

  2.  Click the New icon in the top toolbar to create a new menu item. 

  3.  Helen will choose the Kunena Forum menu type in the list of options. 

  4.  In the right column, you don't have any Basic Parameters so give your new menu item a name (e.g., Forum) and click Save. 

If you switch to the frontend of your site, you should see a new Forum link in your menu.  Click it to see your forum.  You won't see anything there except some sample categories to test out. 

## Setting Up a Forum Category

The Kunena forum comes with a few sample forum categories so you can see how they work.  Helen wants to set up a few forum categories so each pet type has its own.  To create a new forum category:

Figure 18-57.  Kunena: Setting up new forum categories

  1.  Click Forum Administration on the left column and then click the New icon in the top toolbar to take you to the new category screen (see Figure 18-57). 

  2.  Choose a parent category for the new forum or leave it set to No Parent. 

  3.  Enter a name and description for the new category.  If you want some text in the forum header, add that here too.  Helen will call her category Dogs. 

  4.  Helen wants her forum to be accessible to the general public, so she'll select Everybody in the Public Access Level field.  If you want it accessible only to Registered Users or other groups, select that option instead. 

  5.  The other options can be left as default since they don't apply in our situation. 

  6.  Click the Save icon in the top toolbar. 

### Note

Your new forum category will be unpublished by default.  Click the icon in the Published column to publish it on the frontend. 

Now take a moment to go to the frontend of your site and see your new category.  You can repeat these steps to set up a number of categories.  Helen has created a few categories—Dogs, Cats, Reptiles, and Fish—as shown in Figure 18-58. 

Figure 18-58.  Kunena: Frontend

## Add a Moderator

Helen can't be expected to manage such a busy forum all by herself, so let's add a moderator to help—her friend, Wilma.  Wilma has already registered on the site, so we're going to promote her by doing the following steps:

  1.  Click User Administration in the left column to open the User Profile Manager. 

  2.  Find the user you want to promote (e.g., Wilma) in the list and click the username to open her profile (see Figure 18-59). 

Figure 18-59.  Kunena: Promoting a user to moderator

  1.  Set the user's Rank Title to Moderator.  This is displayed to other users so they know Wilma is a moderator. 

  2.  Change the Is Moderator?  setting to Yes and select the forums the user will moderate.  Wilma will moderate all forums, so we've selected all the categories listed. 

  3.  Click the Save icon. 

That's all there is to it.  Wilma is now a moderator on the forums with the ability to edit, delete, and moderate discussions.  Let's hope all that power doesn't go to her head. 

## Integration

If you have Community Builder installed, you can integrate Kunena, which will force Kunena to use the user profile avatars and link to the user's Community Builder profile instead of their Kunena profile.  To enable integration for Community Builder and other community extensions:

  1.  Go to Kunena Configuration in the left column and then click the Integration link underneath. 

  2.  Choose the extension you want Kunena to integrate with for avatars. 

  3.  Choose the extension you want Kunena to integrate with for profile settings. 

  4.  Choose the extension you want Kunena to integrate with for private messaging. 

  5.  Finally, if you have the discussbot installed, select Yes to enable integration.  Otherwise, leave it set to No.  Visit the Kunena website for more information on the discussbot. 

  6.  Scroll up to the top and click the Save icon to save your new settings. 

When you have a website with many different extensions like Helen's, this type of integration is a wonderful thing. 

### Note

If you're a user of either of the dead-end products Fireboard or JoomlaBoard, the Kunena installer will automatically upgrade your installation and convert everything to Kunena. 

## Other Extension Options

If you find that this extension doesn't suit your particular needs, we suggest you explore these other options:

  * ccBoard

  * Agora

# Site Backup/Migration: Perform Backups and Migrate Your Site Using JoomlaPack

  * Extension: JoomlaPack

  * Website: <http://www.joomlapack.net>

  * Cost: Free

  * License: GNU/GPL

  * Minimum requirements: Joomla 1.5, PHP 4.3.9+ (PHP 5 recommended), MySQL 4.1+ (MySQL 5 recommended).  JoomlaPack Remote requires Windows XP or Vista. 

We can honestly say that JoomlaPack is one of our favorite extensions.  Although we mainly use it for creating backups of websites, it can also be used to move your website from one host to another. 

JoomlaPack is the brainchild of Nicholas K. Dionysopoulos.  It started out as a stand-alone PHP script to backup Joomla websites and later became an extension.  Since then, a few people started contributing to the project and together the international JoomlaPack team of volunteers has created a suite of backup tools like none other found in the Joomla community. 

We'll start by showing you how to use JoomlaPack to backup your website.  Then we'll take it a step further and show you how to restore your website.  Moving your website from one host to another is nothing more than backing it up on one server, and then restoring it on another server. 

JoomlaPack has two different editions: Core (the minimal version) and Plus (the full-featured version).  Both are free but we always use the Plus edition even though we rarely use the extra features.  Their interfaces are very similar, so you're free to make up your own mind as to which one you prefer to use. 

## Getting to Know the Interface

Figure 18-60 gives you a glance at JoomlaPack in Easy Mode.  This mode will work just fine for most websites.  Expert Mode has a lot of options like excluding specific directories and files, including extra databases, and excluding specific database tables (this option is only in Plus edition). 

Figure 18-60.  JoomlaPack: Backend Interface—Easy Mode

When you first open JoomlaPack in the Joomla Administrator Backend, you will want to configure it by clicking Configuration.  Although not required, it's advisable to change the Output Directory that your backup files are stored in.  This is so that a would-be hacker would not be able to attempt to download any backups you might have created.  Under the Advanced pane, you should change Archiver to JPA JoomlaPack Archive because on some servers, JoomlaPack has issues creating backups in ZIP format. 

## Backing Up Your Website

Now that things are set up, click Backup Now and watch as JoomlaPack works its magic.  Once the backup process is complete, you'll see a success screen.  Depending on the size of your website and the power of the server, this may take anywhere from a minute to a half of an hour.  JoomlaPack will keep you up-to-date on where it is in the backup process.  When you're done and want to download the backup file, click Administer Backup Files in the top submenu. 

### Warning

If your website is using over half of its allotted disk space, you may have problems backing up since the backup will be a compressed version of your whole website.  We've found that this is a common reason for backups to fail. 

JoomlaPack also has the ability to create an archive from the frontend of your website by passing a secret word in the URL.  The secret URL is set up in Configuration→Frontend. 

## Restore Your Website

Now that we have our website backed up, it is time to restore it.  You might need to do this for a variety of reasons, such as:

  * You're changing web hosts and are restoring files on the new server. 

  * You want to install files on your local machine to use as a development environment. 

  * Your server crashed and the web host has no backup (uncommon, but it happens). 

  * Your site was hacked (be sure to find out how you were hacked so that you are not hacked again after restoring your site). 

  * You just want to ensure that your backup can actually be restored. 

Whatever the reason, a backup is obviously useless unless it can be restored. 

JoomlaPack has a script called _Kickstart_.  It is used to extract your JoomlaPack Archive.  To restore your site, do the following:

  1.  Upload _kickstart.php_ via FTP to where your website will be restored. 

  2.  In the same directory, upload your JoomlaPack Archive file. 

  3.  Using a browser navigate to _http://www.  <yourwebsite>.com/kickstart.php_. 

  4.  Follow the JoomlaPack Kickstart screens to restore your site. 

### Note

Kickstart is a separate download from the JoomlaPack Component. 

## But Wait, There's More! 

JoomlaPack has two Windows-based applications that aid in making your life easier when dealing with backups. 

### JoomlaPack: eXtract Wizard

Since we stated that the JPA JoomlaPack Archive format is the preferred method of archiving files, what happens if you are on your computer and you want to extract it without using Kickstart on a server?  If you are on Microsoft Windows, you can use the JoomlaPack eXtract Wizard (see Figure 18-61).  It will extract the contents of your JoomlaPack Archive into the directory of your choice.  JoomlaPack Remote is a Microsoft Windows application that will go out to your websites at a specified interval, create backups, and then download them to your computer. 

Figure 18-61.  JoomlaPack eXtract Wizard

### JoomlaPack Remote

In order to use JoomlaPack Remote (see Figure 18-62), there are a few things that need to be done first:

  1.  Install JoomlaPack Remote on your computer. 

  2.  Install and enable the _jpremote_ plug-in. 

  3.  In Global Configuration→System→System Settings, ensure that Enable Web Services is set to Yes. 

  4.  Run the JoomlaPack Remote Application and click Add. 

  5.  Enter in the requested information.  Once completed, JoomlaPack Remote will take its first backup. 

Figure 18-62.  JoomlaPack: Remote

### Note

Using JoomlaPack Remote along with a remote data backup solution is an economical way to do offsite backups of your websites. 

## Final Thoughts

We can't rave enough about JoomlaPack.  Not only will it make your life easier (and might save your neck someday), the developers provide great documentation and their support forums are very helpful. 

## Other Extension Options

If you find that this extension doesn't suit your particular needs, we suggest you explore these other options: LazyBackup and JoomlaCloner. 

# Power Search: Powerful Site Searches with JXtended Finder

  * Extension: JXtended Finder

  * Website: <http://jxtended.com>

  * Cost: $50 USD

  * License: GNU/GPL

  * Minimum requirements: Joomla 1.5.7, MySQL 4.1+, PHP 5.2.x

JXtended Finder is a remarkable extension that allows you to search your site better and faster than any other option we've seen.  Admittedly, it's probably a bit of overkill for Helen's pet site in its early stage, but it integrates nicely with other extensions and will be a great help once her website reaches a sizable state.  JXtended Finder isn't free so we won't take you through every option, but we'll give you the most important points. 

Let's go over the four main sections of Finder.  You can see them in the submenu when you go to _Components_ in the top menu and then _Finder_. 

Indexed Content

If your content has been indexed (scanned and organized by JXtended Finder), you will see it listed here.  If there are specific items you don't want to show up in search results, you can unpublish them here. 

### Note

JXtended Finder creates an index for your site content for increased speed.  The regular Joomla search engine looks through every item each time.  Creating the index can take a long time, depending on how much content you have, but it saves site visitors time (and server resources) when searching. 

Finder Plug-ins

The Finder is extensible and uses plug-ins to be "aware" of other components with searchable content (e.g., DOCman). 

Search Filters

These filters are the way to customize your search functions.  You can create multiple search filters for a variety of needs.  For example, if you want to allow your users to just search articles about dogs in a specific category or articles about cats in a different category, you'd create a search filter for each. 

Content Maps

The Finder collects searchable information about your content and creates abstract containers of its attributes.  These Content Maps enable you to search in a granular fashion by section, category, and more. 

## Set Up a Search Filter

Helen would like to enable site visitors to only search articles in one article category named Dogs.  We're going to assume you have a category with that name and some articles in it because Helen does.  Start by setting up a search filter:

  1.  Go to Components→Finder in the top menu. 

  2.  Select Search Filters from the submenu and click the New icon in the top toolbar. 

  3.  Give this search filter a title and leave the alias field blank. 

  4.  In the first field, select the checkbox next to Category.  Then select the specific category (or categories) you want to search.  Helen has chosen the Dogs article category (Figure 18-63). 

### Note

If you don't see your category here, it means you don't have any articles in that category for JXtended Finder to search.  Add at least one article and return to this screen to set up a search filter. 

Figure 18-63.  JXtended Finder: Setting up a search filter

  1.  Click Save. 

You can create as many of these as you need for multiple custom searches. 

## Adding a Search Box

Now we want to show a search box module on the frontend connected to our search filter:

  1.  Go to Extensions→Module Manager in the top menu. 

  2.  Click the New icon in the top toolbar and click the Finder module in the list. 

  3.  As shown in Figure 18-64, there are a lot of options, but we'll leave most as their defaults.  In the right column, select the search filter you created in the previous section under Module Parameters. 

Figure 18-64.  JXtended Finder: Setting up a search module

  1.  Enter a module title, select an active module position, and click Save. 

Now, when you switch to the frontend you'll see a search box (Figure 18-65) that will only search articles in a specific category. 

If you need help on setting up modules, see Chapter 9. 

Figure 18-65.  JXtended Finder: The finished search module

## Search Options

You can customize other aspects of JXtended Finder in the _Finder Options_ screen.  To view the options:

  1.  Go to Components→Finder in the top menu. 

  2.  Click the Options icon in the top toolbar. 

The options, shown in Figure 18-66, are pretty self-explanatory, so we won't cover them in detail here. 

Figure 18-66.  JXtended Finder: Setting up search options

## Reindexing Your Content

If you add new content, you'll need to reindex your site in order for your search results to be accurate:

  1.  Go to Components→Finder in the top menu. 

  2.  Select Indexed Content from the submenu and click the Index icon in the top toolbar.  The Finder will now display a progress bar (see Figure 18-67) while it indexes your site. 

Figure 18-67.  JXtended Finder: Indexing your site content

Depending on the amount of content you have, indexing can be fairly quick or could take 30 minutes or more for large websites. 

## Other Extension Options

If you find that this extension doesn't suit your particular needs, we suggest you explore these other options: RokAjaxSearch and YOOsearch. 

# Content Tagging: Organize and Connect Related Content Using JXtended Labels

  * Extension: JXtended Labels

  * Website: <http://jxtended.com>

  * Cost: $40 USD

  * License: GNU/GPL

  * Minimum requirements: Joomla 1.5.7, MySQL 4.1+, PHP 5.2.x

The ability to label (or tag) your content is a powerful concept.  It's the equivalent of putting a tiny sticker on each item that gives it a description.  The more you "describe" your content (with more stickers), the more connections form between related pieces of information—sometimes in ways you didn't expect. 

## Planning and Creating Your Labels

Helen wants to connect her site content in ways that she hasn't before.  For example, when she tags disparate items that are in completely different areas of the site—like an article, a contact, and event—users can easily find related items by clicking on the tags appearing next to each. 

Before you create tags, you should give some thought to specific keywords that describe your site content.  Helen will start creating labels with words like Dog, Cat, Fish, or Reptile.  These are good high-level descriptors, but getting specific will help site users get specific as well.  Helen's other labels will drill down deeper with words like Labrador retriever, Calico, Goldfish, and Iguana.  Additional labels might be colors or attributes like Fur, Scales, Wings, or Fins. 

We recommend you start simple with your labels and then explore the parameters and options as your content grows.  To start setting up a few labels:

  1.  Go to Components→Labels in the top menu. 

  2.  Click the New icon in the top toolbar to see the new label screen (see Figure 18-68). 

  3.  Enter a title and click Save.  Click Save & New instead if you're creating a bunch of labels in a row. 

Figure 18-68.  JXtended Labels: Creating a new label

As time goes on and you want to customize your labels, you can also add images to your labels, as well as customize each label's appearance by editing the label and choosing the Options tab. 

## Labeling Your Articles

In order to apply labels to your articles, you need to open each one and locate the Manage Labels panel in the right column as shown in Figure 18-69. 

Figure 18-69.  JXtended Labels: Manage Label Parameters

Simply click the checkbox next to each label you want associated with this article and click the Save icon. 

## Creating a Tag Cloud

Label Clouds (also known as Tag Clouds) are a great way to give a high-level overview of the content on your site.  They collect your labels into a visual "cloud," giving each label a weight based on how often it is used.  Labels used more often will be in a larger font than others. 

Label Clouds are displayed in modules.  To create a new cloud, do the following:

  1.  Go to Extensions→Module Manager and click the New button in the top toolbar. 

  2.  Click the Labels – Label Cloud link (Figure 18-70) or select the radio button next to it and click Next. 

Figure 18-70.  JXtended Labels: New Label Cloud Module

As you can see from Figure 18-71, Helen has more content about dogs on her site than any of her other labels. 

Figure 18-71.  JXtended Labels: Cloud Module

## Other Extension Options

If you find that this extension doesn't suit your particular needs, we suggest you explore these other options: Tags for Joomla and Joomla Tags. 

# Comments: Set Up User Comments Using JXtended Comments

  * Extension: JXtended Comments

  * Website: <http://jxtended.com>

  * Cost: $30 USD

  * License: GNU/GPL

  * Minimum requirements: Joomla 1.5.7, MySQL 4.1+, PHP 5.2.x, Mootools

JXtended Comments is a component that enables users to leave comments and feedback on your articles.  There's also added functionality for sharing articles and ratings on articles.  Helen will use many of these features as she posts whimsical articles about her pets and pet experiences. 

Figure 18-72.  JXtended Comments: Frontend

Figure 18-72 shows JXtended Comments at the bottom of a full article titled _Pet Rocks Now Available!_  Under the article, you can see the Sharing section.  This section gives you the ability to add this page to several social bookmarking websites, sharing services, or share directly with friends via email.  If you don't want sharing features, you can disable them in the _Content–Comments_ system plug-in. 

Below the Sharing section, we see the rating system—clicking the number of stars to represent how they rate the article.  We see that the article is rated four out of five stars.  Once a user votes, they can't vote again.  If you don't want the rating features, you can disable them in the _Content–Comments_ system plug-in. 

This brings us to the Comments section of this extension.  After listing how many comments this article has, the extension gives you an RSS feed link that syndicates the published comments.  We can say that we have never wanted to aggregate article comments; however, I'm sure that somewhere someone will want to, so the feature is there. 

Since everyone comes from different backgrounds and skill levels, it is important to explain a couple of RSS terms to make sure no one is confused.  RSS stands for Really Simple Syndication.  Websites can syndicate their articles or other data and users can take those syndication links and aggregate the data using a variety of methods:

 _Syndicate_

"Web syndication is a form of syndication in which website material is made available to multiple other sites." ( <http://en.wikipedia.org/wiki/Web_Syndication>)

 _Aggregate_

"In computing, a feed aggregator, also known as a feed reader, news reader or simply aggregator, is client software or a Web application which aggregates syndicated web content [from one or more websites] such as news headlines, blogs, podcasts, and vlogs in a single location for easy viewing." ( <http://en.wikipedia.org/wiki/Aggregator>)

This rest of the Comments section is broken up into two parts.  The first part displays comments that have been submitted and published.  The second part is the actual form that users will use in order to leave comments. 

Following the RSS feed link, we see a list of comments that have been left.  The _Pet Rocks Now Available!_  article has only one comment.  It seems that Debbie Prather is a fan of the pet rock.  Assuming that the user enters a URL when adding a comment, the name will be a link out to their website.  The "this comment" link can be used to link directly to that particular comment. 

### Note

For those worried about bleeding page rank from allowing users to link to their website from yours, take note that link contains a `rel=``"nofollow"` attribute.  This tells the search engines not to follow that particular link, thus preventing page rank bleed from that link. 

After all of the posts, we come to the Add Comment form.  Users are able to enter Name, Email, Website, Subject, and Comment.  Email addresses are not published on the website. 

Another cool feature is that this extension supports Gravatar avatars.  For those of you unfamiliar with Gravatar, it is a website (<http://www.gravatar.com>) that allows you to upload one or more avatars and associate them with one or more of your email addresses as "global avatars."  When you are on a site that supports Gravatars and use an email address assigned in your gravatar.com account, your Gravatar avatar will automatically show up. 

In the backend of the extension, you have the ability to turn each of the sections on and off, turn each of the types of social bookmarking icons on and off, and also change the way they appear.  If the yellow stars clash with your template, you can change them too.  Certain form fields can be turned on and off, moderator settings can be changed, and spam settings and filters can be changed and turned on.  Most important, you get to decide which categories of articles you want the comments feature to be enabled on. 

In the backend of the website, you can review pending comments and choose to publish them, delete them, or mark them as spam. 

## Other Extension Options

If you find that this extension doesn't suit your particular needs, we suggest you explore these other options: RokComments and yvComment. 

# Summary

In this chapter, we've covered:

  * Solutions to many problems dealing with which extensions to use to accommodate certain features

  * Other extensions that you may want to look at to solve certain problems. 

In the next chapter, we'll discuss Search Engine Optimization as it relates to Joomla. 

# Chapter 19.  SEO and SEF

In this chapter, we're going to give you a crash course in making your site optimum for search engines.  It may appear to require some kind of web voodoo to make your site easy for search engines to love, but it isn't.  While search engines like Google have their own "secret sauce" in the way they rank results, and this chapter won't go into every little detail of this wide field, most everyone would agree these approaches will give you a solid start. 

# What Is SEO and SEF? 

Both SEO (search engine optimization) and SEF (search engine–friendly) URLs are keys to identifying and classifying your content.  Following are a few key points. 

## Search Engine Optimization

SEO is the art of making your site optimized for search engines, as well as a critical element in helping people find you.  We say "art" because it's the practice of fine-tuning specific things combined with factors you often have no control over.  Search engine bots crawl websites daily and analyze their content—assigning importance to certain parts and less importance to others.  They do this based on a number of factors:

  * Page structure—does your page structure represent your information structure?  There should only be one H1 tag and the other header tags should accurately represent how your content is presented. 

  * Good metadata; see Keywords and Metadata for some tips. 

  * Descriptive page titles—do your pages use descriptive page titles in the _< title>_</title> tags? 

  * Search engine friendly–URLs; see the next section for how to create readable URLs. 

  * Alternate text tags for images. 

  * XML site map. 

These methods are referred to as "white hat" techniques because they utilize methods that don't involve misleading search engines in order to achieve a higher rank (known as "black hat" techniques).  Joomla does all of these except #5 out of the box (see Appendix B for a free third-party option).  Read on to see how to optimize your site. 

## Search Engine–Friendly URLs

SEF URLs are also known as "human friendly" URLs, which means site visitors can read them and they make sense.  When you first install Joomla, your URLs will look like:

http://www.joomlapetcenter.com/index.php?option=com_content&task=view&view=article&id=11  
---

What a mess!  There's no way you'd know what information is on that page.  But when you activate SEF URLs, the same URL would look something like:

<http://www.joomlapetcenter.com/dogs/collies>  
---

That makes much more sense.  Users will have a very good idea of what to expect when they see that URL—and search engines use these URLs to help rank your content. 

To activate SEF URLs in Joomla:

  1.  Go to Site→Global Configuration.  Select the Site link if it isn't selected (see Figure 19-1). 

  2.  Click the button on the right to enable Search Engine Friendly URLs.  This will append your menu item alias to the end of the URL and make it readable.  For more information on setting up menu items, see Chapter 7. 

  3.  If your web server is running Apache, click the next button to use "Use Apache mod_rewrite" to enable Apache's URL rewriting functionality.  This will give you hierarchical URLs.  This also requires you to rename the _htaccess.txt_ file included in the home directory of Joomla to _.htaccess_ (notice the period in front of htaccess in the filename). 

  4.  If you want your URLs to have ".html" suffix appended on to each, click the button next to "Add Suffix to URLs" to enable it. 

  5.  Click Save to save your changes. 

You should now test your website to make sure the URLs are working properly. 

Figure 19-1.  SEO Settings in the Global Configuration

### Note

If SEO or SEF settings are not working correctly, you might need to check with your hosting provider to find out whether their server meets the basic requirements to run Joomla. 

## Blocking Search Engines

There might be times when you don't want search engines to crawl your pages.  You might have a members-only area or other page you don't want indexed by a search engine.  The secret is in the _robots.txt_ file.  This file is the first one read by search engine bots when they come to your site and you can tell them what to scan and not to scan.  The default _robots.txt_ that comes with Joomla contains the following:

    User-agent: *
    Disallow: /administrator/
    Disallow: /cache/
    Disallow: /components/
    Disallow: /images/
    Disallow: /includes/
    Disallow: /installation/
    Disallow: /language/
    Disallow: /libraries/
    Disallow: /media/
    Disallow: /modules/
    Disallow: /plugins/
    Disallow: /templates/
    Disallow: /tmp/
    Disallow: /xmlrpc/

The first line (User-agent) defines which search engine bot you're referring to.  In this case, the asterisk (*) is a wildcard and that means it applies to all bots.  The lines that follow define the directories we don't want the bot to crawl.  You can put additional ones there if you have other things on your web server you don't want crawled, but it isn't necessary with Joomla. 

### Note

To help improve SEO, you should edit your _robots.txt_ file and remove the following line:

    Disallow: /images/

The truth is that we want Google to crawl the images directory.  To coincide with this, you should use keywords in your filenames for images, pdfs, and other media files.  Do not name images using nondescriptive names like _01.jpg_ , _02.jpg_ , _03.jpg_ , instead, name them with descriptive names like _jack_shephard.jpg_ and _kate_austen.jpg_. 

# Lowering Your Page Rank

Why would you want to lower your page rank?  We assume you don't want to, so here are a few practices to avoid.  The following items will likely lower the rank of a specific page:

  * Too many outbound links on a single page (over 100 or so)

  * Framesets to display multiple pages at once

  * Too many dynamic URL parameters (don't worry—Joomla is OK)

  * Login pages

  * Pages too deep or more than three clicks from your home page

# Keywords and Metadata

Keywords and metadata play an important role in identifying your content.  Joomla enables you to add metadata globally, to each individual article, or both.  Metadata information is stored in the page header:

    <meta name="keywords" content="pets, puppies, chew toys" />
    <meta name="description" content="Your Pet Supply Store" />
    <meta name="author" content="Helen" />
    <meta name="robots" content="index, follow" />

To assign global metadata to all the pages on your site, go to Site→Global Configuration and click the _Site_ link in the secondary nav.  Fill in the Global Site Meta Description field with a description of your site (see Figure 19-2).  This description is what Google and other search engines display as a summary under the name of your site in search results. 

Figure 19-2.  Metadata in Article Settings

You should also fill in keywords (comma separated) in the Global Site Meta Keywords field that are relevant and help identify your overall site content.  They won't give you any boost in search result rankings, so don't be too specific and don't put more than a dozen or so in—less is more. 

To assign metadata to specific articles, go to Content→Article Manager and open the article you want to edit.  In the right panel, you'll see a place for your metadata information (see Figure 19-3). 

Figure 19-3.  Metadata in the Global Configuration

Adding information here will have the following results:

Description

The description entered here will replace the global description in your Global Configuration for this article only. 

Keywords

The keywords entered here will replace the site keywords in your Global Configuration for this article only. 

Robots

These are special commands for search engine crawlbots to make specific article exceptions to indexing.  Enter _no index, no follow_ to prevent search engines from either indexing this article or following the links contained. 

Author

The name entered here will replace the article author's name. 

# SEF URLs and Creating Custom URLs

Now that we know how to turn on SEF URLs, what happens if you want to modify the URL?  It is actually easier than you think. 

You may have noticed a field called Alias located under the Title field when working with articles or menu items.  Typically, you would leave these two fields blank and Joomla would populate them for you based on what you entered for the Title.  These fields are used when creating the SEF URLs.  By editing the Alias field, you in turn are editing the SEF URLs that are generated. 

The type of menu item used directly affects how the URL is built.  Typically, this is done by looking at the menu structure leading up to the active menu item.  Let's look at some examples of what SEF URLs are generated in certain situations:

  * The About Us link located in the top level of a menu:

<http://www.joomlapetcenter.com/about-us.html>  
---  
  * Suppose there was a submenu item under About Us called "Meet the Team":

<http://www.joomlapetcenter.com/about-us/meet-the-team.html>  
---  
  * Since Category List Layouts show only a list of articles, we would need to click on an article title in order to see its contents.  28 is the article id, which is there to prevent problems just in case you happen to have two articles with the same name:

<http://www.joomlapetcenter.com/about-us/news/28-best-in-town.html>  
---

We assume you get the general idea.  Let's take a look at how we can change one of these.  How about the second one?  We'd prefer to have the URL say _meet-our-team_ instead of _meet-the-team_ , but I do not want to change the text on the menu item.  All I have to do is edit the "Meet the Team" menu item and change its alias to _meet-our-team_ , save, and then refresh the frontend of the website. 

Now, instead of seeing <http://www.joomlapetcenter.com/about-us/meet-the-team.html>, we see <http://www.joomlapetcenter.com/about-us/meet-our-team.html>.  This may seem small, but if you are trying to manipulate your URLs for certain keywords or phrases to improve search engine ranking, every little detail can make a difference. 

The same can be done with our fourth example by editing the alias on the article.  Doing this would affect everything after 28. 

Some users prefer to use a third-party component to give them full control over URLs.  This is great on small sites with only a handful of links.  On larger sites, we have to say that is becomes a pain when you end up with multiple non-SEF URLs associated with the same SEF URL.  You will find yourself going into the backend to fix stuff on a semi-regular basis.  It is a maintenance nightmare and might make you wish you never used it in the first place. 

# Error Pages

In a perfect world, there would be no need for error pages.  Error pages, often called 404 pages, are designed to notify the visitor that what she is looking for isn't there. 

Figure 19-4.  Joomla's default 404 page

Figure 19-4 shows an example of Joomla's default 404 page.  As you can see, it is functional but not very pretty.  We encourage site administrators to get creative with their 404 pages.  This helps users find what they are looking for and doesn't look as bad when they hit a bad URL. 

Some common things to do with a 404 page are:

  * Display a "page not found" type of message

  * Redirect the user to the website's home page along with an error message

  * Redirect the user to the website's search page along with an error message

  * Entertain the user with something to make them laugh. 

For more ideas, check out these two articles at _Smashing Magazine_ :

<http://www.smashingmagazine.com/2007/07/25/wanted-your-404-error-pages/>  
---  
<http://www.smashingmagazine.com/2007/08/17/404-error-pages-reloaded/>  
---

Now we'll show you how to customize your own error page in Joomla. 

The error page in Joomla is located in _system/error.php_.  This file is what Joomla shows when it needs to display an error like 404.  We don't recommend you make changes to this file directly.  Instead, make a copy of the _error.php_ file and put it inside your template directory.  Joomla will look there first for an error file and it will prevent your customizations from being overwritten should you install an update to Joomla in the future. 

Some important variables that you can and should use in your _error.php_ file:

Error number

    1 <? php
    2 echo $this->error->code;
    3 ? >

Short title to describe the error

    1 <? php
    2 echo $this->title;
    3 ? >

Error message

    1 <? php
    2 echo $this->error->message;
    3 ? >

Show debug information

    1 <? php
    2 if($this->debug) :
    3 echo $this->renderBacktrace();
    4 endif;
    5 ? >

A custom error page is not something that everyone is ready to tackle, and many people can't be bothered with it.  We encourage you to come up with some interesting ideas. 

# SEO and SEF Resources

Getting your website to rank high on the major search engines is no small task.  We have created this list of resources to assist you in taking the next step in learning about SEO and submitting your website to search engines:

Web Developer's SEO Cheat Sheet

<http://www.seomoz.org/blog/the-web-developers-seo-cheat-sheet>

Add your URL to Google

<http://www.google.com/addurl/>

Yahoo – Submit Your Site (free, but requires registration)

<http://siteexplorer.search.yahoo.com/submit>

Submit your site to Bing (formerly MSN)

<http://www.bing.com/docs/submit.aspx>

Information on the robots.txt file

<http://www.robotstxt.org>

### Warning

Although not directly related to Joomla, but rather to SEO in general, we feel compelled to warn you about email scams that claim they can get you ranked #1 on Google.  You should do your best to steer clear of these types of claims. 

"Google never guarantees top placement in search results or AdWords—beware of companies that claim to guarantee rankings, allege a special relationship with Google, or advertise a 'priority submit' to Google.  There is no priority submit for Google." ( <http://googleblog.blogspot.com/2009/07/how-to-steer-clear-of-money-scams.html>)

# Summary

In this chapter, we've covered:

  * The differences between SEO and SEF URLs

  * What the _robots.txt_ file is and why it is important

  * Keywords and metadata

  * How to create custom URLs without the use of third-party extensions

  * Error pages and creating a custom one

In the next chapter, we will discuss best practices for keeping your website secure. 

# Chapter 20.  Security

If you're tempted to pass over this chapter, don't.  The idea of security scares a lot of people.  Would you rather deal with security issues now or after your website has been hacked?  Ben Franklin once said, "An ounce of prevention is worth a pound of cure."  We couldn't agree more.  While we feel Joomla is a secure platform, we recommend that you take the proper precautions.  Also, if your client is paying you to manage their website, it's your obligation to ensure that they are set up as securely as possible. 

# Importance of Security and the JSST

If you discover a vulnerability, also called an exploit, in Joomla's core code, please email any and all information you have about it to the Joomla!  Security Strike Team (JSST) at security@joomla.org.  This email address should not be used to ask for help restoring your website or to report vulnerabilities in third-party extensions.  Vulnerabilities in third-party extensions should be reported to the developer of that extension.  For other security questions, it is best to visit the official Joomla Security Forum found at <http://forum.joomla.org/viewforum.php?f=432>. 

### Note

Do not post vulnerabilities on the Joomla forums.  If the vulnerability is in fact a threat, it is best to give the Security Team time to release a patch before the rest of the world knows about it.  Also, if you have been hacked and have questions, don't mention the name of the attacker.  Hackers crave publicity and mentioning their name along with the site they hacked is an advertisement for them. 

# Best Practices

We probably should explain the title of this section.  The best practices discussed in this chapter are not a foolproof list of items on how to protect your server.  It is impossible to write a chapter, or even a book, that covers every way to prevent a hacker from attacking your website.  In fact, we would go so far as to say that the only server that is impossible to penetrate is one that is turned off, unplugged from a power source, and disconnected from the Internet.  If your server is on the Internet, it is vulnerable.  If someone has the skills and wants in bad enough, they will get in. 

When discussing certain types of exploits and ways of keeping your server secure, we won't be explaining how to compromise a system.  This isn't a chapter on how to hack Joomla sites. 

This list is not in any order of importance—they're all important practices. 

## Keep Joomla Updated

It sounds obvious, but it is very important to keep your Joomla installation up-to-date.  When Joomla is alerted that a vulnerability exists in the core code, as soon as it is verified, you will almost always see a patch within 24–48 hours.  Do not think of updates as mere typos and minor bug fixes.  When an update comes out, there are usually moderate to severe issues that have been fixed. 

Consider subscribing to the Announcements Forum on the official Joomla Discussion Forum.  The forum can be found at <http://forum.joomla.org/viewforum.php?f=8>. 

Once logged in, click the _Subscribe forum_ link.  Joomla averages about one or two announcements a month, so your inbox will not be overwhelmed.  There's always an announcement made when new versions of Joomla are released. 

## Subscribe to Security Update

To stay up-to-date on security updates, it is crucial that you subscribe to Joomla's Security Updates feed.  There are two ways to receive these:

  * RSS: <http://feeds.joomla.org/JoomlaSecurityNews>

  * Email: <http://feedburner.google.com/fb/a/mailverify?uri=JoomlaSecurityNews>

Choose whichever method is most convenient for you. 

## Backup Often

What would you do right now if the server hosting your website crashed and your host had no way of recovering it?  Do you have a backup of your site?  Are you backing up your site periodically?  You should. 

Considering how easy it is to create a backup of your site, you should be making them.  Do not trust your hosting provider to keep backups of your website. 

For specific information on how to perform site backups, see Chapter 18. 

## Stay on Top of New Vulnerabilities

If you subscribe to the security updates feed, then you will be notified of security flaws in Joomla's core code as soon as a new package comes out.  As stated before, this usually happens within 24–48 hours after it has been reported.  The security updates do not cover vulnerabilities in third-party extensions. 

In order to protect yourself from hackers, you have to think like a hacker. 

Although ethical individuals who find vulnerabilities in Joomla report them to the Joomla Security Strike Team, unethical individuals choose to brag about their findings while sharing the exploit with other hackers.  One of the most popular places that hackers post these exploits is on milw0rm.com.  You can visit milw0rm.com from time to time to make sure that none of the extensions you are using has a vulnerability.  But also know that milw0rm.com is not a well-managed site and has a lot of outdated and incorrect information.  Verify any concerns you have with the extension developer. 

Most popular extensions have mailing lists that you can sign up on.  If the extensions belong to an active project and they are notified of the exploit, you can bet that they will have a fix ready and notify everyone on their mailing list.  We have had good luck with the amount of email we receive as a result of signing up on these mailing lists. 

## Uninstall or Unpublish Unused Extensions

When you get your first site up, you will be tempted to browse the Joomla Extensions Directory and install anything and everything that looks cool.  This should be done with caution.  It is typically OK to do this on a test website or even better, a local website running on your computer for testing.  If you leave unused extensions installed on a publicly accessible website, you are slowing down your site and creating potential risk. 

It is recommended that you uninstall any third-party extensions you've decided not to use.  If the extension is a core extension, then you should disable it. 

### Warning

Uninstalling core extensions is not recommended.  Doing so could cause stability issues. 

## Strong Passwords

Strong passwords are important.  A strong password should contain uppercase letters, lowercase letters, numbers, and symbols.  The use of a child's name or common dictionary words is not advised and can easily be fooled. 

If you have problems remembering cryptic passwords, consider using character substitutions to make bad passwords at least decent passwords.  Following is an example of how that works. 

Let's say you're going to use someone's name for a password.  Even though this is very common, it's a bad idea.  When people do this, they typically choose a name that anyone who has met them for more than five minutes would figure out.  A lot of parents like to use their child's name.  We'll be the first to admit having done it before.  For our example, we are going to use the name of my roommate years ago after college.  His name is _Darin Newby_. 

Although a good person, _DarinNewby_ is a horrible password.  We can strengthen this password by substituting certain letters with numbers or symbols.  Granted, this is not as secure as a completely cryptic password, but it is better than only using letters.  Just by substituting the vowels, we can come up with a password like _D@r!nN3wby_.  That's a much better password and would be much harder to guess.  Ideally, you want to have at least one letter, number, and symbol in your password. 

### Note

To generate strong, random passwords, we like to use this website called <http://www.goodpassword.com>. 

It gives you lots of options for password length, character types, and even the option to exclude characters that can be confused with other characters. 

If you or your company doesn't already have a policy to change passwords on a regular basis, such a policy should be strongly considered. 

## Create a New Super Administrator User

By default, Joomla creates a user called _admin_ and its internal user ID is 62.  This is the first user created and that user has access to all areas.  Many SQL injection exploits in Joomla abuse the fact that you have a user called _admin_ or that there is a user with an internal ID of 62. 

To protect yourself from these types of SQL injection, you should create a new Super Administrator user for yourself, and then delete the user _admin_.  Since Super Administrators cannot be deleted, we need to do a few little tricks:

  1.  Log in as username _admin_. 

  2.  Create a Super Administrator user for yourself. 

  3.  Log out as username _admin_. 

  4.  Log in as the new Super Administrator you created in step 2. 

  5.  Change the group for username _admin_ to _Administrator_. 

  6.  Delete username _admin_. 

### Note

SQL injections do not ever have to occur in Joomla.  They are typically caused by variables that are pulled from the URL that aren't properly sanitized before being used.  If you were using an extension that did not take proper measures to check what data they are requesting, then a hacker would be able to add any SQL to the URL they want and your extensions would execute it without question. 

## Do Not Use jos_ As Your Database Prefix

Almost all Joomla websites use _jos__ as their database table prefix.  Like the username and ID, SQL injection forms of hacking play on this assumption.  Most SQL injection attacks in Joomla try to pull information from the _jos_users_ table.  Instead of using _jos__ as your database prefix, pick three or four random characters to use.  If your users table is _mmd_users_ , those scripts will not work, even if you have an extension with an SQL injection vulnerability in it. 

Although not required, it's recommended that you still use an underscore ( ___ ) at the end of your database prefix.  It makes it easier to read table names and decreases the chances for a typo. 

## Database and Super Administrator Passwords Should Not Be the Same

It is important that you do not use the same password to connect to your database as you do to log in to Joomla as a Super Administrator.  The reason is that if your site ever was compromised, the database password is in plain text inside Joomla's _configuration.php_ file.  This is especially important on a shared server.  If a different website is compromised and certain other server conditions are in place, a would-be hacker could read the _configuration.php_ file and get your password. 

Our goal here is not to scare you, but rather open your eyes to some of the risks that are involved when managing a website. 

## User Permissions

We often find clients who ask us to make everyone a Super Administrator.  Sometimes it is tough to get the point across that not everyone needs Super Administrator access to the site.  That is like saying, "Give everyone the combination to the company safe in case they ever need it someday."  We'd be willing to bet that not everyone needs to know the combination to your company safe.  Maybe some of them only need to know where it is and how to deposit money into the drop slot.  It is quite possible that you do not even want some of your employees to know where the safe is. 

Users should be given the minimum amount of privileges possible to do their jobs.  If a user needs only Manager access to the backend, don't give him Administrator access and definitely don't give him Super Administrator access. 

## Help→System Info

The System Info tabs are great for troubleshooting your website.  They are also good for checking certain security setting.  While we won't go through each tab line by line, following is an overview of what information is contained within each tab and why it is important to you. 

### System Info

The System Info tab gives you a high-level view of the applications that Joomla interacts with on your server:

PHP Built on

This is the server's operating system. 

Database Version

MySQL version being used by Joomla. 

Database Collation

Database Collation refers to what character set is used when storing data into the database.  This is important for international users whose language may use special characters that are not represented in a so-called standard character set. 

PHP Version

This refers to the version of PHP your website is running. 

Web Server

This field contains the web server and version currently being used by your server. 

Web Server to PHP interface

This tells you the method in which PHP and the web server interact. 

Joomla!  Version

This field will tell you what version of Joomla you are currently running. 

User Agent

User Agent is your web browser.  This field would be different is you viewed this screen in Firefox as opposed to Internet Explorer. 

### PHP Settings

This tab contains a list of relevant PHP settings. 

### Configuration File

The Configuration File tab lists most of the fields contained in the _configuration.php_ file located in Joomla's root directory.  These settings are editable in Global Configuration.  Some field values have been replaced with "xxxxxx" in order to keep shoulder surfers from viewing sensitive information like passwords. 

### Directory Permissions

In order for Joomla to work properly, it needs to write to certain directories from time to time.  This tab will show you if there are directories that Joomla is unable to write to. 

If a directory is writable, you will see the word Writable in green.  If a directory is unwritable, you will see the word Unwritable in red. 

### PHP Information

This tab loads PHP information. 

This does not show all of the PHP information.  It only shows the General, Configuration, and Info information. 

To see all of the PHP information, create a file in Joomla's root directory called _phpinfo.php_ with the following code:

    <? php
        phpinfo();
    ? >

Once the file is created and uploaded, load the page in your browser.  After you have viewed the information, remember to remove the _phpinfo.php_ file.  If a hacker were to find the file, they could potentially use the information found in the output to exploit your website. 

## Do Not Use PHP 4

Believe it or not, many hosting providers still support PHP 4.  If you have recently signed up for your hosting account, it's probably set to use PHP 5 by default.  In some cases, hosts have added support for PHP 5, but you may have to edit your account to make it active. 

The truth is that PHP 4 hit its "end of life" on December 31, 2007, and development completely stopped on August 8, 2008, for security releases.  That means if a major security flaw in PHP 4 comes out, it will not be fixed.  If you are still using PHP 4, you should speak with your host about upgrading to PHP 5 as soon as possible. 

To see what version of PHP your website is running, view the System Info page in the backend of Joomla:

  1.  Help→System Info

  2.  System Info tab

  3.  Setting: PHP Version

### Warning

If you find that your hosting account is using PHP 4, you should contact your host.  Chances are that PHP 5 is already installed on the server and they will instruct you to "upgrade" by making it the default version of PHP. 

## Register Globals

In a nutshell, _register_globals_ allows lazy programmers to not have to spend time properly requesting variables.  It also allows crafty hackers to assign arbitrary values to certain variables in your extensions.  Oftentimes, this is used to execute scripts from another server, allowing them to execute any code they want (like downloading a backdoor script), which gives them a lot more control over your website. 

### Note

Thankfully, _register_globals_ has been deprecated in recent versions of PHP 5 and has been completely removed from PHP 6. 

## .htaccess

Pronounced "dot h t access," use of this file prevents many common hacking attempts.  This is a great first line of defense that blocks out many injection exploits. 

Even though the default directives that come in Joomla's _.htaccess_ file are great, we'll add a few more to help beef up security a little more. 

By default, the _.htaccess_ file is not active.  It is called _htaccess.txt_.  To make it active, you must rename _htaccess.txt_ to _.htaccess_.  Pay special attention to the period at the beginning of the filename. 

### Prevent directory browsing

By default, some servers allow you to see all of the files within the directory if an index file is not found.  This can be overcome by adding the following line to your _.htaccess_ file:

    IndexIgnore *

### Deny access to view XML files directly from the Web

In Joomla, XML files are used to aid in installing extensions.  These files contain information about the extension like the version number.  The problem is that XML files are viewable by anyone.  By putting the following code in your _.htaccess_ file after `RewriteEngine On`, you can prevent the direct viewing of XML files:

    ### Block XML File reading ####
    <Files ~ "\.xml$">
    Order allow,deny
    Deny from all
    Satisfy All
    </Files>

(Tip courtesy of Brian Teeman, <http://brian.teeman.net>.) 

## SEF URLs

When a vulnerability comes out for _com_badextension_ (our fictitious name for any bad extension that might be out there), hackers will search the Internet for all websites that have _com_badextension_ installed. 

This is actually quite easy to do.  Go to google.com and search for the following: **`allinurl:com_content`**. 

Google returns all URLs that have _com_content_ in them.  Assuming the website is using Joomla 1.5, if the owner had SEF URLs turned on, _com_content_ would not show in the URL, thus her website would not show in the search results. 

If you're building a new website and you're ready for it to go live, be sure to turn SEF URLs on.  Not only will it help your ranking in popular search engines, it also helps protect your website from hackers being able to easily find your website if a vulnerability exists in one of your extensions. 

For more information on SEO and SEF URLs, refer to Chapter 19. 

## robots.txt

The easiest security measure to take is to have a _robots.txt_ file.  There really is nothing for you to do since this file exists by default in Joomla. 

The _robots.txt_ file tells web spiders not to crawl specific directories.  The only catch is that not all spiders adhere to this rule.  Spiders with bad intentions for your website usually ignore the _robots.txt_ file.  That means this is by no means a great method of protecting directories, but it will keep certain folders from showing up in search results of reputable search engines. 

## Directory Permissions

It surprises us when people have problems with directory permissions—there is always some "smart" person around to advise them to change the permissions of all files and folders to 777.  In order to understand why this is a very bad idea, we must first understand what it means. 

In UNIX and Linux (together often referred to as *nix), setting a file or folder to 777 means that anyone on the server can edit it. 

We once witnessed a server that was compromised where almost every website had its files and folders set to 777.  Once one site was hacked, hackers were then able to easily get into other websites on the same server, since all other websites allowed anyone to write (including edit) to its files.  If you think it is hard to fix 1 site after it has been hacked, try fixing 10 or 15. 

The recommended permission settings in Joomla and what they mean are:

Directories: 755

Owner: Read, Write, and Execute

Group: Read and Execute

Everyone else: Read and Execute

Files: 644

Owner: Read and Write

Group: Read

Everyone else: Read

If you find that the directory permissions are messed up and you have root access to your server, you can execute the following commands in order to recursively change all directories to 755 and files to 644:

    find .  -type d -exec chmod 755 {} \;
    find .  -type f -exec chmod 644 {} \;

The above commands are for Unix- and Linux-based servers and are not applicable to Microsoft Windows servers. 

## Backup Often

Do you ever have déjà vu?  Before you flip back in this book, we know we've already mentioned this before.  We only bring it up again as a reminder of how important it is. 

## More Information

For more information on Joomla Security, please visit the security checklist found on the Joomla Documentation wiki at <http://docs.joomla.org/Category:Security_Checklist>. 

# Summary

In this chapter, we've covered:

  * What the Joomla Security Strike Team is and how to contact them

  * Best practices for your Joomla website

In the next chapter, we discuss Joomla 1.6 and all of the changes that are coming.  It is very exciting stuff! 

# Chapter 21.  Joomla 1.6 and Beyond

This book was written just as Joomla 1.6 was developed and there are number of changes in the upcoming version.  While we think that Joomla 1.5 will be around for several years to come, we thought it would be helpful for users to understand the benefits that Joomla 1.6 offers. 

# Changes and Improvements

Joomla 1.6 is the development team's opportunity to dig deep and address some of the fundamental issues that were either held over from Joomla 1.0 or have become outdated.  Following is a list of just a few of the features in development:

## Article Manager

  1.   **Elimination of the three-tiered category system**.  Users have been clamoring for this for a while.  Though there's wisdom in the three-tiered approach, especially for small to medium-sized sites, larger sites can quickly force site developers to get creative about their content structure. _ Sections_ have now been eliminated, so there are just _Categories_ that contain your _Articles_.  These Categories can be nested so your structure is virtually limitless.  The new Content menu reflecting these changes can be seen in Figure 21-1. 

  2.   **No more trash**.  The article trash has been removed and integrated into the Article Manager itself as another state (like Published and Unpublished).  It works in a similar fashion as the old trash, but eliminates the trash screen.  In order to delete articles from the trash, you need to select the trash from the filter menu and then delete the articles. 

  3.   **No more Front Page Manager**.  The Front Page Manager has now been replaced by Featured Articles, which work in a similar way as trashed articles—they're just another state for articles.  They'll also have a few additional features for more flexibility. 

  4.   **Integrated article archiving**.  Like trashed articles and featured articles, archiving articles is just another state instead of a separate screen. 

  5.   **Updated WYSIWYG editorand new code editor**.  The latest version of TinyMCE will be included, and a code editor called CodeMirror (<http://marijn.haverbeke.nl/codemirror>) will also come with the installation. 

Figure 21-1.  The Article Manager menu

## Extension Manager

  1.   **A new Redirect component**.  It automatically detects when a user hits a bad link on your site, and it's logged to a link manager where you can set up a new URL to redirect users to.  That way, you'll never have a bad link on your site again. 

  2.   **No more Polls component**.  The development team decided this component had outlived its usefulness and was better left to third-party developers. 

  3.   **Installation discovery**.  For extensions that are very large, installing them can sometimes be a problem on servers with short POST times or limited resources (featured in Chapter 18 in more detail).  In the new Extension Manager, you'll be able to upload your file(s) to a specific directory, where it will be automatically discovered and installed. 

  4.   **Comments and ratings**.  Yep, they're finally here (see Chapter 18 for more detail).  The developers from JXtended donated their amazing AJAX-powered comments extension to the core of Joomla.  It integrates nicely with other third-party extensions and has features like spam control and social bookmarks. 

## Menu Manager

  1.   **New menu system**.  Choosing or changing a menu type now requires one less click to set up. 

  2.   **Third-party API**.  Third-party developers can now add their own options and parameters to menu items. 

  3.   **Accessibility for all**.  The new menu layouts are more accessible with clean, semantic markup.  The Joomla 1.5 legacy layouts will be included for backward compatibility, but the new ones will be so nice you'll want to upgrade.  Milkyway, the default template, will look the same in Joomla 1.6 (see Figure 21-2). 

Figure 21-2.  The Joomla 1.6 default frontend template

## Interface Enhancements

Upon installing Joomla 1.6 and logging in to the Administrator Backend, the first thing you'll notice is the new look (see Figure 21-3).  The new administrator template is called BlueStork (did you notice the bird on the cover of this book?);  it's a refreshing new design that's consistent with the look and feel of Joomla.org. 

Things have shifted around a bit to make them more logical for new users.  For example:

  1.   **The User Managernow has submenu items**.  With the new ACL, there are more options and now more shortcuts. 

  2.   **The Media Manageris now under the Content menu**.  Since all your media is essentially content, like your articles, it makes sense to relocate it here. 

  3.   **Tabbed interface for Article Parameters**.  Instead of one log list, parameters are now grouped logically. 

  4.   **The Menu Managernow displays menu aliases and the modules that are linked to specific menus**.  Going deeper, the menu items now include more options for moving and configuring as well as batch processing menu items. 

  5.   **The Article Managernow displays article aliases**.  This makes it easier to check for duplicate aliases in your content and improve SEO. 

  6.   **New toolbarbuttons**.  There are two new buttons: Save & New and "Save as a Copy."  The Save & New button saves the article you're working on and immediately creates a new article in edit mode.  The "Save as a Copy" button works like a word processor, allowing you to save a version of whatever you are working on as a separate copy. 

Figure 21-3.  The administrator control panel of Joomla 1.6

## ACL and User Permissions

One of the most exciting new aspects of Joomla 1.6 is the ACL, otherwise known as Access Control Levels.  This allows a site administrator to grant access to specific areas and functionality to groups or individual users.  The ACL now extends to both the frontend and the backend of your site so you can have the ultimate control over articles, categories, plug-ins, or menu items.  Also note that the default user groups in Joomla 1.5 will be the same ones set up in Joomla 1.6 to make things easy for users to understand. 

### Warning

The ACL in Joomla 1.6 is not backward compatible with the access levels in Joomla 1.5.  You'll need to check your access levels after you update to make sure they match what you want. 

Also the default user groups in Joomla 1.5 will be the same ones set up in Joomla 1.6 to make things easy for users to understand. 

In Joomla 1.5, you have three levels—Public, Registered, and Special.  In Joomla 1.6, your levels can be however you like, and by combining access Levels and groups, you can control access to everything.  Here's a brief summary that may help you grasp the concept of each if it isn't already clear. 

Groups

Groups are assigned to actions a user may perform.  Users are assigned to a group in order to perform specific actions. 

Access Levels

Levels are assigned to articles, categories, plug-ins, or menu items.  Groups can access specific levels if they are assigned to those levels. 

Users can be in multiple groups and levels can be associated with multiple levels. 

The Users menu (see Figure 21-4) contains a number of new items to manage not only user accounts but these new groups and levels as well. 

Figure 21-4.  The Users menu

To create a group:

  1.  Go to Users→Add New Group. 

  2.  Select the group parent if you want this group to inherit properties from other groups.  Add a new name for the group. 

  3.  On the right side, select the actions you want the group to be able to perform. 

  4.  Click Save. 

To add a user to a group, first make sure that you have created both the group and the user.  Then do the following:

  1.  Go to Users→User Manager. 

  2.  Find the user you want to add and click their username to edit. 

  3.  On the right side, select the groups you want the user to belong to. 

  4.  Click Save. 

To create an access level:

  1.  Go to Users→Add New Access Level. 

  2.  Select the section where you want the level to apply.  Add a new name for the access level. 

  3.  On the right side, select the user groups you want to permit access to this level. 

  4.  Click Save. 

To add a group to an access level, first make sure both the group and access level exist.  Then do the following:

  1.  Go to Users→Groups. 

  2.  Select the name of the group you want to edit. 

  3.  On the right side, select the actions you want the group to be able to perform. 

  4.  Click Save. 

### Note

Remember that these actions cascade.  If you give a group access to a particular category, they will have access to its contents even if article permissions are set otherwise. 

To assign an access level to a section:

  1.  Go to Users→Access Levels. 

  2.  Select the name of the access level you want to edit. 

  3.  On the right side, select the user groups you want to permit access to this level. 

  4.  Click Save. 

## Other Improvements

  1.   **Updated Mootools library**.  The Mootools JavaScript library will be updated to the latest version and will have increased compatibility with other JavaScript libraries such as jQuery. 

  2.   **Language file standards**.  All language files will be updated to the INI standard. 

  3.   **XML-RPC plug-inis gone**.  Don't worry, it isn't really gone.  It's just been removed as a plug-in and incorporated throughout Joomla 1.6 via protocol controllers. 

  4.   **New libraries added**.  There are a new series of libraries that extend form usage (JForm) and JavaScript internationalization. 

  5.   **Help is on the way**.  The new Help menu (see Figure 21-5) contains a bunch of online resources in case you need support, as well as links to other resources from the Joomla family of websites. 

Figure 21-5.  The Help menu

# Extension Compatibility

There is no _legacy mode_ in Joomla 1.6 like there is in Joomla 1.5, so Joomla 1.0 extensions are not compatible with Joomla 1.6.  Also, Joomla 1.5 extensions aren't compatible with Joomla 1.6.  There's no legacy support, but it's a simple upgrade for extension developers who have made their components truly Joomla 1.5 native. 

For information about specific extensions, we recommend that you consult the extension developer's website for the latest compatibility information. 

# Migrating to Joomla 1.6

Before installing or migrating to Joomla 1.6, you need to make sure your server meets the minimum system requirements: PHP 5.2+ and MySQL 5.0.4+.  You'll also want to make sure all the components you're using are compatible with Joomla 1.6 before you begin.  Check the website of the component developer for compatibility information. 

### Warning

There is no upgrade path for Joomla 1.0.x users wanting to upgrade to Joomla 1.6.  You will first need to migrate your site and extensions to Joomla 1.5 before upgrading. 

Currently, migrating from Joomla 1.5 to Joomla 1.6 is a multistage process:

  1.  Upload and run the installer like you would for Joomla 1.5.  It will ask you if you are upgrading from a previous version of Joomla.  Click Yes. 

  2.  The installer will copy your database tables and upgrade them to the new schema. 

  3.  You will be given a chance to log in to your Administrator Backend and test your upgrade to make sure it was successful before deleting your old tables. 

Keep in mind that Joomla 1.6 is in active development so this and all other elements are subject to change—hopefully for the better. 

# Summary

In this chapter, we've covered:

  * The major changes between Joomla 1.5 and Joomla 1.6

  * Extension compatibility

  * The requirements for hosting a Joomla 1.6 website

  * How to upgrade your website from Joomla 1.5 to Joomla 1.6

In the next chapter, we'll explore how to get involved with Joomla and its community. 

# Chapter 22.  Getting Involved

Joomla is an open source project and that means its progress depends on the contributions of its users—even users like you.  Here are a few key ways you can get involved in the Joomla Project. 

# Write or Translate a Tutorial or Documentation

The Joomla Documentation wiki (see Figure 22-1) is a living website for help documentation, tutorials, walkthroughs, and other helpful resources.  You can help it grow by writing about anything you think might help other users—novice or expert.  If you're not sure where to start, try looking in the wiki Cookie Jar to see a list of things we need help with. 

Members of the community translate Joomla into many world languages.  If your language isn't available, you can translate documentation, tutorials, or even Joomla itself into your language.  Visit our simple guidelines page to get started. 

# Test or Add a Comment to an Issue Report

We are always looking for more people to test patches, find or fix bugs, and help clarify issue reports on our bug tracker.  To help out, visit the bug tracker on JoomlaCode at <http://www.joomlacode.org> (see Figure 22-2).  If you have programming skills, we recommend you visit <http://developer.joomla.org/security.html> to inquire about joining the Joomla Bug Squad. 

Figure 22-1.  Joomla Documentation wiki

Figure 22-2.  JoomlaCode

# Develop an Extension or Template

One of Joomla's strengths is its extensibility and Joomla extensions provide users with specialized functionality.  The Joomla Extensions Directory (shown in Figure 22-3) at <http://extensions.joomla.org> is a great place to get an overview of the types of extensions developers are writing.  You can take an existing GPL extension and update it for the latest version of Joomla, fix bugs, or create a totally new component with cutting-edge technology.  The possibilities are limitless. 

Figure 22-3.  The Joomla Extensions Directory

If you're a designer and you don't know programming but do know some HTML and CSS, you can design your own templates.  Creating a slick template is easy and can be done in a simple text editor or Adobe Dreamweaver. 

# Join a Joomla Working Group

Hundreds of community members contribute by participating in Joomla Working Groups.  Each group focuses on a specific aspect of Joomla essential to the project's overall growth and all have formal expectations and goals.  Anyone interested in helping Joomla grow is encouraged to join a working group that fits with their talents and interests.  See the team pages and blogs to find out more about each group and how you can help:

  * Joomla Bug Squad

  * Community Workgroup

  * Production Workgroup

  * Documentation Workgroup

  * Extension Directory Editors

  * Sites and Infrastructure Workgroup/Forum Moderators

  * Translation Workgroup (Translations Forum)

# Help Out at a Joomla Event

Joomla events are held all the time around the world and staffed solely by volunteers.  You can contact your local Joomla User Group or check the Joomla Events page at <http://community.joomla.org/events.html> for upcoming events (see Figure 22-4). 

Figure 22-4.  Joomla Events on the Joomla Community Portal

# Contribute in Other Ways

There are a number of other ways individuals and companies can contribute to the Joomla Project.  To discuss the options not covered here, contact Open Source Matters at <http://www.opensourcematters.org>, the non-profit organization that manages financial and legal issues for the Joomla Project. 

# Summary

In this chapter, we've covered:

  * Various ways in which you can give back to the Joomla community by getting involved

# Appendix A. Installing and Upgrading

This chapter will give you everything you need to know about installing and upgrading Joomla.  In Chapter 2, we discussed how to install Joomla quickly using Fantastico, as well as why that method of installation is not the ideal way to install Joomla.  This chapter will show you the preferred way of installing Joomla. 

We understand that readers come from various backgrounds and may or may not have expertise in dealing with server environments.  Some parts may get a little technical, but we'll try to put away the super technical lingo and explain the process in simple terms everyone can understand. 

# Requirements

Even though Joomla may work on servers that do not meet the minimum specifications outlined in Table A-1, it is not advisable.  In fact, you should strive to have your server support the recommended requirements. 

Table A-1.  Requirements for Joomla 1.5.x

Software | Recommended | Minimum | Software website

---|---|---|---

PHP | 5.2+ | 4.3.10 | www.php.net

MySQL | 4.1.x+ | 3.23 | www.mysql.com

Apache | 2.x+ | 1.3 | www.apache.org

Microsoft IIS | 7 | 6 | www.iis.net

Even though Joomla will work on Microsoft IIS, it is not officially supported.  Joomla has been optimized for Apache, so use Microsoft IIS if it's your only choice. 

For up-to-date requirements, visit the official Joomla Technical Requirements page at <http://www.joomla.org/about-joomla/technical-requirements.html>. 

# Database Setup

The database is where all of the information for your website is stored.  In this appendix, we're going to create a database and database user, and then give that database user privileges to interact with the database. 

Since cPanel is the most popular hosting control panel, we will use it in our examples.  If you are not using cPanel, these instructions should loosely correspond to the process in your host's control panel.  You may need to consult your hosting provider for specific information. 

Let's get started by logging in:

  1.  Navigate to _http://www.  <yourdomain>.com/cpanel_. 

  2.  When prompted, enter in your login credentials.  If you don't know them, refer to any documentation that you may have received from your host when you signed up. 

  3.  Find and click the icon titled MySQL Databases.  The icon should look like Figure A-1, but, depending on your version of cPanel, it may be different. 

Figure A-1.  cPanel icon for MySQL Databases

  1.  In the New Database: field, enter _joomla_ or whatever you would like for a database name as shown in Figure A-2. 

Figure A-2.  New database

  1.  Click Create Database. 

  2.  On the success screen, click [ Go Back ] to return to the MySQL Databases screen. 

### Note

Make a note of the actual database name.  Typically, cPanel will prefix the database name with the account username. 

In our example, it created a database name of _joomlape_joomla_. 

  1.  In the Username: field, enter _joomla_ or whatever you would like for a database username as seen in Figure A-3. 

Figure A-3.  New database user

  1.  Enter a secure password. 

### Note

To generate strong random passwords, we like to use a website called <http://www.goodpassword.com>. 

It gives you lots of options for password length, character types, and even the option to exclude characters that can be confused with other characters. 

  1.  Click Create User. 

  2.  On the success screen, click [ Go Back ] to return to the MySQL Databases screen. 

### Note

Make a note of the actual username.  Typically, cPanel will prefix the database name with the account username. 

In our example, it created a username of _joomlape_joomla_. 

  1.  In the Add Users To Your Databases: section, ensure that the proper User: and Database: are selected.  An example is shown in Figure A-4. 

Figure A-4.  Add Users To Your Databases screen

  1.  Click Add User To Database. 

  2.  On the success screen, click [ Go Back ] to return to the MySQL Databases screen. 

That's it for the database setup.  Now, we're ready to begin uploading files. 

### Note

Write down the details you just created.  You'll need the username, password, and database name during the Joomla installation process. 

# FTP (File Transfer Protocol)

File Transfer Protocol, often referred to as FTP, is a protocol used for transferring files across the Internet.  You are already familiar with another protocol called Hypertext Transfer Protocol, or HTTP. 

We recommend using FileZilla if you don't already have an FTP client.  It is free and works on Windows, Mac OS X, and Linux. 

When you open up your FTP client, you will need to enter three pieces of information:

Host/Site

This tells your FTP client where to find your server.  Typically this is your domain name without the _http://www_.  An example might be _< yourdomain>.com_ or _ftp.  <yourdomain>.com_. 

Username

This tells your FTP client what login to use when connecting to your server.  This is typically the same as your cPanel login. 

Password

This tells your FTP client what password to use when connecting to your server.  This is typically the same as your cPanel password. 

Once logged in, you should a screen similar to Figure A-5.  There are many files and folders, but we are only going to concern ourselves with one of them.  The _public_html_ folder is where all of your website files will go.  When you go to a website, it looks for files in that folder to load.  On some servers this folder may not exist.  If it does not exist on your server, then look for _www_ , _httpdocs_ , or _htdocs_.  If none of those folders exist, contact your host to find out which folder you should put your website files in. 

### Note

You may have noticed in Figure A-5 that it has a _public_html_ and a _www_ folder.  Both of these are on our list.  How would you have known which one to choose?  The _www_ folder is not really a folder.  Actually it is a symbolic link that points to _public_html_.  Technically, either would be fine. 

Figure A-5.  Remote files in FTP client

Now we are ready to get some Joomla files. 

Go to <http://www.joomla.org/download.html> and download the latest version of Joomla to your desktop and unzip it. 

Upload the contents of the Joomla ZIP archive to the _public_html_ directory shown in Figure A-5.  This may take a while depending on your upload speed.  Once everything is uploaded, we're ready to begin the installation steps. 

### Note

Another way to get the Joomla source file uploaded to your server is to use File Manager within cPanel.  It also allows you to extract the archive with one click.  If you are familiar with this method, it might be faster. 

Don't close your FTP program just yet—there will be one final step at the end where you'll need it. 

# Web Installer

We're in the final steps of the process and minutes away from your very own Joomla website.  Navigate to your website's URL: _http://www.  <yourdomain>.com_. 

You should be greeted with the Joomla Web Installer screen like the one shown in Figure A-6. 

Figure A-6.  Joomla Web Installer: Language

The first step is to choose your language and click Next. 

The next step is a pre-installation checklist as shown in Figure A-7 to make sure you have what you need to run Joomla.  Assuming that everything in the Actual is in green, you can click Next to go to the next page.  If you do make any changes, you can click the Check Again button at the top of the page to refresh the screen. 

Figure A-7.  Joomla Web Installer: Pre-installation Check

Now we come to the License page seen in Figure A-8.  Joomla and many other open source projects use the GNU General Public License.  For this reason, you must agree to that license in order to use Joomla.  When you're finished reading, click Next. 

Figure A-8.  Joomla Web Installer: License

Now is when things might get a little more complicated.  Figure A-9 shows the Database Configuration screen. 

Figure A-9.  Joomla Web Installer: Database Configuration

In a previous step, we recommended you write down the database details so you could enter them here.  First, we need to fill out the Basic Settings:

Database Type

This is almost always _mysql_. 

Host Name

This tells Joomla where the database is located.  This is almost always localhost since MySQL typically runs on the same server as your website.  If localhost does not work, contact your host to obtain the host name for your database. 

Username

This is the username we created in step 7 in Database Setup. 

Password

This is the password to the username we created in that same step in that section. 

Database Name

This is the name of the database we created in step 4 of that section. 

Although not required, for security reasons it is best to click Advanced Settings and change the Table Prefix to something other than jos_.  This will prevent certain types of SQL injection hacks from working successfully.  Just pick three or four random letters followed by an underscore. 

### Note

Do not use bak_ as it is reserved for backup tables. 

Once everything is entered, click Next.  If you receive an error, click Previous and double-check your information. 

The next page, shown in Figure A-10, is for FTP Configuration.  Due to certain servers not creating files properly by the proper owner, Joomla has created an FTP layer.  In a perfect world, the FTP layer within Joomla would not be needed.  When enabled, Joomla will not create files on the server directly.  Instead, it will create them and then FTP them to themselves.  It may seem a little backward to complicate things, but it is a great solution for those who need it. 

If your server has something like _suEXEC_ installed, you probably do not need to have this enabled.  To play it safe, enable FTP.  Use Autofind FTP Path and Verify FTP Settings to automatically add and verify FTP information. 

The last step is the Main Configuration screen shown earlier in Figure A-3.  You'll need to decide a few things to complete the installation:

Site Name

This is the name of your website. 

Your E-mail

This is the email address that will be associated with the _admin_ user account. 

Admin Password

This is the password that you would like to set for the _admin_ user account. 

Install Default Sample Data

If you are new to Joomla, you may want to install the sample data by clicking the Install Sample Data button.  The sample data contains articles, menu items, and other forms of content that will display on your site.  Refer to Figures A-11 and A-12 to compare what the home page looks like with and without sample data.  If you're already comfortable with Joomla, you can choose to skip the sample content.  But if you're new to Joomla, you should probably install the sample data to get an idea of how things can be set up. 

The Load Migration Script option can be used to migrate from Joomla 1.0.x to Joomla 1.5.x, but the problem is that this is not a complete solution.  There will still be problems to fix and things to manually move over since it will not transfer everything.  Even once you get the data migrated, there are typically complications that may require you to rebuild your site in the latest version of Joomla. 

Once all the fields are filled out, click Next. 

Figure A-10.  Joomla Web Installer: FTP Configuration

Figure A-11.  Joomla Web Installer: Main Configuration

We're at the finish line—or the Finish page.  You need to delete your installation directory.  To do this, switch back to your FTP program. ( Did you already close it?  Just log back in.)  Now locate the _installation_ folder in Joomla's root (main) directory and delete it.  Return back to your browser and click Site. 

Figure A-12.  Joomla Web Installer: Finish

That's it.  You now have Joomla installed (see Figure A-12).  There are two important URLs to remember: _http://www.  <yourdomain>.com_ to access the frontend and _http://www.  <yourdomain>.com/administrator_ to access the Administrator Backend. 

# Local Web Servers

Some people prefer to develop their website locally on their computer, then migrate it to their web host when complete.  For some, this is much faster than developing it on a remote server since you do not have to rely on the speed of your Internet connection when interacting with the website.  Whether you are on a Windows machine or a Mac, there is a solution for you.  For Windows, use XAMP, and for Mac, use MAMP. 

Once either solution is installed, you will find that you have an Apache/MySQL/PHP web server on your computer ready for you to start building your Joomla website.  After the website is developed, you can easily move it from your local web server to your web host.  Refer to Site Backup/Migration: Perform Backups and Migrate Your Site Using JoomlaPack for instructions on moving your website from one server to another. 

# Upgrading

Upgrading Joomla is fairly straightforward.  Assuming that you are subscribed to receive Joomla announcements and security updates, you'll immediately know when an update is available.  Follow these steps to upgrade your website:

  1.  Back up your website. 

  2.  Refer to Site Backup/Migration: Perform Backups and Migrate Your Site Using JoomlaPack for instructions on how to use JoomlaPack in order to create a backup of your site. 

  3.  Download the latest patch by going to <http://www.joomla.org/download.html>.  You should find the latest available patch.  If you are upgrading from a much earlier versions, click on "Download other Joomla 1.5.x packages" to access patches from previous versions.  After downloading the update, extract its contents into Joomla's root (main) folder, overwriting the old files. 

This method has worked for every Joomla update thus far.  We cannot guarantee that all future versions will be this easy to upgrade, but it is fairly safe to say that they will be. 

# Appendix B. Choosing the Right Extensions

It has been said that cooks are only as good as the ingredients that they use.  We're not so bold as to say that your website is only as good as the extensions you use, but if you use the wrong extensions, you may set yourself up for heartache later. 

# Which Extension Is Right for Me? 

When looking for extensions, there are many questions to ask yourself.  This appendix will go through some of those questions that you should ask when choosing an extension.  You may also want to look at Chapter 18 to see if we have already spotlighted what we feel is the best extension for certain jobs. 

## What Do I Want the Extension to Do? 

There are thousands of extensions for Joomla.  Chances are that an extension already exists to do what you are looking for.  Getting a clear idea of what you want the extension to do will make your search a whole lot easier. 

You should first look at the Joomla!  Extensions Directory (JED) (which you can find at <http://extensions.joomla.org>).  Categories are broken out logically.  Most categories even have subcategories that focus on specific needs. 

If your requirements for an extension are very specific and do not have any areas that can be compromised, you may need to hire a programmer to write the extension for you.  This may be from scratch or using another extension as a starting point. 

## What Do Others Say About the Extension? 

One of the great features of the JED is that you have the ability to read user reviews of extensions.  This is your best source to read both positive and negative aspects about the extensions.  We don't recommend you rely solely on testimonials the developers post on their own websites to make your decision. 

## Am I Willing to Pay for the Extension? 

Some people new to Joomla are put off when they find they have to pay for some extensions.  Some people think that since Joomla is free, why shouldn't the extensions also be free? 

The truth is that it takes time to develop extensions.  The developers that write these extensions often devote huge amounts of time in order to provide a product for the world to use.  Some developers write and support extensions as their full-time job.  It only makes sense that they are compensated for their time. 

Most of the extensions that require payment to download have very reasonable prices.  You may think that $50 seems like a lot of money, but when you compare it to the hourly rate of hiring your own developer to build an equal product, you'll quickly discover that $50 is a bargain. 

We're not advocating that you should pay for all of your extensions or even that extensions you pay for are better than extensions that you do not pay for.  We're saying that if you find a specific extension that costs money and does what you need better than a free one, go with the one that costs a little money.  In the long run, we think you'll be glad that you did because of the support you'll receive. 

### Warning

We all know that software piracy is wrong, yet so many people do it. 

If you download a pirated version of an extension, there's no way to really know what you are actually downloading.  The person that pirated the software could have added their code to do something malicious.  Let's explore some of the consequences that might convince you not to pirate extensions.  A pirated copy of the extension could potentially do one of the following:

  * Email each of the users signed up on your website letting them know that the owner of the site likes to steal software. 

  * Blindly create a Super Administrator user for the hacker to log in to your website. 

  * Upload a file that could be used to completely delete your website. 

  * Give the hacker the ability to send spam from your server. 

To be honest, we haven't specifically heard of any of these things happening yet, but it is not hard to implement any of these scenarios.  It's just not worth the risk. 

## License

Almost all software made today is released with some license attached to it.  The license states what you can and cannot do with the software.  Some licenses are very restricting, while others are very free. 

Joomla is released under the GNU General Public License (GNU GPL).  The GNU GPL license gives you a lot of freedom when it comes to what you can do with the software.  All extensions listed on the Joomla Extensions Directory are licensed under GNU GPL. 

Not all extensions for Joomla are released under the GNU GPL license.  We are not going to open a GNU GPL debate in this chapter, but only state it's the Joomla Project's stance that extensions are derivative works and therefore should also be licensed under the GNU GPL.  As a Joomla user, you have to decide if you want to use extensions that adhere to Joomla's principles or if you're willing to veer away from the GNU GPL license when choosing extensions.  We're not going to make that decision for you, but we recommend you get as informed as possible and come to your own conclusion. 

### Note

To learn more about the GNU GPL, refer to the license information that is included in the root directory of every Joomla website.  Specific filenames are:

  *  _LICENSE.php_ for Joomla 1.5

  *  _LICENSE.txt_ for Joomla 1.6

Even if you read only the Preamble, it is worth it.  You will get a good basic understanding of what freedoms are given to you. 

## Is It Secure? 

Extensions listed on the JED are not audited for security issues.  This would be ideal, but the truth is that it would take a lot of manpower in order to do a security audit on every extension.  Following are some quick things that you can do in order to check for some basic security issues. 

At the top of the extension's PHP files, there should be a check to see if __JEXEC_ is defined.  This is to make sure that you cannot call the file directly since we want all files to be called through Joomla's main _index.php_ file.  For example:

    defined('_JEXEC') or die( 'Restricted access' );

Occasionally, there's a good reason why a file would need to be called directly.  If you do not see the `defined()` command in one or two files, you may want to check with the developer to make sure that it was done intentionally. 

`JRequest` should be used to request all variables.  If you see `$_REQUEST =` anywhere in your extension, you should be very cautious.  You may be vulnerable to SQL injections. 

Did you download the extension from a trusted source? 

## Can I Get Support if I Need It? 

Some extensions provide excellent support.  Some extensions provide no support.  The ability to obtain support, whether free or paid, is important if you ever have a problem.  If the developer's website looks like it has not been updated or the forum is full of unanswered questions, you can pretty much expect that you won't get any help from the developer if you have issues. 

## Is the Extension Encrypted? 

In the software industry, many companies encrypt their software so that the code is not visible.  Typically, this is done in order to preserve intellectual property.  In the open source world, people prefer their source code to be open without encryption.  If there's a problem with a component, we want to be able to fix it ourselves if we need to.  If there is something we wish worked a little differently, we want to be able to change it. 

For the most part, all extensions are open source.  There are some extensions that resort to encrypting a single file that performs checks to see if you legally purchased a license to use.  Depending on the type of encryption, you may have to have special software installed on your server to interpret it. 

# Where Can I Find an Extension Used in This Book? 

All of the extensions spotlighted in this book have a link to the website where it can be downloaded. 

As time goes by, we expect that some of those links will change or even disappear.  On the website that accompanies this book, www.usingjoomlabook.com, you will find all of the links referenced in this book.  If a link from the book changes or no longer works, we will update it on our website to point to its new location. 

# Appendix C. Developing for Joomla

If you're reading this appendix, we'll assume that you know a little something about programming.  Your knowledge may not be in PHP, but we'll assume you understand basic programming methodologies.  Even if you have a minimum of programming experience, we hope this appendix helps. 

We also hope that while reading this book and seeing what a great content management system (CMS) Joomla is, that you'll use it and eventually take the next step and contribute to the project in some way.  If programming is your niche, there are plenty of places where we would be glad for you to help out. 

First, we want to give you some examples of the power behind the Joomla Framework as well as some resources to help you on your developing journey. 

# Joomla Framework

Most people would say that Joomla is a CMS.  We like to think of Joomla as two separate parts.  Yes, there is the CMS part.  More important, however, Joomla is a framework. 

When Joomla moved from version 1.0.x to 1.5.x, a big shift was made at the heart of the codebase.  Joomla 1.0.x was a couple of class files and one really big _joomla.php_ file that contained a lot of functions and classes you could call.  It seemed like spaghetti to us. 

Along came Joomla 1.5.x and things took a different direction.  Classes were broken out into self-contained objects that together make up the Joomla Framework.  In theory, with a little effort you could take the Joomla Framework out of the Joomla CMS and build your own CMS on top of it.  We say "in theory" only because we don't think anyone has done it yet in the scale of a full CMS.  We have pulled bits and pieces of the framework out in accordance with the GPL license and used it in projects as needed, but not the entire framework. 

From a Joomla developer standpoint, having a robust object-oriented framework like the Joomla Framework speeds up extension development dramatically. 

## JDatabase Example

Let's start with a basic example.  If you want to execute a query within your database using Joomla, you do not have to spend your time writing code to open and verify a proper connection to your database.  By using the Joomla Framework, it only takes one line to create the database object:

    1    $db =& JFactory::getDBO();

The Joomla Framework has done all of the work for you.  Now that you have the database object, you are free to run your queries as you see fit.  Here is a full example of how we will query the database for a list of all users including their user type:

    1 $db =& JFactory::getDBO();
    2 $db->setQuery("SELECT name, usertype FROM #__ users");
    3 $users = $db->loadObjectList();
    4
    5 foreach($users as $user)
    6 {
    7     echo '<div>'.$user->name. '&apos;s user type is '.$user->usertype. '.</div>';
    8 }

The above code will output something like:

    Ken Crowder's user type is Super Administrator. 
    Ron Severdia's user type is Super Administrator. 

That was fun.  Let's have a look at it line by line and talk about what is going on:

Line 1

As discussed before, this creates an instance of the database object and assigns it to the `$db` variable. 

Line 2

The query is locked and loaded into the database object.  Remember that the database table should always start with _#___.  When the query is set, _#___ is replaced with your database prefix set in _Global Configuration_. 

Line 3

The query is executed and the results are returned.  In our case, we decided to use `loadObjectList()` to return the results back as a list of objects. 

Lines 5–8

This _foreach_ loop loops through each user and displays their name and user type. 

### Note

<http://api.joomla.org/Joomla-Framework/Database/JDatabaseMySQL.html> has more information on JDatabase. 

## JRequest Example

Another example of why a solid framework is a great thing can be found in the `JRequest` class.  In the effort to prevent SQL injections and other forms of hacking that involve stuffing the URL with malicious code, developers need a way to sanitize every variable they request from the URL.  This can be a very cumbersome task.  Using the Joomla Framework and the `JRequest` class, all of the hard work is already done for you. 

Here is an example:

    1 $id = JRequest::getVar('id', 0, '', 'int');

This line gets the `id` variable from `$_REQUEST['id']` and sanitizes it.  If there is no value, it defaults to 0.  The empty string could have contained a hash to be used to tell `getVar` not to use `REQUEST` but to use `GET`, `POST`, `FILES`, `COOKIE`, `ENV`, or `SERVER` instead.  Lastly, int forces the returned value to be an int.  This line of code is commonly used to get the ID of the article or of some other object that is needed. 

Developers not properly using JRequest are the cause of many vulnerabilities in third-party extensions. 

### Note

<http://api.joomla.org/Joomla-Framework/Environment/JRequest.html> has more information on JRequest. 

## JDocument Example

In this short example, we will show how easy it is to add a stylesheet and a JavaScript file to the head tags of your page from within an extension:

    1 $document =& JFactory::getDocument();
    2 $document->addScript("components/com_myext/assets/js/script.js");
    3 $document->addStyleSheet("components/com_myext/assets/css/stylesheet.css");

### Note

<http://api.joomla.org/Joomla-Framework/Document/JDocument.html> has more information on JDocument. 

Pretty simple, huh?  These examples are just the beginning.  To see all that the Joomla Framework has to offer, take a closer look at the Joomla 1.5 API Reference or do what we like to do and jump into the code itself.  The files that make up the Joomla Framework can be found in your Joomla 1.5.x installation by navigating to _libraries/joomla_ from Joomla's root directory. 

# Developer Resources

Following is a list of websites that will help you on your path to learning about Joomla extension development:

Joomla!  1.5 API Reference (<http://api.joomla.org>)

Created with phpDocumentor, this API reference gives you a visual look at the Joomla Framework to better understand what each piece of the puzzle does without staring at source code.  Of course, if you drill down far enough in each section, you will eventually get to the source code. 

Joomla!  Developer (<http://developer.joomla.org>)

This website serves as a place for developers to find resources, as well as find ways to get involved. 

Joomla!  Extensions Directory (<http://extensions.joomla.org>)

Commonly referred to as the JED, this website is your one-stop shop for finding thousands of GPL extensions designed for Joomla.  After you have written your first extension and feel that others in the community will benefit from it, add it to the extensions directory to make it easier to find. 

JoomlaCode (<http://joomlacode.org>)

This is a forge site that allows developers to create accounts for the purpose of developing and distributing open source extensions for Joomla. 

Joomla Bug Tracker (<http://joomlacode.org/gf/project/joomla/tracker>)

This page contains a list of all of the outstanding bugs that exist in Joomla.  If you see one that you think you can fix, give it a shot. 

Joomla Forum–Joomla!  1.5 Coding (<http://forum.joomla.org/viewforum.php?f=304>)

This forum is for asking Joomla 1.5 coding questions.  When asking a question, try to give as much detail as possible. 

Joomla!  CMS Development (<http://groups.google.com/group/joomla-dev-cms>)

This Google Groups discussion centers on development for Joomla's core package.  It should not be used as a place to ask support type questions. 

Now that you have a couple of examples and a list of resources to get you going, we encourage you to get involved.  Learn the Joomla Framework, write a little extension, write another, and maybe another.  Once you feel comfortable enough, visit the Joomla Bug Tracker and see if you can help fix some bugs.  You will find that developing extensions and helping find and fix bugs in Joomla can be very rewarding.  The more you do this, the more people will take notice.  You might even find yourself on the Joomla Bug Squad some day. 

# Appendix D. Tips and Tricks

Over the years, we have learned a lot about Joomla—its power, its limitations, and most of all, its quirks.  We will share some of those quirks in this appendix.  Some quirks are actually cool tricks if you learn to use them. 

# How to Tell if a Website Is Running Joomla

There are several things you can do to see if a website is running Joomla.  Unfortunately, some people will try to obscure certain things to make some of the methods mentioned not work, so we'll share some of those tricks as well. 

## generator meta tag

The easiest method is to view the website's source code.  If you see the following line, you can be sure that you are looking at a Joomla website:

    <meta name="generator" content="Joomla!  1.5 - Open Source Content Management" />

### Note

To prevent your website from showing the contents of the generator meta tag, add the following to your template's _index.php_ file on the line after the check to see if `_JEXEC` is defined:

    $this->setGenerator();

This will not completely remove the generator meta tag, but it will remove _Joomla!  1.5-Open Source Content Management_ from displaying.  We cannot completely remove the tag without a hack since the shell of this meta tag is hardcoded in the framework. 

## /administrator

It's too easy, right?  Just like you type _/administrator_ at the end of your domain name URL in order to access the Administrator Backend, so do all other Joomla users. 

If you see a Joomla Administrator login screen, you can confirm it's a Joomla website. 

### Note

Unfortunately, there is no easy way to change the administrator directory.  You can password protect the administrator folder, but if someone types _/administrator_ and gets a password-protected folder, they will be able to conclude that you are likely running a Joomla website. 

## tp=1

We just discussed this feature in detail in View All of the Module Positions in Chapter 9.  Go to _http://www.  <otherwebsite>.com/index.php?tp=1_. 

If you see module positions overlayed on the screen, the site is a Joomla website. 

### Note

For directions on preventing this check from working on your site, please refer to Chapter 20. 

## Check for Default Joomla Template

By adding the `template=<nameoftemplate>` parameter to the end of a Joomla URL, you can change the template for that page.  If it works, the person is using a Joomla website. 

Navigate to one of the following URLs:

  *  _http://www.  <otherwebsite>.com/index.php?template=rhuk_milkyway_

  *  _http://www.  <otherwebsite>.com/index.php?template=beez_

  *  _http://www.  <otherwebsite>.com/index.php?template=ja_purity_

### Note

For directions on preventing this check from working on your site, please refer to Chapter 20. 

## View a Core XML File

Joomla uses XML files to install components, manage parameter types, and more.  If we are able to pull up a core XML file, it can be assumed that the website we are viewing uses Joomla. 

Go to _http://www.  <otherwebsite>.com/administrator/components/com_content/content.xml_. 

### Note

For directions on preventing this check from working on your site, please refer to Chapter 20. 

## View the robots.txt File

Since all Joomla websites have a _robots.txt_ file, this is an easy one to test. 

Navigate to _http://www.  <otherwebsite>.com/robots.txt_. 

If you see they do have a _robots.txt_ file, compare it with the text below.  If it matches, you are looking at a Joomla website:

    1 User-agent: *
    2 Disallow: /administrator/
    3 Disallow: /cache/
    4 Disallow: /components/
    5 Disallow: /images/
    6 Disallow: /includes/
    7 Disallow: /installation/
    8 Disallow: /language/
    9 Disallow: /libraries/
    10 Disallow: /media/
    11 Disallow: /modules/
    12 Disallow: /plugins/
    13 Disallow: /templates/
    14 Disallow: /tmp/
    15 Disallow: /xmlrpc/

### Note

To disable this on your website, delete your _robots.txt_ file.  Even though this sounds like an easy thing to do, we don't recommend it.  We think the benefits of having a robots.txt file outweigh the downsides of not having one.  More information on _robots.txt_ can be found in Blocking Search Engines. 

## View Their configuration.php-dist File

Since all Joomla websites come with a _configuration.php-dist_ file, this is another easy one to test.  Navigate to _http://www.  <otherwebsite>.com/configuration.php-dist_. 

### Note

To disable this on your website, delete your _configuration.php-dist_ file.  After installation, this file is no longer needed, so there's no harm in deleting it. 

# What Is Key Reference Anyway? 

You may have noticed the _Key Reference_ parameter under Parameters (Advanced) when creating or editing an article.  Most people ignore it since they're not sure what it's for. 

You may not know it, but if you have clicked a Help icon on any of the Administrator pages, you are using the Key Reference feature. 

Typically, when you reference an article in Joomla, you pass the article's _id_ , which tells Joomla what article to load.  Instead of using the _id_ , you can use the Key Reference field. _ index.php?option=com_content &view=article&id=5&Itemid=2_ is what a typical URL looks like. 

In the installation sample data, article ID 5 is the _Joomla!  License Guidelines_.  Figure D-1: Key Reference") shows the Key Reference field for our article.  We entered _license_ in the text box and saved it. 

Figure D-1.  Article–Parameters (Advanced): Key Reference

Now we go to _index.php?option=com_content &view=article&Itemid=2&task=findkey&keyref=license_ to access the page. 

The two new parameters in the URL are:

task=findkey

By setting _task_ to _findkey_ , you are telling Joomla to look for a _keyref_ parameter and load that article. 

keyref=license

By setting _keyref_ to _license_ , you are telling Joomla to load the article that has a _Key Reference_ of _license_. 

You may be asking yourself, "Why you would I want to do this?"  The Joomla Administrator Backend uses Key Reference, so we'll use that in our example.  Assume that the Joomla help articles were not set up to use Key Reference, but rather had article IDs hardcoded.  They would be forced to maintain the same article ID for that help screen.  If they only "referenced" a particular help screen, then they could easily reference a new article without having to worry about backward compatibility.  Furthermore, Joomla allows you to change the language of your Help files by loading them from a different website.  Since they use Key Reference, it is a lot easier to make this work.  Other websites do not have to match up article IDs, but rather just make sure the Key Reference is the same. 

# Showing Component Area Without Modules

Occasionally, you will need to load just the component area of a certain page without all of the modules and other HTML that surrounds the component. 

In previous versions of Joomla, you could do this by using _index2.php_ instead of _index.php_.  People may not be aware, but _index2.php_ has been deprecated in Joomla 1.5 and does not even exist in Joomla 1.6. 

Instead of using _index2.php_ , you should start adding the following to your URLs:

    tmpl=component

This gives you the ability to isolate just the primary content on a page. 

# Index

### A note on the digital index

A link in an index entry is displayed as the section title in which that entry appears.  Because some sections have multiple index markers, it is not unusual for an entry to have several links to the same section.  Clicking on any link will take you directly to the place in the text in which the marker appears. 

### Symbols

/administrator, /administrator
_JEXEC, Is It Secure? 

### A

Access Control Levels (ACL), future improvements, ACL and User Permissions
Access Level parameter, Basic Article Parameters
access levels, Menu Item Details, ACL and User Permissions

about, Menu Item Details
future improvements to Joomla, ACL and User Permissions
accessibility, future improvements to Joomla, Menu Manager
accounts, creating, Creating an Account
ACL (Access Control Levels), future improvements, ACL and User Permissions
Activate Parent option, Other Parameters
adding, Customizing Articles, Customizing Articles, Add Your Site Map to an Article Using the Content—Load Module Plug-in, Adding Images, Adding and Editing Users, Contact Information, Adding an Image, Adding a Product, Adding an Event, Adding a Mini-Calendar, Adding a Category, Adding a Profile Tab, Adding Profile Fields, Add a Moderator, Adding a Search Box

events, Adding an Event
image categories, Adding a Category
images, Customizing Articles, Adding Images, Adding an Image
mini-calendars, Adding a Mini-Calendar
moderators in discussion forums, Add a Moderator
pagebreaks, Customizing Articles
products to e-commerce sites, Adding a Product
profile fields in Community Builder, Adding Profile Fields
search box, Adding a Search Box
site maps to articles, Add Your Site Map to an Article Using the Content—Load Module Plug-in
tab profiles in Community Builder, Adding a Profile Tab
users, Adding and Editing Users, Contact Information
addresses, formatting, Contacts
admin passwords, recovering, Recover Your Admin Password
/administrator, /administrator
Administrator Backend, Frontend Versus Backend, A Tour of the Administrator Panel, Summary, Control Panel, Administrator Menus, Help, Administrator Modules, Main Toolbar, Article Filtering and Display, Administrator Backend, Interface Enhancements

about, Administrator Backend
Administrator Menus, Administrator Menus, Help
Administrator Modules, Administrator Modules
Article Manager, Article Filtering and Display
Control Panel, Control Panel
defined, Frontend Versus Backend
future improvements, Interface Enhancements
top toolbar, Main Toolbar
Administrator Menus, Administrator Menus, Help, Site, Menus, Content, Components, Extensions, Tools, Help

components, Components
content, Content
extensions, Extensions
Help drop-down menu, Help
Menus drop-down, Menus
Site drop-down menu, Site
Tools drop-down menu, Tools
Administrator Modules, Administrator Modules, Built-in Administrator Modules, Navigation Modules, User Modules, News Modules

about, Administrator Modules
built-in, Built-in Administrator Modules
navigation modules, Navigation Modules
news modules, News Modules
user modules, User Modules
administrators, User Permissions, Assigning a Language Pack to the Site or Administrator, Database and Super Administrator Passwords Should Not Be the Same, /administrator

/administrator, /administrator
assigning language packs to, Assigning a Language Pack to the Site or Administrator
Super Administrators, Database and Super Administrator Passwords Should Not Be the Same
user permissions, User Permissions
Administrators, Create a New Super Administrator User

Super Administrators, Create a New Super Administrator User
Advanced Article Parameters, Article Parameters Hierarchy, Advanced Article Parameters, Advanced Article Parameters
aggregator, defined, Comments: Set Up User Comments Using JXtended Comments
aliases, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Details

links, Menu Item Manager: Menu Item Types Explained, Controlling Layout
SEF URLs, Menu Item Details
Announcements Forum, Keep Joomla Updated
Apache web server, System Requirements, SEO Settings, Requirements

installation, System Requirements
requirements, Requirements
settings, SEO Settings
APIs, Menu Manager, Developer Resources

Joomla!  1.5 API Reference, Developer Resources
third-party APIs, Menu Manager
archiving, Archiving Articles, The Front Page Manager, Article Manager

articles, Archiving Articles, Article Manager
items from within Front Page Manager, The Front Page Manager
Article Layout menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Parameters
Article Manager, Control Panel, Content, Article Filtering and Display, Article Manager Filtering and Ordering, Article Manager, Interface Enhancements

about, Control Panel, Content, Article Filtering and Display
filtering and ordering, Article Manager Filtering and Ordering
future improvements, Article Manager, Interface Enhancements
articles, Sections, categories, and articles, Sections, categories, and articles, Article Filtering and Display, Article Filtering and Display, Sections, Categories, and Articles, Articles As Building Blocks, Permanently Delete Trashed Articles, Articles As Building Blocks, Creating Articles, Customizing Articles, Customizing Articles, Customizing Articles, Customizing Articles, Article Publishing and Unpublishing, Article Publishing and Unpublishing, Article Parameters, Global Check-in, Filtering Articles, Ordering Articles, Permissions, Article Permissions, Archiving Articles, Unarchiving an Article, Trashing Articles, Restoring Trashed Articles, Permanently Delete Trashed Articles, The Front Page Manager, Ordering Front Page Articles, Removing Front Page Articles, Add Your Site Map to an Article Using the Content—Load Module Plug-in, Article Modules, Showing a Module Inside an Article, Using Media in Your Articles, Labeling Your Articles, Interface Enhancements

about, Sections, Categories, and Articles, Articles As Building Blocks
adding site maps, Add Your Site Map to an Article Using the Content—Load Module Plug-in
archiving, Archiving Articles
article modules, Article Modules
creating, Creating Articles, Customizing Articles
customizing, Customizing Articles, Customizing Articles
defined, Sections, categories, and articles, Sections, categories, and articles
deleting, Permanently Delete Trashed Articles, The Front Page Manager
deleting front page articles, Removing Front Page Articles
displaying, Article Filtering and Display
editing, Customizing Articles
filtering, Article Filtering and Display, Filtering Articles
labeling, Labeling Your Articles
ordering, Ordering Articles
ordering front page articles, Ordering Front Page Articles
parameters, Article Parameters, Global Check-in, Interface Enhancements
permissions, Permissions, Article Permissions
publishing, Article Publishing and Unpublishing
restoring, Restoring Trashed Articles
showing modules inside, Showing a Module Inside an Article
trashing, Trashing Articles
unarchiving, Unarchiving an Article
unpublishing, Article Publishing and Unpublishing
using media in, Using Media in Your Articles
assigning, Assigning Modules, Assigning the Default Template, Assigning a Template to Specific Site Sections, Assigning a Language Pack to the Site or Administrator, Assigning a Language Pack to a Single User

language packs, Assigning a Language Pack to the Site or Administrator, Assigning a Language Pack to a Single User
modules, Assigning Modules
templates, Assigning the Default Template, Assigning a Template to Specific Site Sections
authentication plug-ins, Plug-in Types, Plug-in Types, Built-in Plug-ins
authors, Basic Article Parameters, User Permissions

parameter, Basic Article Parameters
user permissions, User Permissions
auto purge messages, Private Messaging Configuration

### B

backend, Frontend Versus Backend, A Tour of the Administrator Panel

(see also Administrator Backend)
defined, Frontend Versus Backend
backing up, Site Backup/Migration: Perform Backups and Migrate Your Site Using JoomlaPack, Other Extension Options, Backing Up Your Website, Backup Often, Backup Often

Joomla, Backup Often, Backup Often
sites, Site Backup/Migration: Perform Backups and Migrate Your Site Using JoomlaPack, Other Extension Options
websites, Backing Up Your Website
backlinks, Built-in Plug-ins
banners, Banners
Basic Article Parameters, Basic Article Parameters
BBC (blind carbon copy), email, Mass Mail
Beez template, The Template Manager
best practices, security, Best Practices, More Information
bfForms, Forms: Create Custom Forms to Collect and Store Information with bfForms, Other Extension Option
bfForms extension, Forms: Create Custom Forms to Collect and Store Information with bfForms, Other Extension Option
blind carbon copy (BBC), email, Mass Mail
block users, User Details
blocking search engines, Blocking Search Engines
blogging example, Blog: Blogging Functionality Built In
browsing directories, Prevent directory browsing
built-in Administrator Modules, Navigation Modules, User Modules, News Modules

navigation modules, Navigation Modules
news modules, News Modules
user modules, User Modules
built-in components, Built-in Components: Banners, Contacts, News Feeds, Polls, Search, and Web Links, Other Built-in Components in the Extension Manager, Banners, Categories, Clients, Contacts, News Feeds, Polls, Search, Web Links

banners, Banners
categories, Categories
clients, Clients
contacts, Contacts
news feeds, News Feeds
polls, Polls
search, Search
Web Links, Web Links
built-in frontend modules, Built-in Frontend Modules, Moving Modules, Article Modules, Component Modules, Feed Modules, User Modules, Creating Modules, Assigning Modules, Duplicating Modules, Deleting Modules, Moving Modules

article modules, Article Modules
assigning, Assigning Modules
component modules, Component Modules
creating, Creating Modules
deleting, Deleting Modules
duplicating, Duplicating Modules
feed modules, Feed Modules
moving, Moving Modules
user modules, User Modules
built-in plug-ins, Built-in Plug-ins, Built-in Plug-ins

### C

caching, Cache Settings, Advanced Parameters, Other Built-in Components in the Extension Manager, Built-in Plug-ins

Cache Manager, Other Built-in Components in the Extension Manager
modules, Advanced Parameters
plug-in, Built-in Plug-ins
settings for, Cache Settings
calendaring example, Calendaring/Event Management: Manage and Share Online Calendars with JCal Pro, Other Extension Options
categories, Sections, categories, and articles, Sections, Categories, and Articles, Category Manager Overview, Uncategorized Sections and Categories, Category Permissions, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Parameters, Categories, Built-in Plug-ins, Setting Up Review Sections and Categories in Joomla, Setting Up a Review Category in JReviews, Create a Podcast Category, Setting Up a Forum Category, Article Manager

about, Sections, Categories, and Articles, Categories
Category Blog Layout menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Parameters
Category List Layout menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
Category Manager, Category Manager Overview, Uncategorized Sections and Categories
defined, Sections, categories, and articles
discussion forums, Setting Up a Forum Category
future improvements to Joomla, Article Manager
permissions, Category Permissions
podcasts, Create a Podcast Category
reviews, Setting Up Review Sections and Categories in Joomla, Setting Up a Review Category in JReviews
search plug-in, Built-in Plug-ins
channels, iTunes, Setting Up Your iTunes Channel
check-in, articles, Global Check-in
chrome, module, Module Chrome
Clean Cache tool, Clean Cache
clients, Clients
CMS (content management system), Using a CMS: Static Versus Dynamic, Joomla Framework

about, Using a CMS: Static Versus Dynamic
Joomla as, Joomla Framework
code, Prevent Code from Being Stripped Out of the Editor, Built-in Plug-ins

non-compliant and GeSHi plug-in, Built-in Plug-ins
stripped out of articles, Prevent Code from Being Stripped Out of the Editor
code editor, future improvements to Joomla, Article Manager
Code Highlighter plug-in, Built-in Plug-ins
commenting on Joomla, Test or Add a Comment to an Issue Report
comments, Comments: Set Up User Comments Using JXtended Comments, Extension Manager

future improvements to Joomla, Extension Manager
users, Comments: Set Up User Comments Using JXtended Comments
community building example, Building a Community: Extend User Profiles and Functions with Community Builder, Other Extension Option
compatibility, Built-in Plug-ins, ACL and User Permissions, Extension Compatibility

ACL, ACL and User Permissions
extensions, Built-in Plug-ins, Extension Compatibility
component area, showing without modules, Showing Component Area Without Modules
component parameters, Parameters (Component), Parameters (Component)
components, Components, Components, Components, Summary, Extending Joomla with Extensions and Compatibility, Banners, Categories, Clients, Contacts, News Feeds, Polls, Search, Web Links, Third-Party Components: How to Install, Component Modules, JDOC Statements

about, Components, Components
banners, Banners
categories, Categories
clients, Clients
component modules, Component Modules
contacts, Contacts
extensions, Extending Joomla with Extensions and Compatibility
news feeds, News Feeds
polls, Polls
search, Search
statements, JDOC Statements
third-party components, Third-Party Components: How to Install
Web Links, Web Links
conditionals, templates, Template Conditionals
configuration, Global Configuration, Built-in Plug-ins, Private Messaging Configuration, Configuration and Access Options, Discussion Forum: Set Up an Integrated Discussion Forum Using Kunena, Configuration File

(see also Global Configuration)
configuration file, Configuration File
JReviews, Configuration and Access Options
Kunena extension, Discussion Forum: Set Up an Integrated Discussion Forum Using Kunena
private messages, Private Messaging Configuration
SEF, Built-in Plug-ins
Configuration Manager, Other Built-in Components in the Extension Manager
configuration.php file, System Info
configuration.php-dist file, View Their configuration.php-dist File
contacts, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Contacts, Built-in Plug-ins, Contact Information

about, Contacts
Contacts menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
search plug-in, Built-in Plug-ins
user information, Contact Information
content, Add Sample Content or Not, Site Content, Content, Preparing Your Content, Summary, Planning, Creating, and Organizing Your Content, Section Manager Overview, Copying Sections, Category Manager Overview, Uncategorized Sections and Categories, The Front Page Manager, Removing Front Page Articles, Frontend Versus Backend Editing, Submitting Content on the Frontend, Submit a New Web Link on the Frontend, Menu Structure Versus Content Structure, Plug-in Types, Reindexing Your Content, Content Tagging: Organize and Connect Related Content Using JXtended Labels, Other Extension Options, Web Installer

(see also articles)
about, Site Content, Content
adding sample content during installation, Add Sample Content or Not
Category Manager, Category Manager Overview, Uncategorized Sections and Categories
content tagging example, Content Tagging: Organize and Connect Related Content Using JXtended Labels, Other Extension Options
Front Page Manager, The Front Page Manager, Removing Front Page Articles
frontend versus backend editing, Frontend Versus Backend Editing
installing sample data, Web Installer
menu structure versus content structure, Menu Structure Versus Content Structure
planning, Planning, Creating, and Organizing Your Content
plug-ins, Plug-in Types
reindexing, Reindexing Your Content
Section Manager, Section Manager Overview, Copying Sections
submitting on frontend, Submitting Content on the Frontend, Submit a New Web Link on the Frontend
Content Maps, JXtended Finder extension, Power Search: Powerful Site Searches with JXtended Finder
Content Page, Other Built-in Components in the Extension Manager
Content–Load Module plug-in, Add Your Site Map to an Article Using the Content—Load Module Plug-in, Built-in Plug-ins
Content–Page Navigation plug-in, Built-in Plug-ins
Content–Rating plug-in, Built-in Plug-ins
contributing to Joomla, Getting Involved, Summary
Control Panel, Control Panel, Other Built-in Components in the Extension Manager
converting sites to Joomla, Hands-on: Converting a Site to Joomla, Summary, Designing Your Website, Finding Zones in Your Design, Preparing the HTML and CSS, Hands-on Walkthrough, Uploading Your Template

designing websites, Designing Your Website
example, Hands-on Walkthrough, Uploading Your Template
finding zones, Finding Zones in Your Design
HTML and CSS, Preparing the HTML and CSS
copying, Copying Sections, Copying Categories

categories, Copying Categories
sections, Copying Sections
countModule method, Template Conditionals
cPanel, Installing Joomla Using Fantastico, Database Setup

database setup, Database Setup
installing Joomla, Installing Joomla Using Fantastico
creating, Creating Sections, Creating Categories, Creating Articles, Customizing Articles, Create the Site Map, Using ItemID to Create Internal Links, Creating Modules, Creating a Menu Module, Creating a Custom HTML Module, Creating an Account, Creating a Language Pack, Creating a Language Pack, Creating a Calendar, Creating a Calendar Menu Item, Creating Event Categories, Creating a Folder, Creating a Menu Link, Creating a User List, Create a Podcast Category, Create a Podcast Menu Item, Create a Menu Link to Your Forum, Planning and Creating Your Labels, Creating a Tag Cloud, Create a New Super Administrator User

accounts, Creating an Account
articles, Creating Articles, Customizing Articles
calendar menu items, Creating a Calendar Menu Item
calendars, Creating a Calendar
categories, Creating Categories
event categories, Creating Event Categories
folders in document libraries, Creating a Folder
HTML modules, Creating a Custom HTML Module
internal links, Using ItemID to Create Internal Links
Label Clouds (Tag Clouds), Creating a Tag Cloud
labels for content tagging, Planning and Creating Your Labels
language packs, Creating a Language Pack, Creating a Language Pack
menu links in document libraries, Creating a Menu Link
menu links to discussion forums, Create a Menu Link to Your Forum
menu modules, Creating a Menu Module
modules, Creating Modules
podcast categories, Create a Podcast Category
podcast menus, Create a Podcast Menu Item
sections, Creating Sections
site maps, Create the Site Map
Super Administrators, Create a New Super Administrator User
user lists in Community Builder, Creating a User List
criteria, reviews, Setting Up Review Criteria
CSS, Template Folder Structure, Template Parameters, Preparing the HTML and CSS

converting sites to Joomla, Preparing the HTML and CSS
folder for, Template Folder Structure, Template Parameters
customizing articles, Customizing Articles, Customizing Articles

### D

databases, System Requirements, Database Settings, Do Not Use jos_ As Your Database Prefix, Database Setup

jos_ as database prefix, Do Not Use jos_ As Your Database Prefix
MySQL, System Requirements
setting up, Database Setup
settings, Database Settings
debugging, Debug Settings, Built-in Plug-ins

settings for, Debug Settings
system using Global Configuration plug-in, Built-in Plug-ins
defaults, Site Settings, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Assigning the Default Template, The Language Manager, Creating a Language Pack, Check for Default Joomla Template

default template, Assigning the Default Template, Check for Default Joomla Template
language, The Language Manager, Creating a Language Pack
menu items, Menu Item Manager: Menu Item Types Explained, Controlling Layout
WYSIWYG editor, Site Settings
deleting, Permanently Delete Trashed Articles, The Front Page Manager, Removing Front Page Articles, Advanced Parameters, Permanently Delete Menu Items, Deleting Modules, Removing a Template, Navigating Views and Managing Media, Deleting Media, Removing an Image, Creating a Language Pack, Uninstalling Extensions

(see also purging messages; uninstalling; unpublishing)
articles, Permanently Delete Trashed Articles, The Front Page Manager
front page articles, Removing Front Page Articles
image folders, Navigating Views and Managing Media
images, Removing an Image
language files, Creating a Language Pack
media, Deleting Media
menu items, Permanently Delete Menu Items
modules, Deleting Modules
templates, Removing a Template
whitespace from menu's HTML tags, Advanced Parameters
developing for Joomla, Developing for Joomla, Developer Resources
directories, Installing Joomla Using Fantastico, Template Folder Structure, Navigating Views and Managing Media, Install from Directory, Troubleshooting, System Info, Creating a Folder, Directory Permissions, Prevent directory browsing, Directory Permissions, /administrator

administrator directory, /administrator
creating folders in document libraries, Creating a Folder
deleting image folders, Navigating Views and Managing Media
directory browsing, Prevent directory browsing
installing extensions from, Install from Directory
installing on, Installing Joomla Using Fantastico
permissions, Troubleshooting, System Info, Directory Permissions, Directory Permissions
template folder structure, Template Folder Structure
discussion forums, Discussion Forum: Set Up an Integrated Discussion Forum Using Kunena, Other Extension Options
displaying articles, Article Filtering and Display
DOCTYPE, Anatomy of a Template File
document libraries example, Document Library: Create Online Document Storage Using RokDownloads, Other Extension Options
documentation, helping write Joomla documentation, Write or Translate a Tutorial or Documentation
documents, downloading in document libraries, Latest Downloads List
domains, installing on, Installing Joomla Using Fantastico
downloading documents in document libraries, Latest Downloads List
duplicating modules, Duplicating Modules
dynamic website structure versus static website structure, Using a CMS: Static Versus Dynamic

### E

e-commerce example, E-Commerce: Set Up a Simple Online Storefront Using VirtueMart, Other Extension Options
editing, Frontend Versus Backend Editing, Editing Templates, Adding Images, Adding and Editing Users, Contact Information

frontend versus backend, Frontend Versus Backend Editing
templates, Editing Templates, Adding Images
users, Adding and Editing Users, Contact Information
editors, Site Settings, The WYSIWYG Editor, Plug-in Types, Built-in Plug-ins, User Permissions, Article Manager

default WYSIWYG editor, Site Settings
future improvements to Joomla, Article Manager
plug-ins, Plug-in Types, Built-in Plug-ins
user permissions, User Permissions
WYSIWYG, The WYSIWYG Editor
editors-EXT plug-ins, Plug-in Types
email, Mail Settings, Built-in Plug-ins, Adding and Editing Users, User Details, Private Messaging Configuration, Mass Mail, Submit Actions

Mass Mail, Mass Mail
message notification, Private Messaging Configuration
saving, Adding and Editing Users
sending form content as, Submit Actions
settings, Mail Settings
spambots, Built-in Plug-ins
system e-mails, User Details
Email Cloaking plug-in, Built-in Plug-ins
enabling, System Settings, Media Settings

Flash uploader, Media Settings
web services, System Settings
encryption, Is the Extension Encrypted? 
End Spacer parameter, Other Parameters
error pages, Error Pages, Error Pages

about, Error Pages
SEO and SEF, Error Pages
events, Calendaring/Event Management: Manage and Share Online Calendars with JCal Pro, Other Extension Options, Help Out at a Joomla Event

event management example, Calendaring/Event Management: Manage and Share Online Calendars with JCal Pro, Other Extension Options
helping out at Joomla events, Help Out at a Joomla Event
examples, Safari® Books Online (see sites)
eXtensible Markup Language, Safari® Books Online (see XML)
eXtensible Markup Language-Remote Procedure Call, Safari® Books Online (see XML-RPC plug-ins)
Extension Manager, future improvements, Extension Manager
extensions, Extensions, Extensions, Media Settings, Extending Joomla with Extensions and Compatibility, Extension Manager, Summary, Installing Extensions, Uninstalling Extensions, Upgrading Extensions, Upgrading Extensions, Upgrading Extensions, E-Commerce: Set Up a Simple Online Storefront Using VirtueMart, Other Extension Options, Calendaring/Event Management: Manage and Share Online Calendars with JCal Pro, Other Extension Options, Forms: Create Custom Forms to Collect and Store Information with bfForms, Other Extension Option, Photo Gallery: Set Up an Online Photo Gallery Using Phoca, Other Extension Options, Document Library: Create Online Document Storage Using RokDownloads, Other Extension Options, Reviews: Create an Online Review System Using JReviews Express, Other Extension Option, Building a Community: Extend User Profiles and Functions with Community Builder, Other Extension Option, Podcasting: Publish Podcasts on Your Site and on iTunes with the Podcast Suite, Other Extension Options, Discussion Forum: Set Up an Integrated Discussion Forum Using Kunena, Other Extension Options, Site Backup/Migration: Perform Backups and Migrate Your Site Using JoomlaPack, Other Extension Options, Power Search: Powerful Site Searches with JXtended Finder, Other Extension Options, Content Tagging: Organize and Connect Related Content Using JXtended Labels, Other Extension Options, Comments: Set Up User Comments Using JXtended Comments, Uninstall or Unpublish Unused Extensions, Extension Compatibility, Develop an Extension or Template, Choosing the Right Extensions, Where Can I Find an Extension Used in This Book?,  Is It Secure?,  Can I Get Support if I Need It?,  Where Can I Find an Extension Used in This Book? 

(see also components; languages; modules; plug-ins; templates)
about, Extensions
calendaring/event management, Calendaring/Event Management: Manage and Share Online Calendars with JCal Pro, Other Extension Options
community building, Building a Community: Extend User Profiles and Functions with Community Builder, Other Extension Option
compatibility, Extension Compatibility
components, Extending Joomla with Extensions and Compatibility
content tagging, Content Tagging: Organize and Connect Related Content Using JXtended Labels, Other Extension Options
developing, Develop an Extension or Template
discussion forums, Discussion Forum: Set Up an Integrated Discussion Forum Using Kunena, Other Extension Options, Site Backup/Migration: Perform Backups and Migrate Your Site Using JoomlaPack, Other Extension Options
document libraries, Document Library: Create Online Document Storage Using RokDownloads, Other Extension Options
e-commerce, E-Commerce: Set Up a Simple Online Storefront Using VirtueMart, Other Extension Options
finding extensions, Where Can I Find an Extension Used in This Book? 
Flash uploader conflict, Media Settings
forms, Forms: Create Custom Forms to Collect and Store Information with bfForms, Other Extension Option
installing, Installing Extensions
list of, Extensions
photo galleries, Photo Gallery: Set Up an Online Photo Gallery Using Phoca, Other Extension Options
podcasting, Podcasting: Publish Podcasts on Your Site and on iTunes with the Podcast Suite, Other Extension Options
reinstalling, Upgrading Extensions
reviews, Reviews: Create an Online Review System Using JReviews Express, Other Extension Option
search, Power Search: Powerful Site Searches with JXtended Finder, Other Extension Options
security, Uninstall or Unpublish Unused Extensions, Is It Secure? 
selecting, Choosing the Right Extensions, Where Can I Find an Extension Used in This Book? 
support for, Can I Get Support if I Need It? 
uninstalling, Uninstalling Extensions, Upgrading Extensions
upgrading, Upgrading Extensions
user comments, Comments: Set Up User Comments Using JXtended Comments
External Link menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout

### F

Fantastico, installing Joomla, Installing Joomla Using Fantastico
feed modules, Feed Modules
field types, forms, Field Types
File Transfer Protocol, Safari® Books Online (see FTP)
files, Anatomy of a Template File, Template Conditionals, Uploading a File

template files, Anatomy of a Template File, Template Conditionals
uploading in document libraries, Uploading a File
filtering, articles, Article Filtering and Display, Articles As Building Blocks, Global Article Parameters, Article Manager Filtering and Ordering, Filtering Articles, Power Search: Powerful Site Searches with JXtended Finder, Set Up a Search Filter
finding, Finding and Installing Languages, Assigning a Language Pack to a Single User, Where Can I Find an Extension Used in This Book? 

extensions, Where Can I Find an Extension Used in This Book? 
languages, Finding and Installing Languages, Assigning a Language Pack to a Single User
Finish Publishing parameter, Scheduled Publishing and Unpublishing
Flash uploader, Media Settings, Uploading Media

enabling, Media Settings
uploading media, Uploading Media
folders, Safari® Books Online (see directories)
fonts, language fonts for PDF, Creating a Language Pack
forms, example, Forms: Create Custom Forms to Collect and Store Information with bfForms, Other Extension Option
forums, discussion, Discussion Forum: Set Up an Integrated Discussion Forum Using Kunena, Other Extension Options
frameworks, Joomla as, Joomla Framework
Front Page Manager, The Front Page Manager, Removing Front Page Articles, Article Manager

about, The Front Page Manager, Removing Front Page Articles
future improvements to Joomla, Article Manager
frontend, Frontend Versus Backend, User Settings, Frontend Versus Backend Editing, Store Frontend, Store Frontend, User Reviews on the Frontend

defined, Frontend Versus Backend
store, Store Frontend, Store Frontend
user parameters, User Settings
user reviews, User Reviews on the Frontend
versus backend editing, Frontend Versus Backend Editing
frontend modules, Built-in Frontend Modules, Moving Modules, Article Modules, Component Modules, Feed Modules, User Modules, Creating Modules, Assigning Modules, Duplicating Modules, Deleting Modules, Moving Modules

article modules, Article Modules
assigning, Assigning Modules
component modules, Component Modules
creating, Creating Modules
deleting, Deleting Modules
duplicating, Duplicating Modules
feed modules, Feed Modules
moving, Moving Modules
user modules, User Modules
FTP (File Transfer Protocol), FTP Settings, FTP (File Transfer Protocol)

installing Joomla, FTP (File Transfer Protocol)
settings, FTP Settings

### G

generator meta tag, generator meta tag
Geotagging, images, Photo Gallery: Set Up an Online Photo Gallery Using Phoca
GeSHi plug-in, Built-in Plug-ins
getting involved in Joomla, Getting Involved, Summary
Global Article Parameters, Article Parameters Hierarchy, Global Article Parameters
Global Check-in, Tools, Global Check-in, Global Check-in

about, Tools
articles, Global Check-in
Global Configuration, Global Configuration, Summary, Site, System, Session Settings, Server, Mail Settings

Server tab, Server, Mail Settings
Site tab, Site
System tab, System, Session Settings
GPL (GNU General Public License), Why Open Source and the GPL?,  License
Gravatar avatars, Comments: Set Up User Comments Using JXtended Comments
groups, User Details, ACL and User Permissions

future improvements to Joomla, ACL and User Permissions
setting, User Details
guests, user permissions, User Permissions
GZIP page compression, Server Settings

### H

head statements, JDOC Statements
help files, location of, Parameters
Help menu, Help, Other Improvements

about, Help
future improvements to Joomla, Other Improvements
help server, settings, System Settings
hiding RSS, Parameters (Advanced)
hierarchy, article parameters, Article Parameters Hierarchy
history, Joomla, A Brief History of Joomla
hostname, Database Settings
.htaccess file, .htaccess
HTML mode, email, Mass Mail
HTML modules, creating, Creating a Custom HTML Module
HTML, converting sites to Joomla, Preparing the HTML and CSS

### I

image categories, adding, Adding a Category
image folder, path to, Media Settings
images, Customizing Articles, Parameters (System), Template Folder Structure, Adding Images, Navigating Views and Managing Media, Adding an Image, Changing an Image, Removing an Image, Photo Gallery: Set Up an Online Photo Gallery Using Phoca, Blocking Search Engines

adding, Customizing Articles, Adding Images, Adding an Image
changing, Changing an Image
deleting image folders, Navigating Views and Managing Media
folder for, Template Folder Structure
Geotagging, Photo Gallery: Set Up an Online Photo Gallery Using Phoca
menu images, Parameters (System)
removing, Removing an Image
SEO, Blocking Search Engines
inbox, locking, Private Messaging Configuration
Indent Image option, Other Parameters
index.php file, Hands-on Walkthrough
indexes, JXtended Finder extension, Power Search: Powerful Site Searches with JXtended Finder
Installation discovery, future improvements to Joomla, Extension Manager
Installation Manager, Other Built-in Components in the Extension Manager
installation statements, JDOC Statements
installing, Quick Install, Third-Party Components: How to Install, Installing Third-Party Modules, Third-Party Plug-ins: How to Install, Installing a Template Package File, Uploading Template Files, Finding and Installing Languages, Assigning a Language Pack to a Single User, Installing Extensions, Installing and Upgrading, Local Web Servers, Web Installer

extensions, Installing Extensions
Joomla, Quick Install, Installing and Upgrading, Local Web Servers
languages, Finding and Installing Languages, Assigning a Language Pack to a Single User
sample data, Web Installer
templates, Installing a Template Package File, Uploading Template Files
third-party components, Third-Party Components: How to Install
third-party modules, Installing Third-Party Modules
third-party plug-ins, Third-Party Plug-ins: How to Install
internal links, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Using ItemID to Create Internal Links

creating, Using ItemID to Create Internal Links
menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
ItemID, creating internal links, Using ItemID to Create Internal Links
iTunes, podcasting, Setting Up Podcast Suite, Setting Up Your iTunes Channel

### J

JA_Purity template, The Template Manager
JCal Pro extension, Calendaring/Event Management: Manage and Share Online Calendars with JCal Pro, Other Extension Options
JDatabase, JDatabase Example
JDOC statements, template files, JDOC Statements
JDocument, JDocument Example
JED (Joomla!  Extensions Directory), What Do I Want the Extension to Do?,  Developer Resources
_JEXEC, Is It Secure? 
Joom!Fish, Other Language Options
Joomla, A Brief History of Joomla, Joomla 1.0.x: End of Life, Changes and Improvements, Other Improvements, Migrating to Joomla 1.6, Getting Involved, Summary, Developing for Joomla, Developer Resources

contributing to, Getting Involved, Summary
developing for, Developing for Joomla, Developer Resources
future improvements, Changes and Improvements, Other Improvements
history, A Brief History of Joomla
migrating from Joomla 1.5 to 1.6, Migrating to Joomla 1.6
versions, Joomla 1.0.x: End of Life
Joomla 1.6, Page Functions: Print PDF, Email to a Friend, and Print Page, Joomla 1.6 and Beyond
Joomla Bug Tracker, Developer Resources
Joomla MVC, Template Overrides (MVC)
Joomla Working Groups, Join a Joomla Working Group
Joomla!  1.5 API Reference, Developer Resources
Joomla!  1.5 Coding, Developer Resources
Joomla!  CMS Development, Developer Resources
Joomla!  Extensions Directory (JED), What Do I Want the Extension to Do?,  Developer Resources
Joomla!  Security Strike Team (JSST), Importance of Security and the JSST
JoomlaCode, Developer Resources
JoomlaPack extension, Site Backup/Migration: Perform Backups and Migrate Your Site Using JoomlaPack, Other Extension Options
JoomlaPack eXtract Wizard, JoomlaPack: eXtract Wizard
JoomlaPack Remote, JoomlaPack Remote
JoomlaPetCenter.com, Finding Zones in Your Design, Store Frontend
jos_ as database prefix, Do Not Use jos_ As Your Database Prefix
jos_core_log_searches table, Search
jos_users, The Hard Way
JRequest, Is It Secure?,  JRequest Example

framework example, JRequest Example
requesting variables, Is It Secure? 
JReviews, Reviews: Create an Online Review System Using JReviews Express, Other Extension Option
JReviews Express extension, Reviews: Create an Online Review System Using JReviews Express, Other Extension Option
JSST (Joomla!  Security Strike Team), Importance of Security and the JSST
JXtended Comments extension, Comments: Set Up User Comments Using JXtended Comments
JXtended Finder extension, Power Search: Powerful Site Searches with JXtended Finder, Other Extension Options
JXtended Labels extension, Content Tagging: Organize and Connect Related Content Using JXtended Labels, Other Extension Options

### K

Key Reference parameter, Advanced Article Parameters, What Is Key Reference Anyway? 
keywords, Metadata Settings, Planning and Creating Your Labels, Keywords and Metadata

SEO and SEF, Keywords and Metadata
settings, Metadata Settings
tagging, Planning and Creating Your Labels
Kunena extension, Discussion Forum: Set Up an Integrated Discussion Forum Using Kunena, Other Extension Options

### L

Label Clouds, creating, Creating a Tag Cloud
labels for content tagging, Planning and Creating Your Labels
Language Manager, Control Panel, Other Built-in Components in the Extension Manager
languages, Languages, Control Panel, Advanced Article Parameters, Parameters, Languages, Summary, The Language Manager, Finding and Installing Languages, Assigning a Language Pack to a Single User, Creating a Language Pack, Creating a Language Pack, Other Language Options, Other Improvements

about, Languages, Control Panel
creating language packs, Creating a Language Pack, Creating a Language Pack
future improvements to Joomla, Other Improvements
installing, Finding and Installing Languages, Assigning a Language Pack to a Single User
Joom!Fish, Other Language Options
Language Manager, The Language Manager
parameter, Advanced Article Parameters
setting, Parameters
layout, forms, Layout
Legacy menu styles, Other Parameters
libraries, Insert the Joomla Tags, Document Library: Create Online Document Storage Using RokDownloads, Other Extension Options, Other Improvements, Other Improvements

document libraries, Document Library: Create Online Document Storage Using RokDownloads, Other Extension Options
future improvements to Joomla, Other Improvements
Mootools JavaScript library, Insert the Joomla Tags, Other Improvements
licenses, Joomla and extensions, License
links, Parameters (Component), Using ItemID to Create Internal Links, Create a Menu Link to Your Forum, Comments: Set Up User Comments Using JXtended Comments

bleeding page rank from, Comments: Set Up User Comments Using JXtended Comments
creating internal links, Using ItemID to Create Internal Links
menu links to discussion forums, Create a Menu Link to Your Forum
unauthorized, Parameters (Component)
listing articles, Articles As Building Blocks
loadposition plug-in, Menu Item Manager: Menu Item Types Explained, Controlling Layout
local settings, Local Settings
locking inboxes, Private Messaging Configuration
log folder, path to, System Settings
logging system errors, Built-in Plug-ins
Login Module, Login Module

### M

mail, Safari® Books Online (see email)
MailTo, Other Built-in Components in the Extension Manager
Main Menu, Menus
Mambo, A Brief History of Joomla
mambots, Safari® Books Online (see plug-ins)
managers user permissions, User Permissions
Mass Mail, Mass Mail
Media Manager, Control Panel, Site, Other Built-in Components in the Extension Manager, Media Manager, Summary, The Media Manager, Navigating Views and Managing Media, Uploading and Deleting Media, Using Media in Your Articles, Interface Enhancements

about, Control Panel, Site, Other Built-in Components in the Extension Manager, The Media Manager
future improvements to Joomla, Interface Enhancements
navigating views, Navigating Views and Managing Media
uploading and deleting media, Uploading and Deleting Media
using media in articles, Using Media in Your Articles
media settings, Media Settings
menu items, Restore Menu Items, Permanently Delete Menu Items

deleting, Permanently Delete Menu Items
restoring, Restore Menu Items
menu links, Creating a Menu Link, Create a Menu Link to Your Forum

creating in document libraries, Creating a Menu Link
creating to discussion forums, Create a Menu Link to Your Forum
Menu Manager, Menu Manager, Menu Manager, Interface Enhancements

about, Menu Manager
future improvements, Menu Manager, Interface Enhancements
menu modules, Menu Manager, Menu Modules: Parameters, Menu Module: Split Menus, Creating a Menu Module

about, Menu Manager
creating, Creating a Menu Module
parameters, Menu Modules: Parameters, Menu Module: Split Menus
menus, Administrator Menus, Site, Menus, Menus, Tools, Help, Article Parameters Hierarchy, Menus, Summary, Menu Structure Versus Content Structure, Menu Structure Versus Content Structure, Menu Structure Versus Content Structure, Menu Manager, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Parameters, Parameters (System), Menu Item Parameters, Menu Item Parameters, Parameters (System), Advanced Parameters, Other Parameters, Menu Module: Split Menus, Menu Module: Split Menus, Built-in Site Map, Using ItemID to Create Internal Links, Menu Trash, Other Built-in Components in the Extension Manager, Create a Podcast Menu Item, Create a Menu Link to Your Forum, Other Improvements

Administrator Menus, Administrator Menus
Article Layout menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Parameters
Category Blog Layout menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Menu Item Parameters
Category List Layout menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
Contacts menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
defaults: menu items, Menu Item Manager: Menu Item Types Explained, Controlling Layout
deleting whitespace from menu's HTML tags, Advanced Parameters
External Link menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
Help menu, Help, Other Improvements
internal links, Using ItemID to Create Internal Links
Internal Links menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
Legacy menu styles, Other Parameters
Main Menu, Menus
Menu Article Parameters, Article Parameters Hierarchy
menu images, Parameters (System)
Menu Item Manager, Menu Item Manager: Menu Item Types Explained, Controlling Layout
menu item parameters, Menu Item Parameters, Parameters (System)
menu links to discussion forums, Create a Menu Link to Your Forum
Menu Manager, Menu Manager
menu structure versus content structure, Menu Structure Versus Content Structure, Menu Structure Versus Content Structure
Menu Trash, Menu Trash
Menus drop-down, Menus
Menus Manager, Other Built-in Components in the Extension Manager
nesting format, Menu Structure Versus Content Structure
podcasts, Create a Podcast Menu Item
Polls menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
Section Blog Layout menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
Section Layout menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
Separator menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
Site drop-down menu, Site
site maps, Built-in Site Map
split menus, Menu Module: Split Menus, Menu Module: Split Menus
Tools drop-down menu, Tools
User menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
Web Links menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
Wrapper menu, Menu Item Manager: Menu Item Types Explained, Controlling Layout
messages, Other Built-in Components in the Extension Manager, JDOC Statements, Read/Write Private Messages, Private Messaging Configuration

about, Other Built-in Components in the Extension Manager
private messages, Read/Write Private Messages, Private Messaging Configuration
metadata, Metadata Settings, Keywords and Metadata, generator meta tag

generator meta tag, generator meta tag
SEO and SEF, Keywords and Metadata
settings, Metadata Settings
Microsoft IIS, requirements, Requirements
migrating, Site Backup/Migration: Perform Backups and Migrate Your Site Using JoomlaPack, Other Extension Options, Migrating to Joomla 1.6

from Joomla 1.5 to 1.6, Migrating to Joomla 1.6
sites, Site Backup/Migration: Perform Backups and Migrate Your Site Using JoomlaPack, Other Extension Options
Milkyway template, The Template Manager, Template Parameters
MIME types, Media Settings
mini-calendars, adding, Adding a Mini-Calendar
Model View Controller (MVC), template overrides, Template Overrides (MVC)
moderators, discussion forums, Add a Moderator
module chrome, templates, Module Chrome
Module Manager, Other Built-in Components in the Extension Manager, The Module Manager
modules, Modules, Administrator Modules, Menu Manager, Menu Modules: Parameters, Other Parameters, Advanced Parameters, Other Built-in Components in the Extension Manager, Modules, Summary, The Module Manager, Article Modules, Component Modules, Feed Modules, User Modules, Creating Modules, Assigning Modules, Duplicating Modules, Deleting Modules, Moving Modules, Creating a Menu Module, Creating a Custom HTML Module, Navigation Modules, User Modules, News Modules, Showing a Module Inside an Article, Installing Third-Party Modules, View All of the Module Positions, JDOC Statements, tp=1, Showing Component Area Without Modules

about, Modules
Administrator Modules, Administrator Modules
article modules, Article Modules
assigning, Assigning Modules
caching, Advanced Parameters
component modules, Component Modules
creating, Creating Modules
deleting, Deleting Modules
duplicating, Duplicating Modules
feed modules, Feed Modules
HTML modules, Creating a Custom HTML Module
installing third-party modules, Installing Third-Party Modules
menu modules, Menu Manager, Menu Modules: Parameters, Other Parameters, Creating a Menu Module
Module Manager, Other Built-in Components in the Extension Manager, The Module Manager
moving, Moving Modules
navigation modules, Navigation Modules
news modules, News Modules
showing component are without, Showing Component Area Without Modules
showing inside articles, Showing a Module Inside an Article
statements, JDOC Statements
user modules, User Modules, User Modules
viewing module positions, View All of the Module Positions, tp=1
mod_login folder, Template Overrides (MVC)
Mootools JavaScript library, Insert the Joomla Tags, Other Improvements
moving, Moving Categories, Moving Modules

categories, Moving Categories
modules, Moving Modules
MVC (Model View Controller), template overrides, Template Overrides (MVC)
MySQL, System Requirements, Database Settings, Requirements

database type setting, Database Settings
requirements, Requirements

### N

navigation modules, Navigation Modules
nesting, menu structure, Menu Structure Versus Content Structure
news feeds, News Feeds, Built-in Plug-ins

(see also RSS)
search plug-in, Built-in Plug-ins
news modules, News Modules
noncompliant code, GeSHi plug-in, Built-in Plug-ins

### O

open source software and GPL, Why Open Source and the GPL? 
ordering, Article Manager Filtering and Ordering, Ordering Articles, Ordering Front Page Articles

articles, Article Manager Filtering and Ordering, Ordering Articles
front page articles, Ordering Front Page Articles
overrides, template overrides, Template Overrides (MVC)

### P

package files, uploading, Upload Package File
packaging language files, Creating a Language Pack
page functions, Page Functions: Print PDF, Email to a Friend, and Print Page
page rank, Comments: Set Up User Comments Using JXtended Comments, Lowering Your Page Rank

bleeding from links, Comments: Set Up User Comments Using JXtended Comments
lowering, Lowering Your Page Rank
Pagebreak plug-in, Built-in Plug-ins
pagebreaks, adding, Customizing Articles
pagination, articles, Articles As Building Blocks
parameters, User Settings, Scheduled Publishing and Unpublishing, Scheduled Publishing and Unpublishing, Article Parameters, Global Check-in, Menu Item Parameters, Parameters (System), Menu Modules: Parameters, Other Parameters, Template Parameters, Template Parameters, Parameters, What Is Key Reference Anyway?,  What Is Key Reference Anyway? 

articles, Article Parameters, Global Check-in
Finish Publishing parameter, Scheduled Publishing and Unpublishing
frontend user parameters, User Settings
Key Reference parameter, What Is Key Reference Anyway? 
menu item parameters, Menu Item Parameters, Parameters (System)
menu modules parameters, Menu Modules: Parameters, Other Parameters
Start Publishing parameter, Scheduled Publishing and Unpublishing
templates, Template Parameters, Template Parameters
URLs, What Is Key Reference Anyway? 
users, Parameters
params.ini file, Template Parameters
passwords, User Details, Forgot Your Password?,  Recover Your Admin Password, Strong Passwords, Database and Super Administrator Passwords Should Not Be the Same

admin passwords, Recover Your Admin Password
database and Super Administrator passwords, Database and Super Administrator Passwords Should Not Be the Same
entering and verifying, User Details
security issues, Strong Passwords
users, Forgot Your Password? 
PDF, language fonts, Creating a Language Pack
permissions, Permissions, User Permissions, Troubleshooting, System Info, User Permissions, Directory Permissions, Directory Permissions, ACL and User Permissions

articles, Permissions
directories, Troubleshooting, System Info, Directory Permissions, Directory Permissions
user permissions, User Permissions, User Permissions, ACL and User Permissions
Phoca Galleries extension, Photo Gallery: Set Up an Online Photo Gallery Using Phoca, Other Extension Options
photo galleries example, Photo Gallery: Set Up an Online Photo Gallery Using Phoca, Other Extension Options
PHP, System Requirements, Built-in Plug-ins, System Info, Submit Actions, PHP Settings, PHP Information, Do Not Use PHP 4, Requirements

executing PHP code in forms, Submit Actions
GeSHi plug-in, Built-in Plug-ins
PHP information tab, PHP Information
PHP4 versus PHP 5, Do Not Use PHP 4
recommended for Joomla, System Requirements
requirements, Requirements
settings, System Info, PHP Settings
planning content, Planning, Creating, and Organizing Your Content
plug-ins, Plug-ins, Plug-ins, Summary, The Plugin Manager, Plug-in Types, Built-in Plug-ins, Built-in Plug-ins, Third-Party Plug-ins: How to Install

about, Plug-ins
built-in plug-ins, Built-in Plug-ins, Built-in Plug-ins
Plugin Manager, The Plugin Manager
third-party plug-ins, Third-Party Plug-ins: How to Install
types of, Plug-in Types
Plugin Manager, Other Built-in Components in the Extension Manager
podcasting, example, Podcasting: Publish Podcasts on Your Site and on iTunes with the Podcast Suite, Other Extension Options
polls, Polls, Extension Manager

about, Polls
future improvements to Joomla, Extension Manager
Polls menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
private messages, Write Private Messages, Read Private Messages, Private Messaging Configuration

configuration, Private Messaging Configuration
reading, Read Private Messages
writing, Write Private Messages
products, adding in e-commerce sites, Adding a Product
profile fields, adding in Community Builder, Adding Profile Fields
publishers, User Permissions

user permissions, User Permissions
publishing, Publishing and Unpublishing Sections, Publishing and Unpublishing Categories, Article Publishing and Unpublishing, The Front Page Manager, Publish Your Podcast

articles, Article Publishing and Unpublishing
categories, Publishing and Unpublishing Categories
in Front Page Manager, The Front Page Manager
podcasts, Publish Your Podcast
sections, Publishing and Unpublishing Sections
pumpernickel, Purge Expired Cache
Purge Expired Cache tool, Purge Expired Cache
purging messages, Private Messaging Configuration

### R

ratings, Reviews: Create an Online Review System Using JReviews Express, Other Extension Option, Comments: Set Up User Comments Using JXtended Comments, Extension Manager

future improvements to Joomla, Extension Manager
JReviews Express extension, Reviews: Create an Online Review System Using JReviews Express, Other Extension Option
JXtended Comments extension, Comments: Set Up User Comments Using JXtended Comments
reading private messages, Read Private Messages
Readmore plug-in, Built-in Plug-ins
Really Simple Syndication, Safari® Books Online (see RSS)
recovering, Forgot Your Username?,  Recover Your Admin Password

admin passwords, Recover Your Admin Password
usernames, Forgot Your Username? 
Redirect component, future improvements to Joomla, Extension Manager
registered users, user permissions, User Permissions
registering users, User Registration, Forgot Your Username? 
register_globals, Register Globals
reindexing content, Reindexing Your Content
reinstalling extensions, Upgrading Extensions
Remember Me, using on public computers, Login Module
remote computing, JoomlaPack Remote, JoomlaPack Remote
removing, Safari® Books Online (see deleting; purging messages; uninstalling; unpublishing)
requesting variables, Is It Secure? 
requirements, installing Joomla, Requirements
restoring, Restoring Trashed Articles, Restore Menu Items, Restore Your Website

menu items, Restore Menu Items
trashed articles, Restoring Trashed Articles
websites, Restore Your Website
reviews example, Reviews: Create an Online Review System Using JReviews Express, Other Extension Option
robots, SEO, Keywords and Metadata
robots.txt file, Blocking Search Engines, robots.txt, View the robots.txt File
RokDownloads extension, Document Library: Create Online Document Storage Using RokDownloads, Other Extension Options
RSS (Really Simple Syndication), Site Settings, Global Article Parameters, Menu Item Manager: Menu Item Types Explained, Controlling Layout, Parameters (Advanced), Parameters (Component), News Feeds, Feed Modules, Comments: Set Up User Comments Using JXtended Comments

about, News Feeds
Advanced Article Parameters, Global Article Parameters
displaying, Menu Item Manager: Menu Item Types Explained, Controlling Layout
feed modules, Feed Modules
hiding, Parameters (Advanced)
published comments, Comments: Set Up User Comments Using JXtended Comments
showing intro text or full text, Parameters (Component)
site settings, Site Settings

### S

sample data, installing, Web Installer
saving email, Adding and Editing Users
SCAM (Section, Category, Article, Menu), Menu Structure Versus Content Structure
scheduled publishing and unpublishing, Scheduled Publishing and Unpublishing
search, Search, Plug-in Types, Built-in Plug-ins, Power Search: Powerful Site Searches with JXtended Finder, Other Extension Options

about, Search
example, Power Search: Powerful Site Searches with JXtended Finder, Other Extension Options
plug-ins, Plug-in Types, Built-in Plug-ins
Search Engine Friendly, Safari® Books Online (see SEF)
Search Engine Optimization, Safari® Books Online (see SEO)
search engines, blocking, Blocking Search Engines
Section Blog Layout menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
Section Layout menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
Section Manager, Section Manager Overview, Copying Sections
section permissions, Section Permissions
Section Table menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
sections, Sections, Categories, and Articles, Uncategorized Sections and Categories, Built-in Plug-ins

about, Sections, Categories, and Articles
search plug-in, Built-in Plug-ins
uncategorized, Uncategorized Sections and Categories
Secure Socket Layer, Safari® Books Online (see SSL)
security, Forms: Create Custom Forms to Collect and Store Information with bfForms, Security, Summary, Importance of Security and the JSST, Best Practices, More Information, Is It Secure? 

best practices, Best Practices, More Information
bfForms extension, Forms: Create Custom Forms to Collect and Store Information with bfForms
extensions, Is It Secure? 
importance of, Importance of Security and the JSST
SEF (Search Engine Friendly), Menu Item Details, Built-in Plug-ins, SEO and SEF, Summary, What Is SEO and SEF?,  Blocking Search Engines, Search Engine–Friendly URLs, Lowering Your Page Rank, Keywords and Metadata, SEF URLs and Creating Custom URLs, Error Pages, SEO and SEF Resources

about, What Is SEO and SEF?,  Blocking Search Engines
configuring, Built-in Plug-ins
error pages, Error Pages
keywords and metadata, Keywords and Metadata
page rank, Lowering Your Page Rank
resources about, SEO and SEF Resources
URLs, Menu Item Details, Search Engine–Friendly URLs, SEF URLs and Creating Custom URLs
SEO (Search Engine Optimization), SEO Settings, SEO and SEF, Summary, What Is SEO and SEF?,  Blocking Search Engines, Search Engine–Friendly URLs, Lowering Your Page Rank, Keywords and Metadata, SEF URLs and Creating Custom URLs, Error Pages, SEO and SEF Resources

about, What Is SEO and SEF?,  Blocking Search Engines
error pages, Error Pages
keywords and metadata, Keywords and Metadata
page rank, Lowering Your Page Rank
resources about, SEO and SEF Resources
settings, SEO Settings
URLs, Search Engine–Friendly URLs, SEF URLs and Creating Custom URLs
Separator menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
server settings, Server Settings
Server tab, Server, Mail Settings
session settings, Session Settings
settings, Safari® Books Online (see configuration; Global Configuration)
Site drop-down menu, Site
site maps, Built-in Site Map
Site tab, Site
sites, Site Settings, Hands-on: Converting a Site to Joomla, Summary, Extending Your Site: Recommended Solutions, Summary, E-Commerce: Set Up a Simple Online Storefront Using VirtueMart, Other Extension Options, Blog: Blogging Functionality Built In, Calendaring/Event Management: Manage and Share Online Calendars with JCal Pro, Other Extension Options, Forms: Create Custom Forms to Collect and Store Information with bfForms, Other Extension Option, Photo Gallery: Set Up an Online Photo Gallery Using Phoca, Other Extension Options, Document Library: Create Online Document Storage Using RokDownloads, Other Extension Options, Reviews: Create an Online Review System Using JReviews Express, Other Extension Option, Building a Community: Extend User Profiles and Functions with Community Builder, Other Extension Option, Podcasting: Publish Podcasts on Your Site and on iTunes with the Podcast Suite, Other Extension Options, Discussion Forum: Set Up an Integrated Discussion Forum Using Kunena, Other Extension Options, Site Backup/Migration: Perform Backups and Migrate Your Site Using JoomlaPack, Other Extension Options, Power Search: Powerful Site Searches with JXtended Finder, Other Extension Options, Content Tagging: Organize and Connect Related Content Using JXtended Labels, Other Extension Options, Comments: Set Up User Comments Using JXtended Comments, How to Tell if a Website Is Running Joomla

blogging, Blog: Blogging Functionality Built In
calendaring/event management, Calendaring/Event Management: Manage and Share Online Calendars with JCal Pro, Other Extension Options
community building, Building a Community: Extend User Profiles and Functions with Community Builder, Other Extension Option
content tagging, Content Tagging: Organize and Connect Related Content Using JXtended Labels, Other Extension Options
converting sites to Joomla, Hands-on: Converting a Site to Joomla, Summary
discussion forums, Discussion Forum: Set Up an Integrated Discussion Forum Using Kunena, Other Extension Options
document libraries, Document Library: Create Online Document Storage Using RokDownloads, Other Extension Options
e-commerce, E-Commerce: Set Up a Simple Online Storefront Using VirtueMart, Other Extension Options
forms, Forms: Create Custom Forms to Collect and Store Information with bfForms, Other Extension Option
photo galleries, Photo Gallery: Set Up an Online Photo Gallery Using Phoca, Other Extension Options
podcasting, Podcasting: Publish Podcasts on Your Site and on iTunes with the Podcast Suite, Other Extension Options
reviews, Reviews: Create an Online Review System Using JReviews Express, Other Extension Option
search, Power Search: Powerful Site Searches with JXtended Finder, Other Extension Options
settings, Site Settings
site backup/migration, Site Backup/Migration: Perform Backups and Migrate Your Site Using JoomlaPack, Other Extension Options
telling if site is running Joomla, How to Tell if a Website Is Running Joomla
user comments, Comments: Set Up User Comments Using JXtended Comments
SMTP settings, Mail Settings
Spacer parameter, Other Parameters
spam, bfForms extension, Forms: Create Custom Forms to Collect and Store Information with bfForms
spambots, email addresses, Built-in Plug-ins
split menus, Menu Module: Split Menus, Menu Module: Split Menus
SQL injection attacks, Create a New Super Administrator User, Is It Secure? 
SSL (Secure Socket Layer), Server Settings, Parameters (System)

enabling, Parameters (System)
forcing, Server Settings
Start Publishing parameter, Scheduled Publishing and Unpublishing
static website structure versus dynamic website structure, Using a CMS: Static Versus Dynamic
stickers, Safari® Books Online (see labels for content tagging)
store frontend, Store Frontend, Store Frontend
Submit Actions, Submit Actions
submitting content on frontend, Submitting Content on the Frontend, Submit a New Web Link on the Frontend
subscribing to security updates, Subscribe to Security Update
Super Administrators, User Permissions, Create a New Super Administrator User, Database and Super Administrator Passwords Should Not Be the Same

creating, Create a New Super Administrator User
passwords, Database and Super Administrator Passwords Should Not Be the Same
user permissions, User Permissions
support, for extensions, Can I Get Support if I Need It? 
synchronizing, Discussion Forum: Set Up an Integrated Discussion Forum Using Kunena, Synchronize Your Users

users between Joomla and Kunena, Discussion Forum: Set Up an Integrated Discussion Forum Using Kunena
users in discussion forums, Synchronize Your Users
syndication, News Feeds, Comments: Set Up User Comments Using JXtended Comments

(see also RSS)
defined, Comments: Set Up User Comments Using JXtended Comments
system errors, logging, Built-in Plug-ins
System Info, Help, System Info, Help→System Info
system plug-in, Plug-in Types
system requirements, System Requirements
system settings, System Settings
System tab, System, Session Settings

### T

tab profiles, adding in Community Builder, Adding a Profile Tab
Tag Clouds, creating, Creating a Tag Cloud
tags, Insert the Joomla Tags, Insert the Joomla Tags, Content Tagging: Organize and Connect Related Content Using JXtended Labels, Other Extension Options

content tagging example, Content Tagging: Organize and Connect Related Content Using JXtended Labels, Other Extension Options
inserting Joomla tags, Insert the Joomla Tags, Insert the Joomla Tags
temp folder, path to, Server Settings
template.css file, Hands-on Walkthrough
templates, Templates, Extensions, Other Built-in Components in the Extension Manager, Templates, Summary, The Template Manager, Installing and Assigning Templates, Assigning a Template to Specific Site Sections, Uploading Template Files, Assigning the Default Template, Template Folder Structure, Template Folder Structure, Editing Templates, Adding Images, Editing with the Template Manager, Anatomy of a Template File, Template Conditionals, Module Chrome, Template Parameters, Template Parameters, Template Overrides (MVC), Set Up the Template XML File, Develop an Extension or Template, Check for Default Joomla Template

about, Templates
default template, Assigning the Default Template, Check for Default Joomla Template
developing, Develop an Extension or Template
editing, Editing Templates, Adding Images
folder structure, Template Folder Structure
installing, Uploading Template Files
installing and assigning, Installing and Assigning Templates, Assigning a Template to Specific Site Sections
module chrome, Module Chrome
overrides, Template Folder Structure
parameters, Template Parameters, Template Parameters
template files, Anatomy of a Template File, Template Conditionals
Template Manager, Extensions, Other Built-in Components in the Extension Manager, The Template Manager, Editing with the Template Manager
template overrides, Template Overrides (MVC)
template.xml file, Set Up the Template XML File
template_thumbnail.png, Template Folder Structure, Template Folder Structure
testing Joomla, Test or Add a Comment to an Issue Report
third-party APIs, future improvements to Joomla, Menu Manager
third-party components, installing, Third-Party Components: How to Install
third-party plug-ins, installing, Third-Party Plug-ins: How to Install
three-click rule, Menu Structure Versus Content Structure
time zone settings, Local Settings, Parameters
TinyMCE plug-in, The WYSIWYG Editor, Built-in Plug-ins
titles, parameters for, Advanced Article Parameters
toolbars, Main Toolbar, Articles As Building Blocks, Interface Enhancements

future improvements to Joomla, Interface Enhancements
top toolbar, Main Toolbar, Articles As Building Blocks
tools, Tools, Summary, Global Check-in, Clean Cache, Purge Expired Cache, Read/Write Private Messages, Private Messaging Configuration, Mass Mail, System Info

Clean Cache, Clean Cache
Global Check-in, Global Check-in
Mass Mail, Mass Mail
private messages, Read/Write Private Messages, Private Messaging Configuration
Purge Expired Cache, Purge Expired Cache
System Info, System Info
Tools drop-down menu, Tools
top toolbar, Main Toolbar, Articles As Building Blocks
Translation Manager extension, Creating a Language Pack
translation, helping translate Joomla tutorials and documentation, Write or Translate a Tutorial or Documentation
trash, future improvements to Joomla, Article Manager
trashing articles, Trashing Articles
troubleshooting, installing extensions, Troubleshooting
tutorials, helping write Joomla tutorials, Write or Translate a Tutorial or Documentation

### U

unarchiving articles, Unarchiving an Article
uncategorized sections and categories, Uncategorized Sections and Categories
uninstalling, Removing a Template, Uninstalling Extensions, Upgrading Extensions, Uninstall or Unpublish Unused Extensions

extensions, Uninstalling Extensions, Upgrading Extensions, Uninstall or Unpublish Unused Extensions
templates, Removing a Template
unpublishing, Publishing and Unpublishing Sections, Publishing and Unpublishing Categories, Article Publishing and Unpublishing, The Front Page Manager, Uninstall or Unpublish Unused Extensions

articles, Article Publishing and Unpublishing
categories, Publishing and Unpublishing Categories
extensions, Uninstall or Unpublish Unused Extensions
in Front Page Manager, The Front Page Manager
sections, Publishing and Unpublishing Sections
updating Joomla, Keep Joomla Updated
upgrading, Upgrading Extensions, Upgrading

extensions, Upgrading Extensions
Joomla, Upgrading
uploading, Media Settings, Uploading Template Files, Uploading Media, Upload Package File, Uploading Your Template, Uploading an Image, Uploading a File, Upload Your Podcast Audio File

files in document libraries, Uploading a File
images in photo galleries, Uploading an Image
media, Uploading Media
package files, Upload Package File
podcast audio files, Upload Your Podcast Audio File
settings for, Media Settings
templates, Uploading Template Files, Uploading Your Template
URLs, SEO Settings, Install from URL, Submit Actions, Search Engine–Friendly URLs, SEF URLs and Creating Custom URLs, SEF URLs, What Is Key Reference Anyway? 

adding suffix, SEO Settings
installing extensions from, Install from URL
parameters, What Is Key Reference Anyway? 
redirecting in forms, Submit Actions
SEF, Search Engine–Friendly URLs, SEF URLs and Creating Custom URLs, SEF URLs
user comments example, Comments: Set Up User Comments Using JXtended Comments
User component, Other Built-in Components in the Extension Manager
user lists, Community Builder, Creating a User List
User Manager, Other Built-in Components in the Extension Manager, User Manager, Summary, User Manager, Adding and Editing Users, Contact Information, User Registration, Forgot Your Username?,  Recover Your Admin Password, User Permissions, Interface Enhancements

about, Other Built-in Components in the Extension Manager, User Manager
adding and editing users, Adding and Editing Users, Contact Information
admin passwords, Recover Your Admin Password
future improvements to Joomla, Interface Enhancements
user permissions, User Permissions
user registration, User Registration, Forgot Your Username? 
User menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
user modules, User Modules, User Modules

built-in Administrator Modules, User Modules
built-in frontend modules, User Modules
user plug-in, Plug-in Types
user reviews frontend, User Reviews on the Frontend
user settings, User Settings
usernames, recovering, Forgot Your Username? 
users, Built-in Plug-ins, Assigning a Language Pack to a Single User, Discussion Forum: Set Up an Integrated Discussion Forum Using Kunena, Synchronize Your Users, User Permissions, ACL and User Permissions

assigning language packs to, Assigning a Language Pack to a Single User
permissions, User Permissions, ACL and User Permissions
plug-in, Built-in Plug-ins
synchronizing between Joomla and Kunena, Discussion Forum: Set Up an Integrated Discussion Forum Using Kunena
synchronizing in discussion forums, Synchronize Your Users

### V

variables, requesting, Is It Secure? 
verifying passwords, User Details
versions, Joomla 1.0.x and Joomla 1.5, Joomla 1.0.x: End of Life
viewing, View All of the Module Positions, Deny access to view XML files directly from the Web, tp=1, View a Core XML File

core XML files, View a Core XML File
module positions, View All of the Module Positions, tp=1
XML files, Deny access to view XML files directly from the Web
views, navigating, Navigating Views and Managing Media
VirtueMart extension, E-Commerce: Set Up a Simple Online Storefront Using VirtueMart, Other Extension Options

### W

Web Installer, Web Installer
Web Links, Web Links, Built-in Plug-ins

about, Web Links
search plug-in, Built-in Plug-ins
Web Links menu item type, Menu Item Manager: Menu Item Types Explained, Controlling Layout
web servers, System Requirements, SEO Settings, Local Web Servers

Apache, System Requirements, SEO Settings
installing Joomla, Local Web Servers
web services, enabling, System Settings
websites, Safari® Books Online (see sites)
white hat techniques, Search Engine Optimization
whitespace, removing from menu's HTML tags, Advanced Parameters
Wrapper component, Other Built-in Components in the Extension Manager
Wrapper menu, Menu Item Manager: Menu Item Types Explained, Controlling Layout
writing private messages, Write Private Messages
WYSIWYG editors, The WYSIWYG Editor, Article Manager

about, The WYSIWYG Editor
future improvements to Joomla, Article Manager

### X

XML (eXtensible Markup Language), Built-in Plug-ins

GeSHi plug-in, Built-in Plug-ins
XML files, Troubleshooting, Set Up the Template XML File, Deny access to view XML files directly from the Web, View a Core XML File

template.xml file, Set Up the Template XML File
viewing core XML files, View a Core XML File
viewing from web, Deny access to view XML files directly from the Web
XML setup file, Troubleshooting
XML-RPC plug-ins, Plug-in Types, Built-in Plug-ins, Other Improvements
XStandard Lite plug-in, Built-in Plug-ins

### Z

zones, finding in website design, Finding Zones in Your Design

# About the Authors

Ron Severdia is a Creative Director in the San Francisco Bay Area and has directed interactive branding projects-from web sites and brand identities to interactive campaigns-for clients such as HP, Verizon, Electronic Arts, Yahoo!,  Visa, Walmart.com, and Apple.  His prior experience includes stints as a Senior Designer and then Creative Director at Young & Rubicam, DDB, Glow, and Landor Associates.  Fluent in several languages, he worked for seven years in Europe, where he's won several awards for successful creative work. Ron has been using Joomla since 2006 to build sites for companies, large and small, including a worldwide branding site for Citibank.  He joined the Joomla Communications Team in 2008 and recently redesigned the new look of Joomla.org. Ron wishes to thank his lovely wife, Nat lia, without whose support this book and many of his other "adventurous projects" could not have been possible.  Milujem ťa. You can reach Ron by email at: severdia@gmail.com

Kenneth Crowder is a member of the Joomla Leadership Team and has been involved in the Joomla community since its inception.  He has volunteered countless hours to help the open source project.  Kenneth holds a Bachelor's degree in computer science from Northwest Missouri State University.  His resume includes Omaha.com, BIGSHOT, Hallmark.com, and Sprint. 

# Colophon

The bird on the cover of _Using Joomla_ is a white stork ( _Ciconia ciconia_ ).  According to legend believed to have originated in northern Germany, white storks are symbols of fertility and prosperity. 

Found throughout Europe, the Middle East, and west-central Asia, white storks are long-necked wading birds, whose bodies are mostly white, except for their black flight feathers.  Their bills and their legs are red.  Nothing but size (males are slightly larger than females) distinguishes the sexes from each another. 

Monogamous during the breeding season, couples build their nests together, although finding materials for them is primarily the males' responsibility.  Their nests are large and usually made up of twigs, grass, sod, and paper.  They'll often reuse their nests year after year, adding new material to them each breeding season.  To signify the completion of the nest, many times they'll plant a leafy branch on one of its sides.  Since the Middle Ages, white storks have built their nests on man-made structures, including rooftops, chimneys, and telephone poles.  Nests can also be found in trees and sometimes even on the ground. 

Females usually lay between three and five eggs.  Both parents are responsible for feeding their young until they reach eight or nine weeks and leave the nest, after which time, young are known to return to their parents' nest to beg for food. 

Their diets are quite varied and include frogs, fish, snakes, lizards, earthworms, crustaceans, and even sometimes the eggs and chicks of ground-nesting birds.  White storks are visual hunters, so when foraging, they walk with their eyes and bill toward the ground.  Once they spot their prey, they cock their necks back and then jab their bill back and forth until they catch their victim. 

Over the last 50 years, their population has seen a steady decline, particularly in Western Europe.  In 1910, there were 500 breeding pairs in the Netherlands, and in 1985, there were only 5.  Pesticides and wetland drainage have limited the availability of food. 

The cover image is from _Cassell's Natural History_.  The cover font is Adobe ITC Garamond.  The text font is Linotype Birka; the heading font is Adobe Myriad Condensed; and the code font is LucasFont's TheSansMonoCondensed.