Tutorial:Creating a basic Joomla! template

From Joomla! Documentation

Jump to: navigation, search

Contents

Introduction

The purpose of this tutorial is to serve as an introduction to creating Joomla! templates. It will cover the essential files and code needed to create a basic template. The code is presented so it can be cut and pasted with very little modification needed.

Setting up a directory structure

To make the most basic template, create a new folder in the "templates" folder. Name this folder after your template i.e. "mynewtemplate".

Using a text editor (or dedicated editor such as Adobe Dreamweaver) create the files "index.php" and "templateDetails.xml"

To keep things organized, make 2 new folders called "images" and "css". Inside the "css" folder create a file called "style.css".

Although it is fine to place all your CSS code directly in your "index.php" file to start, many web developers prefer to place their CSS code in a separate file that can be linked from multiple pages using the "link" tag.

This is the most basic practical setup.

Outline of folder and file structure:

  • mynewtemplate/
    • css/
      • style.css
    • images/
    • index.php
    • templateDetails.xml

Creating a basic templateDetails.xml file

The templateDetails.xml file is essential. Without it, your template won't be seen by Joomla!. The file holds key "metadata" about the template.

Lets look at an example:

<?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>mynewtemplate</name>
        <creationDate>2008-05-01</creationDate>
        <author>John Doe</author>
        <authorEmail>john@example.com</authorEmail>
        <authorUrl>http://www.example.com</authorUrl>
        <copyright>John Doe 2008</copyright>
        <license>GNU/GPL</license>
        <version>1.0.2</version>
        <description>My New Template</description>
        <files>
                <filename>index.php</filename>
                <filename>templateDetails.xml</filename>
                <filename>template_thumbnail.png</filename>
                <filename>images/background.png</filename>
                <filename>css/style.css</filename>
        </files>
        <positions>
                <position>breadcrumb</position>
                <position>left</position>
                <position>right</position>
                <position>top</position>
                <position>user1</position>
                <position>user2</position>
                <position>user3</position>
                <position>user4</position>
                <position>footer</position>
        </positions>
</install>

So, as you can see, we have a set of information between markup tags ( the <thing> ). Your best approach is to cut and paste this into your "templateDetails.xml" file and change the relevant bits (such as <name> <author> ).

The <files> part should contain all the files that you use - you possibly don't know what they are called yet - don't worry update it later.

Leave the positions as they are - these are a common set so you will be able to switch easily from the standard templates.

Creating a basic index.php file

The index.php file becomes the core of every page that Joomla! delivers. Essentially, you make a page (like any html page) but place PHP code where the content of your site should go. Here is the bare-bones code ready for you to cut and paste.

Lets start at the top:

<?php 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; ?>" >

The first line stops naughty people looking at your coding and getting up to bad things. The second tells the browser (and webbots) what sort of page it is. The third line says what language the site is in.

Now the header for real:

<head>
<jdoc:include type="head" />
<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/mynewtemplate/css/style.css" type="text/css" />
</head>

The first line gets Joomla to put the correct header information in. This includes the page title, meta information as well as system style sheets and JavaScript. The second creates a link to your style sheet. You will need to change this to the directory name that you chose.

Now for the main body:

<body>
<jdoc:include type="modules" name="top" /> 
<jdoc:include type="component" />
<jdoc:include type="modules" name="bottom" />
</body>

Amazingly, this will suffice! Yes, its a very basic layout, but it will do the job. Everything else will be done by Joomla!. Note: you will need to ensure your menu is set to go into the "top" module position.

Finish it off - one last bit:

</html>


Full template source code:

<?php 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/mynewtemplate/css/style.css" type="text/css" />
</head>
<body>
<jdoc:include type="modules" name="top" /> 
<jdoc:include type="component" />
<jdoc:include type="modules" name="bottom" />
</body>
</html>

Conclusion

You should now have created a template that works. It won't look like much yet. The best thing to do now is start experimenting with the layout.

Personal tools