Zur Nutzung wird Composer und NodeJS mit NPM oder YARN benötigt: https://nodejs.org/en/
- Erstelle ein neues GitHub-Repository auf Basis der Vorlage "creationell-dev/typo3-installer" (dieses Repository)
- Stelle sicher, dass du die aktuellste Version der JPKCLI nutzt (TYPO3 11 wird ab JPKCLI-Version 1.2.2 unterstützt)
- Lege ein leeres Projektverzeichnis in einem WSL2-Verzeichnis an und navigiere hinein:
mkdir <my-project> && cd <my-project>
- initialisiere JPKCLI (Achtung: Typ ist typo311):
j init project
- Initialisiere Docker-Container:
j init docker && j up
- Navigiere in den Ordner
project/web
und leere diesen:
cd project/web
rm * .*
- Klone das Repository und öffne es in VS Code (Achtung: der Punkt am Ende gehört zum Befehl!)
git clone git@github.com/creationell-dev/<REPOSITORY-KEY> .
j c
- Starte Docker
j up
- Wechsle in den PHP Container:
j dc sh php
- wechsle in das web-Verzeichnis:
cd web
- Installiere TYPO3:
composer install
- Folgende Daten sind bei einer Standard-Installation mit Docker/JPKCLI einzugeben
- GitHub Token: hier kann dieser verwendet werden
- Database connection type: mysqli oder Enter drücken
- User name for database server:
db_1
- User password for database server:
db_1
- Host name of database serve:
db
- TCP Port of database server: Enter drücken
- Unix Socekt to connect to: Enter drücken
- Use already existing database:
yes
- Name of the database:
db_1
- Name of the TYPO3 site
- Specify the site base url:
http://127.0.0.1:<your-port>180
<-- the nginx_port in jpkcli.ini - Specify the web server you want to write configuration for: none oder Enter drücken
- NPM auth Token für FontAwesome: zu finden hier im CNET (Token ist unten im Beschreibungsfeld hinterlegt)
- Die Pakete
creationell/crea_distribution
undcreationell/creationell-typo3-setup
werden nicht mehr benötigt, deinstalliere diese mit composer:
composer remove creationell/crea_distribution
composer remove --dev creationell/creationell-typo3-setup
- Lösche diese beiden Pakete auch aus dem Verzeichnis
packages
- Logge dich in das TYPO3 Backend ein (BN: creationell, PW: password)
- Ändere das Admin Passwort (ins CNET speichern)
- Ändere das Install Tool Passwort (ins CNET speichern)
- Wenn du den Docker Proxy verwenden möchtest (empfohlen), dann inkludiere die Datei
proxy.ymal
in der Dateiconfig/dev.settings.yaml
und starte den Proxy (j proxy
)
- Wechsle in den Node Container
j dc sh nodejs
- wechsle in das web-Verzeichnis:
cd html/web
- Installiere die npm-Dependencies und kompiliere JS/SCSS:
npm install && npm run dev
- Unterstützung von
.env
Dateien zum Setzen von Environment Variablen - TYPO3 & Extension Konfiguration mittels YAML-Dateien im Verzeichnis
config
- Automatisierte Installation von TYPO3 und ausgewählten Extensions
- Automatisiertes Erstellen eines Basis-Seitenbaums mit Systemordnern für News, Suche etc.
- Integriertes Setup von Typoscript-Template und Site-Config
- Extension-Programmierung im Ordner
/packages
, Verwaltung der Extensions mit Composer
- crea_theme
- crea_theme_child: wird individuell pro Website angepasst
- amazing/media2click: 2-Klick Lösung für YouTube-/Vimeo-Embeds
- dirkpersky/typo3-dp_cookieconsent: Cookie-Consent Tool
- b13/picture: ViewHelper für
<picture>
Elemente (Responsive Images) - christophlehmann/imageoptimizer: Automatisierte Optimierung beim Upload/Verarbeiten von Bildern
- plan2net/webp: Erstellt automatisch eine Kopie jedes hochgeladenen JPG/PNG/GIF im WebP Format
- brotkrueml/form-country-select: Formularelement zur Auswahl eines Landes
- brotkrueml/schema: API and view helpers for schema.org markup
- clickstorm/cs-seo: Erweiterte OnPage-SEO Features
- t3brightside/advancedtitle: Präfix/Suffix für Seitentitel
- dirkpersky/typo3-dp_http2: HTTP2 Push für Assets
- lochmueller/sourceopt: HTML minifier
- lochmueller/staticfilecache: Statischer Dateicache
- fixpunkt/backendtools: 6 admin tools
- friendsoftypo3/frontend-editing: Bearbeitung von TYPO3 Content Elementen in einer FE-Vorschau
- undefined/translate-locallang: Visueller Editor für XLIFF Sprachdateien im Backend
- b13/container
- georgringer/news
- mask/mask: Erstellen von Content Elementen
- sitegeist/fluid-components: Framework zum Erstellen von Frontend Komponenten auf Basis von Fluid
- sitegeist/fluid-styleguide: Interaktive Dokumenatation der mit fluid-components erstellten Komponenten
- tpwd/ke_search: Facettierte Suche
- tomasnorre/crawler: Crawler für den Seitenbaum (Indexierung/Cache Warmup etc.)
- zwo3/mask_kesearch_indexer: ke_search Indexer für mask Elemente
Diese Composer packages sind keine regulären TYPO3-Extension, beeinflussen aber den Umgang mit der TYPO3 Instanz:
- helhum/dotenv-connector: Ermöglicht Auslesen von Variablen aus
.env
- helhum/typo3-config-handling: Verwaltung der TYPO3 Konfiguration in YAML-Dateien (statt
LocalConfiguration.php
) - helhum/typo3-console: Erweiterte CLI-Tools für TYPO3
In der composer.json
werden weitere Extensions gelistet, die für im Falle einer entsprechenden Anforderung genutzt
werden könnten:
{
"t3g/blog": "Flexible blog system for TYPO3",
"extcode/cart": "Simple (yet extendable) shopping cart extension",
"ichhabrecht/content-defender": "Disallow certain content elements in columns of your BE layouts.",
"in2code/fetchurl": "Fetch an url and show its content in the frontend.",
"fixpunkt/fp-masterquiz": "Quiz, polls and tests.",
"clickstorm/go-maps-ext": "Google maps integration.",
"derhansen/plain-faq": "FAQ with list and detail view",
"in2code/powermail": "Advanced forms.",
"evoweb/recaptcha": "Google Recaptcha integration for EXT:form",
"derhansen/sf_event_mgt": "Event management & booking",
"derhansen/sf_event_mgt_indexer": "ke_search indexer for sf_event_mgt",
"friendsoftypo3/tt-address": "Address & contacts management.",
"apache-solr-for-typo3/solr": "SOLR search integration.",
"cobweb/flush_language_cache": "Adds a button to flush the l10n cache.",
"apen/recordsmanager": "Export any database record.",
"wazum/sluggi": "Improved slug management.",
"in2code/typoscript2ce": "Render typoscript as content element.",
"ichhabrecht/mask-export": "Export mask elements as extension.",
"brotkrueml/typo3-matomo-widgets": "Show statistics from Matomo on the dashboard.",
"kitzberger/form-mailtext": "Customize email texts sent by EXT:form",
"zotornit/webfonts": "Easy way to use selfhosted Google webfonts",
"t3g/querybuilder": "Filter records in the list module."
}
Bitte beachte, dass einzelne dieser Extensions noch nicht in einer (stabilen) Version für TYPO3 11 bereitstehen könnten.
Mit diesem Paket können ebenfalls Frontend-Assets wie CSS, JS und Fonts kompiliert werden.
Grundlage dessen ist die Bibliothek Laravel Mix (https://laravel-mix.com/docs/):
##What is Mix? Webpack is an incredibly powerful module bundler that prepares your JavaScript and assets for the browser. The only understandable downside is that it requires a bit of a learning curve.
In an effort to flatten that curve, Mix is a thin layer on top of webpack for the rest of us. It exposes a simple, fluent API for dynamically constructing your webpack configuration.
Mix targets the 80% usecase. If, for example, you only care about compiling modern JavaScript and triggering a CSS preprocessor, Mix should be right up your alley. Don't worry about researching the necessary webpack loaders and plugins. Instead, install Mix...
Im Ordner '/frontend' befinden sich bereits vorbereitete SCSS und JS-Dateien, die nach Belieben erweitert werden können. Standardmäßig sind Bootstrap 4, FontAwesome 5 Pro, jQuery und Popper.js im Paket enthalten. Diese können entrsprechend erweitert werden.
Weitere Assets (Fonts/Icons/Images) können im entsprechenden Ordner in public/assets
abgelegt werden.
- Mit
npm run dev
bzw.yarn run dev
wird Webpack im Development-Modus gestartet. Das Programm kompiliert die SCSS- und JS-Dateien in den in der.env
festgelegten Ordner (i.d.R. 'web/assets'). - Mit
npm run watch
bzw.yarn run watch
wird Webpack im Development-Modus mit Filewatcher gestartet. Das Programm erkennt dann Änderungen im Ordner '/src' und kompiliert die SCSS- und JS-Dateien in den in der.env
festgelegten Ordner (i.d.R. 'web/assets'). - Mit
npm run prod
bzw.yarn run prod
wird wird Webpack im Production-Modus gestartet.
Die kompilierten Dateien werden in public/assets
abgelegt.
Standardmäßig erzeugt unsere Konfiguration folgende Dateien im Ordner web/assets/
:
js/manifest.js
: Webpack-Runtime, muss vor den anderen JS-Dateien eingebunden werdenjs/vendor.js
: Bibliotheken wie jQuery, FontAwesome etc.js/vendor.js.LICENSE.txt
: Übersicht und Lizenzinformationen der eingesetzten Bibliothekenjs/index.js
: Custom JavaScript
Die drei JS-Dateien müssen in der Reihenfloge wie oben gezeigt in den HTMl-Code eingebunden werden.
Die Quelle dieser drei Dateien ist webpack/src/scripts/index.js
, d.h. alles was hier importiert oder geschrieben wird,
ist im kompilierten JS-Code enthalten.
Manchmal möchte man einzelne Funktionsbestandteile ausgliedern, dann kann in der Datei webpack.mix.js
der entsprechende Befehl ergänzt werden, z.B.:
mix.js('frontend/scripts/custom.js', 'js');
Für die JS-Kompilierung stehen noch zahlreiche weitere Befehle zur Verfügung, z.B. zur Kompilierung von Vue (mix.vue(...)
), TypeScript (mix.ts(...)
)
Doku: https://laravel-mix.com/docs/6.0/mixjs
Im Standard wird die Datei webpack/src/styles/index.scss
zur Datei web/assets/css/index.css
kompiliert. Um weitere CSS-Dateien zu erzeugen, kann der folgende Befehl genutzt werden (in webpack.mix.js
):
mix.sass('frontend/styles/other.scss', 'css');
Auch hier werden andere Präprozessoren wie Less oder PostCSS unterstützt.
Doku: https://laravel-mix.com/docs/6.0/css
Laravel Mix kann vor, nach oder im Kompilierungsprozess weitere Tasks durchführen.
Im Standard wird der Inhalt des Verzeichnisses webpack/public
in den Ordner web/assets
kopiert.
- JavaScript kann mit ES6 geschrieben werden, beim Kompilieren wird die in der Datei
.browserslistrc
festgelegte Browserkompatibilität automatisch berücksichtigt - Das lokale Kompilieren des SCSS Codes bietet verschiedene Vorteile ggü. der Kompilierung mit PHP: es wird Autoprefixer für eine bessere Browserkompatibilität genutzt, Bootstrap kann in der neuesten Version verwendet werden, ...
- Webpack bietet ein enormes Potenzial zur Code-Optimierung
- durch Laravel Mix wird die Komplexität der Webpack_konfiguration stark vermindert
.env
bzw..env.*
Dateien sowie die Datei.npmrc
sollen niemals ins GIT committed werden!- es steht ein leerer Ordner '/web' zur Verfügung, der als Mapping-Pfad zum Web-Root auf dem Server genutzt werden kann. Alle Theme und Extension Dateien sollten also hier landen.
FontAwesome 5 wird standardmäßig in der Pro Version via npm install
installiert.
Voraussetzung dafür ist ein gültiger FontAwesome Auth-Token in der Datei .npmrc
. Über Environment Variablen (Einträge
in der Datei .env
) kann zudem gesteuert werden, ob FontAwesome genutzt werden soll (Stanbdard: ja) und ob statt der
Pro-Version FA free verwendet werden soll (Standard: nein).
ENABLE_FONTAWESOME=1
ENABLE_FONTAWESOME_FREE=0
Sofern aktiviert werden im Rahmen des mitgelieferten Build Prozesses mit Laravel Mix die SVG Dateien aus dem FontAwesome
Paket in den Ordner public/icons
kopiert, sodass diese zur weiteren Verwendung/Einbindung (z.B. mit dem IconViewHelper
des https://gitlab.com/creationell_t3extensions/crea_theme_bs4) zur Verfügung stehen. Dieses Verhalten kann in der Datei
webpack.mix.js
natürlich angepasst werden (z.B. könnten stattdessen die Font Dateien kopiert werden, um FA als Font zu
verwenden).