TYPO3 est un système de gestion de contenu (CMS) open-source professionnel, flexible et extensible. Il est particulièrement adapté aux sites web d'entreprise de moyenne à grande taille nécessitant des fonctionnalités avancées.
typo3conf/
├── ext/ # Extensions locales
│ └── mon_extension/
│ ├── Configuration/
│ ├── Resources/
│ └── Classes/
├── LocalConfiguration.php # Configuration principale
└── AdditionalConfiguration.php
public/
├── typo3/ # Backend TYPO3
├── typo3conf/ # Lien symbolique
├── fileadmin/ # Fichiers utilisateurs
└── index.php # Point d'entrée
var/
├── cache/ # Cache système
├── log/ # Fichiers de log
└── session/ # Sessions
// LocalConfiguration.php (extrait)
return [
'BE' => [
'debug' => false,
'installToolPassword' => '$argon2i$...',
],
'DB' => [
'Connections' => [
'Default' => [
'charset' => 'utf8mb4',
'dbname' => 'typo3_db',
'driver' => 'mysqli',
'host' => 'localhost',
'password' => 'motdepasse',
'port' => 3306,
'user' => 'typo3_user',
],
],
],
];
# Page configuration de base
page = PAGE
page {
typeNum = 0
# Meta tags
meta {
viewport = width=device-width, initial-scale=1
description.field = description
keywords.field = keywords
}
# CSS
includeCSS {
main = EXT:mon_extension/Resources/Public/Css/main.css
}
# JavaScript
includeJS {
main = EXT:mon_extension/Resources/Public/JavaScript/main.js
}
# Template principal
10 = FLUIDTEMPLATE
10 {
templateName = TEXT
templateName.stdWrap.cObject = CASE
templateName.stdWrap.cObject {
key.data = pagelayout
default = TEXT
default.value = Default
}
templateRootPaths {
0 = EXT:mon_extension/Resources/Private/Templates/
}
variables {
contentMain < styles.content.get
contentMain.select.where = {#colPos}=0
}
}
}
# Menu principal
lib.mainMenu = HMENU
lib.mainMenu {
1 = TMENU
1 {
wrap = <ul class="nav-menu">|</ul>
NO = 1
NO {
wrapItemAndSub = <li>|</li>
ATagTitle.field = nav_title // title
}
ACT < .NO
ACT = 1
ACT {
wrapItemAndSub = <li class="active">|</li>
}
}
}
<!-- Resources/Private/Layouts/Default.html -->
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true">
<f:render section="Header" />
<main>
<f:render section="Main" />
</main>
<f:render section="Footer" />
</html>
<!-- Liens -->
<f:link.page pageUid="1">Accueil</f:link.page>
<!-- Images -->
<f:image src="{file}" width="300" height="200" />
<!-- Conditions -->
<f:if condition="{variable}">
<f:then>Vrai</f:then>
<f:else>Faux</f:else>
</f:if>
<!-- Boucles -->
<f:for each="{items}" as="item">
{item.title}
</f:for>
<!-- Formatage -->
<f:format.date format="d.m.Y">{date}</f:format.date>
mon_extension/
├── Classes/
│ ├── Controller/
│ ├── Domain/
│ │ ├── Model/
│ │ └── Repository/
│ └── ViewHelpers/
├── Configuration/
│ ├── TCA/
│ ├── TypoScript/
│ └── FlexForms/
├── Resources/
│ ├── Private/
│ │ ├── Templates/
│ │ ├── Partials/
│ │ └── Layouts/
│ └── Public/
├── ext_emconf.php
└── ext_localconf.php
namespace Vendor\MonExtension\Controller;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
class ProductController extends ActionController
{
protected $productRepository;
public function __construct(
\Vendor\MonExtension\Domain\Repository\ProductRepository $productRepository
) {
$this->productRepository = $productRepository;
}
public function listAction(): void
{
$products = $this->productRepository->findAll();
$this->view->assign('products', $products);
}
}
# Cache
php vendor/bin/typo3 cache:flush
php vendor/bin/typo3 cache:warmup
# Base de données
php vendor/bin/typo3 upgrade:run
php vendor/bin/typo3 database:updateschema
# Extensions
php vendor/bin/typo3 extension:activate mon_extension
php vendor/bin/typo3 extension:deactivate mon_extension