Posts by Daniel Siepmann

TYPO3 Plugins as Content Elements

E.g. to add a simplified and project-specific News Extension Content element for backend editors.

You might think “I know what plugins, within TYPO3, are”. Maybe that’s true, maybe you will still learn something new.

This blog post will first explain what TYPO3 plugins are. But it will also explain how to define site specific plugins for existing installed 3rd party extensions, and why this might be useful.

Read more ...

SSH on Windows 10, with PuTTY, Tower and ddev

One of our web agency customers has a Windows only setup. So every developer is using Windows, nothing else. To setup a working environment, including git push and pull, and deployments via php Deployer, I needed to setup SSH for the developers.

As I didn’t find any single source that guided me through all the steps, that were necessary in our case, this Blog post will try to be this source. It will describe the steps I took to setup SSH under Windows 10, together with Git client Tower and drud ddev as docker development environment. Last one is involved due to git clone, e.g. via composer, and for deployments, via Deployer.

Read more ...

TYPO3 content caching

TYPO3 provides a comprehensive caching implementation. Built into all parts of TYPO3. By default TYPO3 tries hard to provide a working caching solution for Websites. This way all generated content is cached whenever possible and delivered right from cache without rendering. This leads to some issues if dynamic content is added. Some bypass this issue by deactivating caching partly or for whole pages.

This post explains how to configure TYPO3 to make caching work without deactivating it. One place where caching does not work out of the box is changing files via Filelist module, changes there will not be reflected in content elements using a file reference. This example is used to explain how caching works in TYPO3 and how to adjust caching.

Read more ...

Configure page UIDs for all content elements in TYPO3

TYPO3 uses pages to organise the structure of a website. This leads to situations where you have a specific page for a feature, e.g. a page “Search” containing the plugin to display search results. Or a page containing the profile of the currently logged in user. Typically links to these pages are scattered all over the website, e.g. within some content elements, inside the page layout like header and within some plugins.

This Blog post explains how to provide the page uid for a specific page, to all three kinds of “content”, where you typically need this information, with three lines of TypoScript.

Read more ...

TYPO3 Camp Rhein Ruhr 2018 - Recap

This is my personal recap of this years TYPO3 Camp Rhein Ruhr. Especially as this is a German speaking camp. I’ll publish the recap in English, so everyone not capable of understanding the Youtube videos or slides, has a chance to at least know what happened.

Right the day before official start of work shops, @Jens_der_Denker, @spooner_web and myself met. Jens and me set up a basic TYPO3 deployment at using Bitbucket Pipelines.

Read more ...

How to use mbox with TYPO3 CMS

From time to time you need to test some email within your TYPO3 installation. Whether it might be that you are a developer sending some mail via a CommandController or Plugin, or you are an integrator configuring EXT:powermail or EXT:form to deliver some mail.

In all cases you need to make sure this mail is not send to external addresses like your customer during development and testing. Also you need to be able to check the content of the mail. In this blog post you will learn what mbox is and how to use it.

Read more ...

Auto login for TYPO3 Backend during development

As an TYPO3 integrator or developer you will login into the same TYPO3 installations multiple times during the same day. There are different ways to prevent the need to login over and over again. One is to add a bit of PHP to the installation, e.g. inside AdditionalConfiguration.php to prevent any login. This should save a lot of time during development.

In this blog post this solution will be shown and explained. You will never ever have to login on your local installation anymore.

Read more ...

Executing TYPO3 acceptance tests

TYPO3 CMS is an open source content management system with lots of contributions. The system has a huge code base which is partially very old and therefore contains a lot of legacy code. Therefore it’s very important to cover existing features with tests, to not break anything if you improve the system.

TYPO3 CMS was improved with a lot of unit and functional tests in the past. Since some time, there are also acceptance tests available, which will test functionality of the backend. All of these tests are executed by the TYPO3 CMS own Bamboo to make sure no merge will break anything. If you want to execute the existing acceptance tests, you already might be a developer and luckily, the repository contains all necessary information to get started.

In this Blog post I will show how to get the necessary information out of the source files and to execute these tests. This should also help in the future, as the way to get there is described, not only how to execute the tests now.

Read more ...

Integrate TYPO3 Linting with GitLab CI

GitLab is the new buzzword for cloud- and self-hosted repository hosting connected to a CI. We are using GitLab-CI in combination with Docker for running tests, linting code and deployments.

In this post I’ll explain how to setup linting TypoScript and YAML for TYPO3 projects using GitLab-CI.

Read more ...

Integrate Typoscript linter into VIM

As more and more people like to lint their files, it’s obvious that we also should lint our Typoscript files in TYPO3 projects. Therefore Martin Helmich has created a Typoscript parser and Typoscript linter.

In this blog post you will learn how to integrate this linter into vim and neovim by using syntastic as a plugin.

Read more ...

Use Whoops as Exception handler for TYPO3

During development for TYPO3 you often run into Exceptions. They do not look very nice. A much nicer alternative might be whoops which @dk2kde told me about. It will not only handle exceptions, but also PHP Errors like syntax errors.

In this small blog post I will show you how to use whoops as exception handler for TYPO3 projects during local development. The result will be:


Read more ...

How to get an access token to access Facebook open graph

If you want to develop something for or with Facebook, you always need an access_token. Facebook provides different access tokens, most of them are received using OAuth. But for command line tools and development there is another way to receive the tokens.

For our example we have a hidden Facebook page. We want to retrieve photos of this page through a PHP command line tool. Therefore we create an app at .


Read more ...

How to create TYPO3 Form select element with options selected from database

TYPO3s new form framework allows to write custom form elements. This way you are able to define a new select element, based on the existing one, but filled with options fetched from database.

E.g. you want your user to select from sys_category or some other custom records. In this blog post I will show how to provide the necessary logic in a custom PHP class, how to register a new element extending the existing one and how to use this new element in your forms.

Read more ...

How to crypt submitted values using a custom finisher in TYPO3 CMS 8

Since TYPO3 CMS Version 8 there is a new Form framework heavily inspired by Neos Form Framework. As most parts of Neos / Flow it’s a great heavy dynamic component with great power.

In this post I will show how easy it is to write a custom finisher to crypt submitted values using the SaltedPasswords extension. This enables you to write fe_user registration forms without the need of 3rd party extensions.

Read more ...

TYPO3 (Extbase) Injection

TYPO3 provides a way of dependency injection. This way you do not need to resolve dependencies inside of your code, but the framework will resolve and provide the dependencies for you. This is provided by the framework Extbase, back ported of Flow.

The main benefit is the flexibility. Using Interfaces to define dependencies, instead of concrete classes, it’s possible to exchange injected dependencies just by configuring the framework. This way you can exchange classes in 3rd party code and receive a huge flexibility. Same goes for testing your code. In this Post I will show you the different ways to make use of dependency injection inside of TYPO3 and provide help for edge cases.

Read more ...

Talk: Writing NeoVim Plugins using Python Plugin API

This talk will be held at Vimfest 2017 in Berlin. I’ll show how to write plugins for Nvim using the new Python Plugin API. The API is async and wraps the new msgpack. The API is called “Remote Plugin API”.

As an example I will use the plugin neotags, which is my first Nvim plugin using the new API. It’s completely written in Python3 and covered with tests. Of course there are already some tag update plugins out there, but I wanted to try out the new API. Also most of the plugins did not work with my setup, or contain to much code and no tests.

Read more ...

Using PHP_CodeSniffer for automated code migrations

PHP_CodeSniffer is a command line tool allowing to check php, js and css. The main use case is to check code styles like the popular PSR-2. Beside checking coding styles, some communities are already using this tool for further checks like direct access to global variables like $_POST instead of using the provided API, e.g. take a look at Magento PHP_CodeSniffer Coding Standard. Also there is a standard to check compatibility of the code with PHP versions.

Beside this use cases and huge benefits, there is another use case: automated code migrations that can be achieved using PHP_CodeSniffer. In this blog post I will provide the necessary basics and an example how to auto migrate your PHP code using PHP_CodeSniffer.

Read more ...

Talk: Introduction to Git for daily usage

This talk will be held at Vimfest 2016 in Berlin. It will introduce you to Git and provide the minimum necessary information to get started using Git on a daily basis.

This post is about the content of the talk and a basic introduction without the hands on.

Read more ...

Build TYPO3 Language Menu without the need of optionSplit

TYPO3 CMS allows you to build a language menu to enable the frontend user to switch the current language. This menu is generated via TypoScript using optionSplit. Just start a query and take a look at the snippets. This way has one big drawback. In a multi domain setup you have to change the config

We have overcame this issue with one language menu working for all setup on all domains without the need to adjust anything. Read here how to achieve this.


Read more ...

TYPO3 Developer Days 2016 in Nuremberg - Recap

The TYPO3 Developer Days 2016 in Nuremberg took place from 01. Sep to 04. Sep in the youth hostel of Nuremberg. During these days multiple prepared talks were presented, together with a coding night of the Core Team where everyone could jump in.

In this post I’ll recap the event and some talks I’ve participated on. All talks that were recorded during the event are available on Youtube as playlist T3DD16 - TYPO3 Developer Days 2016.

Read more ...

Documentation marketing

During my contributions in the area of documentation it turns out most developers have so much fun while developing new features. In the end they are proud of their new product, but don’t provide documentation for their users. Users can be further developers extending the original product via an API, or the user interacting with the product via a GUI or CLI. Sometimes they promote their new product, e.g. a new feature. They write a Blog post, tweet about it, talk on conferences, and so on. But no one else can inform himself about the features and much more important if he once get interested, how to use the product or feature.


Read more ...

Analysing TYPO3 changes via scrapy

Reading a magazine, I was confronted with scrapy »an open source and collaborative framework for extracting the data you need from websites. In a fast, simple, yet extensible way.« The framework is written in python and easy to use. You can persist the information in multiple output formats like xml, json, csv and some more. That makes it easy to fetch structured information like TYPO3 Changelog. Also I had highcharts bookmarked for some years now. The interest in how many changes were introduced in each TYPO3 Version, in combination with the type of change, like breaking change or feature, were the missing idea to put everything together.

In this post you will learn a minimum setup to put scrapy and highcharts together, to visualize information like the mentioned above.


Read more ...

How to find Hooks in TYPO3

Hooks inside of TYPO3 CMS allow you to hook into existing processes of the core, or of extensions, to manipulate the processes.

This post will explain in more depth what hooks are and how you can find and use them.

Read more ...

Flow’s embedded expression language (Eel)

Flow provides different packages, one is the Eel package the embedded expression language. A developer can use Eel to generate a domain specific language, (=DSL). Neos, the CMS built upon Flow, uses Eel to parse parts of their TypoScript 2. Also I’ve heard of one using Eel to generate QR-Codes. Myself has used Eel like Vim auto command for filetype detection. There is a wide range of use cases where Eel can be used.

In this blog post you get a short introduction into the basics to understand how and when to use Eel.

Read more ...

Workflow for: Read the docs, Sphinx and Plantuml

Documentation was never easier, with a Framework like Sphinx and a hoster like Read the docs. All you need is a repository containing your Documentation written with Sphinx and an account at Read the docs. Plantuml can be used in addition to generate UML-Diagrams using plain text. The result can be SVG files in the same color as your Documentation. The whole setup and workflow for that will be explained in this Blog post. After reading the post, you are able to kickstart a new documentation and host it at Read the docs. You then can dig deeper and adjust it to your needs.

A first result after kickstart and first generation.

Read more ...

TYPO3 Custom DevLog

TYPO3 ships with a debugging process called DevLog. It’s a function provided by the core and used by many extensions. The main purpose is to log information for debugging. Beside the new Core feature Logging Framework, it’s older and therefore used in more extensions. TYPO3 doesn’t ship with a handler for this function, it’s possible to provide handler via TYPO3’s Events, Signals and Hooks mechanism and the popular devlog extension is installed on many TYPO3 installations to have a handler which logs everything to the database and provide a backend module to see the entries. But that’s not necessary, you can register your own, very small handler in your AdditionalConfiguration.php or your distribution.


Read more ...

Everything is Content, that can be served via Solr

TYPO3 provides some record types like pages, content, files and categories. With this basic set of record types you can build full blown websites containing products, projects, Blog posts, news and many more different content types without the need of any plugins, it’s just configuration in TYPO3.


Read more ...

Folder specific settings in Vim

If you are like me, you have a structured filesystem for your different jobs. E.g. one for your own projects, one for customers, one for learnings, etc. This allows you to set specific options within Vim related to the projects or customers. E.g. if typo3 uses tabs instead of spaces you can configure that for Projects/typo3/**. And if you want to ignore certain folders like build within Sphinx installations, but not within e.g. typo3 projects, you can do it like the following.

Read more ...


Tmux is a nice tool. Most people already know screen, and tmux is like screen a terminal multiplexer.


Read more ...

Why not to be afraid of asking customers to pay for technical dept

An alternative name for this post could be: I definitely have to learn to take less, or to be happy with less perfectly work. As I had to finish a new feature for one of our customers today, while being at the TYPO3 conference in Amsterdam, I took a look at the time tracking. This feature took five hours of time to be implemented. Everything he requested was to implemented a Newsletter registration with double opt in for a lottery game. Of course the customer already has a registration with double opt in for the newsletter. So the only task I had to do, was to bring the information from lottery form to the newsletter. Sounds like a small deal and it actually was. But where does the time come from?

Read more ...

T3CON15 Day 1 - The agile conference

The first day was all about business with the TYPO3 Award in the evening. One big topic this year on the first day was agile. You could stay the whole day at room onedrop and listen to different aspects and opinions of agile.


Read more ...

Dynamic, context aware, content generation

There was one talk at the TYPO3 conference this year, with the name “Semantic Annotations within TYPO3 CMS” by Johannes Goslar. The main goal is to prepare content inside TYPO3 CMS with semantic information, so you can deliver it with rich snippets to improve SEO. Beside that, the solution developed offers a way to query all your content by the semantic understanding. Most of us heard about Graphs nowadays, whether from Facebook or Google. They aim to make information understandable by computer and enable users to query information like they normally would in the real world.

Read more ...

Inject TypoScript Settings

Sometimes you need settings like TypoScript in a class which is not your controller. Inside a controller, the Extbase framework already injects the settings for you, so you are able to access them under $this->settings.

In all other classes it’s easy to let Extbase inject the settings for you. Just include the following code, and make sure you instantiate the class via \TYPO3\CMS\Extbase\Object\ObjectManager instead of \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance().

Read more ...

OS X Terminal colors and fonts

If you’re using the OS X build in terminal, you wanna change the colors. The default colors aren’t that nice. Instead of changing them manually and figure out a nice set of colors, just grab an existing color scheme for the app. Here are some links with nice color schemes ready to use for you.

OS X Terminal Settings

Read more ...

Link list for Vim

As a dedicated Vim user I’ve collected some links already which I want to share as a list here. This list is dedicated to my team mate @dk2kde. And I recommend walking through them in the order I’ve listed them.

Vim cheat sheet awesome

Read more ...

Why needs CMS a fundamental shift? - Alain Veuve

Yeah, someone else has nearly the same opinion about the #responsive Web as me. It’s fucked up. It’s no solution just … adoption. We need better solutions. Don’t compress something existing to a small Twitter layout. Or do you have a timeline? No most of you use Grids … Don’t merge the columns down to a single one … That’s crap. How can the visitor get an overview of your site and content? He still can do this on his desktop. Don’t cut this experience.

Read more ...

Versioning / revert old files

Even Dropbox has a versioning system that allows you to restore deleted files and folders or revert an older version of a file. What a nice feature. But you can have it even without Dropbox for your local file management. Just try one of the modern version system. There are even nice GUI applications for them so it’s easy to use and setup.

Read more ...

Crypt Mails and Chats on Mac OS X

You can crypt your Mail and Chat on Mac easily using Adium and Apple Mail using GPG. Here you can find the manuals:

Read more ...

Say thanks to the TYPO3 Documentation Team

The TYPO3 Documentation Team makes a great job. Each feature is as good as it’s documentation. Whether inside the code or as HTML or plain text format.

Read more ...

Foreign Post — The 10 rules of a Zen programmer by Christian Grobmeier

Christian Grobmeier wrote an post with 10 rules a Zen programmer should follow, which not only Zen programmes should check out: THE 10 RULES OF A ZEN PROGRAMMER

Read more ...

Merge storagePids in TypoScript setup from multiple Extensions

You often have to merge some storage pids inside your static TypoScript setup of an extension.

Read more ...

TYPO3 now built in Dash

The documentation Team (Fabien Udriot) and the developer of Dash (Bogdan) have worked on the issue integrating TYPO3 into Dash. Now the new version of Dash comes with TYPO3 API built in.

Read more ...

TYPO3 XLIFF for Extension Development

Since TYPO3 4.5 it’s possible to use the new XLIFF-Format for translation. There is a very nice article about the differences and usage in the internet. Take a look at it. After reading I had some more question. I’ll try to answer them now in this post.

Read more ...

Easy ImageMagick on Mac

I don’t know why there are so many articles about installing ImageMagick on a Mac for TYPO3. All you have to do is to install Homebrew (The missing package manager for OS X). After installing (this takes 1 Minute), just run:

Read more ...

Mac OS X, use the native Apache/PHP

I found out how to start the built in Apache in Mac OS X Lion (10.7.x) with standard configuration.

Read more ...

Sorting a multidimensional array with array_multisort

We first need the array we want to sort (here called arrayToSort). Secondly we need a second array containing the values we want to sort. In this case our names. I called the array arrayWithNamesToSort.

Read more ...

MediaWiki: Add SyntaxHighlighter (custom css and js)

Therefore I had to add the CSS- and JS-Files to the Theme. This is done by adding the following lines of code to the method “initPage” of the theme-file:

Read more ...

Use AJAX in TYPO3 without eID

I don’t like to use the eID mechanism, because I have to instantiate everything on my own (db-connection, feuser,…)

Read more ...

TYPO3 Debug last SQL Statement

You often need to debug your SQL-Statements. That isn’t difficult, because TYPO3 give you easy to use functions for this situation:

Read more ...