First you need to register the new component in Joomla by adding a new entry to Joomla's #__extensions table.

Knowing that the component is going to be called com_todo you can execute the following command to register it in your new todo site:

$ joomla extension:register todo com_todo

Database table

The following snippet defines the database schema of our component and inserts some sample data.

Execute it in the sites_todo database, replace #__ with your database prefix:

CREATE TABLE IF NOT EXISTS `#__todo_items` (
  `todo_item_id` SERIAL,
  `title` varchar(255) NOT NULL,
  `description` longtext NOT NULL
INSERT INTO `#__todo_items` (`title`, `description`) VALUES
    ('todo item one', 'This is the first Todo'),
    ('todo item two', 'This is the second Todo'),
    ('todo item three', 'This is the third Todo');

More: Read more on the Naming Conventions of database tables.

Entry Point

If you have ever developed a Joomla component before you know about the component entry point, sometimes referred to as the component loader. The file in most cases in Joomla loads a controller and fires the execute method on that controller. We're doing something different; loading and firing our own dispatcher to take care of all that.

Create the following file:


Add the following snippet to the file:

<?php echo KObjectManager::getInstance()            // load the Object Manager
    ->getObject('com://site/todo.dispatcher.http')  // Get an HTTP Dispatcher
    ->dispatch();                                   // call the dispatch action

List View

If you are familiar with HMVC you know that it's the view's responsibility to render things to the screen.

Create the view

First we will add the view that renders our list of todo items. For this, create the following file and directory structure:


More: Read more on the Naming Conventions of Views.

Display data

Writing templates is like writing regular HTML and PHP, but simpler. Add the following snippet to the view:

    <? foreach($items as $item) : ?>
        <?= $item->id ?>.
        <?= $item->title ?>
        <?= $item->description ?>
    <? endforeach; ?>

This code will render an unordered list for each entity in $items object displaying the id, title and description.

My Joomlatools Framework Powered Todo List

Test yourself:

Note: You only added a template! The framework will fallback on default classes whenever your component does not contain a specific class.

Tips & Tricks

PHP short tags

We prefer PHP short tags:

  • <? instead of <?php
  • <?= instead of <?php echo

Even if short tags are disabled in your php.ini file they will automatically be rewritten as normal tags.

PHP alternative syntax

We are using the PHP alternative syntax for control structures such as the foreach statement, once again for readability.

Items object

We can simply use $items in the above example instead of $this->items. The framework will by default assign items data to the items view.

Singular & Plural

Items implies multiple Todo items, while item implies a single Todo item. It's very important to use singular and plural correctly.

Thanks to KStringInflector, the framework translates back and forth between most English words. It even knows words like "person" is singular, where "people" is its plural form.


The framework provides some handy shortcuts for use in our view templates.

Need Help?

Let our developers personally assist you. You can ask development related questions in our Support Center. Only for Business or Agency subscribers.

Join 23000+ others and subscribe to our newsletter!