Mit Version 2.0 wird der prinzipielle Aufbau eines Moduls ebenfalls grundlegend geändert.

Geplant ist die Abschaffung der einzelnen Steuerscripten analog zum backend-Pfad. Statt dessen werden die einzelnen Aktionen über entsprechende Routen angesteuert. Beispiel:

CAT_URL/modules/mymodule/view.php ⇒ CAT_URL/modules/mymodule/view

Es existiert also keine view.php mehr. Statt dessen besteht ein Modul aus einer Klasse, die von entsprechenden Core-Klassen abgeleitet wird. Eventuell wird auch noch der /modules/-Teil aus der Route gestrichen, das hängt von der späteren Implementierung ab.

Basisklasse

Alle Modulklassen werden von der entsprechenden Elternklasse abgeleitet, die wiederum von einer zentralen Klasse für alle Arten von Addons abgeleitet ist. Wir geben dabei eine Namenskonvention vor, so daß vom Namen des Moduls auf den Namen der Klasse geschlossen werden kann. Beispiel (Page-Modul):

if (!class_exists('CAT_Addon_HelloWorld', false))
{

    class CAT_Addon_HelloWorld extends CAT_Addon_Page
    
{
        public static function view()
        {
            ...
        }
    }
}

info.php

Die Daten / Variablen der info.php wandern ebenfalls in die Modulklasse. Dort werden sie als Klassenvariablen definiert. Beispiel:

$module_name ⇒ protected static $name
$module_version
 ⇒ protected static $version
usw.

Derzeit geplante Verzeichnisstruktur:

CAT_ENGINE_PATH/modules/mymodule
                                /css/*
                                /js/*
                                /inc
                                    class.mymodule.php
                                    install.sql

                                    /headers
                                            /default
                                                    /headers.inc.php
                                            /variante
                                                    /headers.inc.php
                                    /footers
                                            /default
                                                    /footers.inc.php
                                            /variante
                                                    /footers.inc.php
                                /templates
                                            /default

                                            /...

Die Struktur unterhalb von inc entspricht also im Grundsatz der unterhalb von templates. Module, die keine Varianten haben, haben also nur ein Verzeichnis ./headers/default und ein Verzeichnis ./footers/default mit der jeweiligen inc-Datei. (Oder vielleicht auch gar kein headers-/footers-Verzeichnis.)

Module mit Varianten - wie MultiColumn - können beliebig viele weitere Unterverzeichnisse mit eigenen headers/footers.inc.php haben. Die Auswahl der Variante soll dann nicht mehr vom Modul selbst, sondern vom Core geregelt/implementiert werden.