Attention
TYPO3 v8 has reached its end-of-life March 31st, 2020 and is not maintained by the community anymore. Looking for a stable version? Use the version switch on the top left.
There is no further ELTS support. It is recommended that you upgrade your project and use a supported version of TYPO3.
Files and locations¶
Files¶
An extension consists of:
a directory named by the extension key (which is a worldwide unique identification string for the extension)
standard files with reserved names for configuration related to TYPO3 (of which most are optional, see list below)
any number of additional files for the extension itself.
Reserved filenames¶
This list of filenames are all reserved filenames in the root directory of extensions. None of them are required but for example you cannot have a TYPO3 extension recognized by TYPO3 without the "ext_emconf.php" file etc. You can read more details like that in the table below.
In general, do not introduce your own files in the root directory of extensions with the name prefix "ext_".
Filename |
Description |
---|---|
ext_emconf.php |
Definition of extension properties. Name, category, status etc. Used by the EM. The content of this file is described in more details below. Note that it is auto-written by EM when extensions are imported from the repository. Note If this file is not present the EM will not find the extension. |
ext_localconf.php |
Addition to All Note Observe rules for content of these files. See section on caching below. |
ext_tables.php |
Included if found. Contains extensions of existing tables, declaration of modules, backend styles etc. All code in such files is included after all the default definitions provided by the Core. Since TYPO3 CMS 6.1, definition of new database tables should be
done entirely in Since TYPO3 CMS 6.2, customizations of existing tables should be
done entirely in |
ext_tables.sql |
SQL definition of database tables. This file should contain a table-structure dump of the tables used by
the extension. It is used for evaluation of the database structure and
is therefore important to check and update the database when an
extension is enabled.If you add additional fields (or depend on
certain fields) to existing tables you can also put them here. In that
case insert a The |
ext_tables_static+adt.sql |
Static SQL tables and their data. If the extension requires static data you can dump it into a sql-file by this name.Example for dumping mysql data from bash (being in the extension directory): mysqldump --add-drop-table \
--password=[password] [database name] \
[tablename] > ./ext_tables_static+adt.sql
You can also drop the table content using the EM in the backend. Note The table structure of static tables needs to be in the ext_tables.sql file as well - otherwise an installed static table will be reported as being in excess in the EM! |
ext_typoscript_constants.txt |
Preset TypoScript constants. Will be included in the constants section of all TypoScript templates. Warning Use such a file if you absolutely need to load some TS (because you would get serious errors without it).
Otherwise static templates or usage of the
class |
ext_typoscript_setup.txt |
Preset TypoScript setup. Will be included in the setup section of all TypoScript templates. Warning Use such a file if you absolutely need to load some TS (because you would get serious errors without it).
Otherwise static templates or usage of the class
|
ext_conf_template.txt |
Extension Configuration template. Configuration code in TypoScript syntax setting up a series of values which can be configured for the extension in the EM. Read more about the file format here. If this file is present the EM provides you with an interface for
editing the configuration values defined in the file. The result is
written as a serialized array to If you want to do user processing before the content from the
configuration form is saved (or shown for that sake) there is a hook
in the EM which is configurable with |
ext_icon.gif, ext_icon.png or ext_icon.svg |
Extension Icon 18x16 GIF, PNG or SVG icon for the extension. Note Extension icon will look nicer when provided as vector graphics (SVG) rather than bitmaps (GIF or PNG). |
class.ext_update.php |
Local Update tool class If this file is found it will install a new menu item, "UPDATE", in the EM when looking at details for the extension. When this menu item is selected the class inside of this file (named "ext_update") will be instantiated and the method "main()" will be called and expected to return HTML content. Also you must add the function "access()" and make it return a boolean value whether or not the menu item should be shown. This feature is meant to let you disable the update tool if you can somehow detect that it has already been run and doesn't need to run again.The point of this file is to give extension developers the possibility to provide an update tool if their extensions in newer versions require some updates to be done. |
ext_autoload.php |
Since TYPO3 CMS 4.3, it is possible to declare classes in this file so that they will be automatically detected by the TYPO3 autoloader. This means that it is not necessary to require the related class files anymore. See the Autoloading chapter for more details. Not needed anymore since TYPO3 CMS 6.1, when using namespaces. |
Reserved folders¶
The current standard for files location - except for the special files mentioned above - is inspired by TYPO3 Flow. It is necessary to use such structure in Extbase-based extensions and recommended for all extensions anyway.
In order to use Namespaces, class files must be located in a
Classes
folder.
Refer to the Extbase and Fluid book for more information on extension structure. Also look at the "examples" extension.
The Extension Builder will create the right structure for you. It is described below:
- Classes/Controller
Contains MVC Controller classes.
- Classes/Domain/Model
Contains MVC Domain model classes.
- Classes/Domain/Repository
Contains data repository classes.
- Classes/ViewHelpers
Helper classes used in the views.
- Configuration/TsConfig/Page
Page TSconfig, see TSconfig Reference. Files should have the file extension
.tsconfig
.- Configuration/TsConfig/User
User TSconfig, see TSconfig Reference. Files should have the file extension
.tsconfig
.- Configuration/TypoScript
TypoScript static setup (
setup.txt
) and constants (constants.txt
). Use subfolders if your have several static templates.- Configuration/TCA
One file per database table, using the name of the table for the file, plus ".php". Only for new tables.
- Configuration/TCA/Overrides
For extending existing tables, one file per database table, using the name of the table for the file, plus ".php".
- Documentation
Contains the manual in reStructuredText format (read more on the topic).
- Resources/Private/Language
XLIFF files for localized labels.
- Resources/Private/Layouts
Main layouts for the views.
- Resources/Private/Partials
Partial templates for repetitive use.
- Resources/Private/Templates
One template per action, stored in a folder named after each Controller.
- Resources/Public/Css
Any CSS file used by the extension.
- Resources/Public/Images
Any images used by the extension.
- Resources/Public/JavaScript
Any JS file used by the extension.
- Tests/Unit
Contains unit testing classes.
Legacy structure¶
The structure of older extensions was not so clearly defined, but it generally adhered to the following conventions:
Filename |
Description |
---|---|
pi*/ |
Typical folder for a frontend plugin class. |
mod*/ |
Typical folder for a backend module. |
sv*/ |
Typical folder for a service. |
res*/ |
Extensions normally consist of other files: Classes, images, html- files etc. Files not related to either a frontend plugin (pi/) or backend module (mod/) might be put in a subfolder of the extension directory named "res/" (for "resources") but you can do it as you like (inside of the extension directory that is).The "res/" folder content will be listed as files you can select in the configuration interface. Files in this folder can also be selected in a selector box if you set up Extension configuration in a "ext_conf_template.txt" file. |