Struktur
========

Dateisystem
-----------

Beispielaufbau bei Setup via Composer mit ``helhum/typo3-secure-web``:

.. code-block:: plain

   .
   ├── composer.json
   ├── composer.lock
   ├── typo3
   │   ├── fileadmin
   │   │   ├── _temp_
   │   │   └── user_upload
   │   ├── index.php
   │   ├── typo3
   │   │   ├── index.php
   │   │   ├── install.php
   │   │   └── sysext
   │   ├── typo3conf
   │   │   ├── ENABLE_INSTALL_TOOL
   │   │   ├── ext
   │   │   ├── l10n
   │   │   ├── AdditionalConfiguration.php
   │   │   ├── LocalConfiguration.php
   │   │   └── PackageStates.php
   │   ├── typo3temp
   │   │   ├── assets
   │   │   ├── index.html
   │   │   └── var
   │   └── uploads
   │       ├── index.html
   │       └── media
   ├── vendor
   │   ├── autoload.php
   │   ├── bin
   │   │   ├── ...
   │   │   ├── fluid -> ../typo3fluid/fluid/bin/fluid
   │   │   ├── phpunit -> ../phpunit/phpunit/phpunit
   │   │   ├── typo3 -> ../typo3/cms-cli/typo3
   │   │   └── typo3cms -> ../helhum/typo3-console/Scripts/typo3cms
   │   ├── cogpowered
   │   │   └── finediff
   │   ├── composer
   │   │   ├── autoload_ ...
   │   │   └── ClassLoader.php
   │   ├── cweagans
   │   │   └── composer-patches
   │   ├── doctrine
   │   │   ├── ...
   │   │   └── lexer
   │   ├── helhum
   │   │   ├── console-autoload-include.php
   │   │   ├── typo3-composer-setup
   │   │   ├── typo3-console
   │   │   ├── typo3-console-plugin
   │   │   └── typo3-secure-web
   │   ├── symfony
   │   │   ├── console
   │   │   ├── debug
   │   │   ├── finder
   │   │   ├── polyfill-mbstring
   │   │   ├── process
   │   │   └── yaml
   │   ├── ...
   │   ├── typo3
   │   │   ├── autoload-include.php
   │   │   ├── class-alias-loader
   │   │   ├── cms-cli
   │   │   └── cms-composer-installers
   │   ├── typo3-console
   │   │   └── composer-auto-setup
   │   └── typo3fluid
   │       └── fluid
   └── web
       ├── fileadmin -> ../typo3/fileadmin
       ├── index.php
       ├── typo3
       │   ├── index.php
       │   ├── install.php
       │   └── sysext
       └── typo3temp
           └── assets -> ../../typo3/typo3temp/assets

   111 directories, 34 files

Extensions
----------

Extensions erweitern die Funktionalität von TYPO3 und bestehen aus einem Ordner mit weiteren
Dateien. Sie können PHP und andere Dateien wie CSS und JS enthalten.

Core Extensions
"""""""""""""""

TYPO3 selbst besteht schon ausschließlich aus Extensions, diese befinden sich unter
:file:`typo3/sysext`. Der Ordner steht für "Systemextensions".

Extensions / Sitepackage
""""""""""""""""""""""""

Eigene Extensions werden unterhalb von :file:`typo3conf/ext/` abgelegt.

Früher wurden Konfigurationen für die Installation noch im :file:`fileadmin` abgelegt, mittlerweile
hat sich hier die Verwendung von sogenannten Sitepackages durchgesetzt. Dies sind Extensions welche
keine besondere Funktionalität, wie z.B. Mailversand, mitbringen, sondern das System als solches
konfigurieren.

Pakete / Composer
-----------------

Weitere Abhängigkeiten die mittels ``composer`` installiert werden liegen im :file:`vendor` Ordner.

Datenbank (-Tabellen)
---------------------

TYPO3 verwendet eine eigene Datenbank und keine Prefixe um sich von anderer Software abzugrenzen,
wie manch anderes System.
Dafür werden Prefixe bei  Tabellen verwendet. So z.B. ``cf_`` für das Caching-Framework, ``be`` für
Backend, ``fe`` für Frontend und ``sys`` für System.

TYPO3 kennt grundlegend 2 Tabellen-Arten, einmal normale Tabellen die Daten vorhalten, und
``mm``-Tabellen für Relationen.

Letztere sollten immer mit einem Suffix ``sys_category_record_mm`` kenntlich gemacht werden und
idealerweise im Namen beinhalten welche Tabellen verknüpft werden. Im Beispiel ``sys_category`` mit
anderen records wie ``tt_content``.

Tabellen sollten immer über eine Spalte ``uid`` und ``pid`` verfügen. Zudem gibt es einige weitere
Konventionen die in der TCA-Reference nachgelesen werden können. Auch die Relationen haben gewisse
Konventionen was die Spalten betrifft, so gibt es dort ``uid_local`` und ``uid_foreign``.
