Blogging with TYPO3

Comparisons between content management systems are a dime a dozen, so I don't want to make another one now. Especially because I find it hard to create an appealing comparison without a specific problem.

So let's assume that we already have a TYPO3 installation and the desire arose to integrate a blog into a site as well. Simplifying and to make it easier to follow, this installation uses bk2k/bootstrap-package with its own template extension (where does the term SitePackage actually come from? In the ext_emconf there is "template" in the parameter "category", isn't there?).

After installing the blog extension of TYPO3 GmbH, you simply follow the setup wizard from the documentation and integrate the whole thing into your template extension with a little TypoScript and TsConfig. All this takes no more than a quarter of an hour if you are a bit familiar with the backend. And it's not worse than installing and configuring any other blog software.

Afterwards you get a page structure in which you can let off steam. In which you can edit pages and their content as you are used to with TYPO3. Content that can be used in multiple languages, an instance in which you can maintain other pages/domains with completely different content in addition to this blog. Together with many other users, if you want. Draw from the pool of a thousand other extensions to prepare and present your content.

Sure, maybe I'm biased, since I've been working with this system for a decade and a half, but I don't know why it's hard to install TYPO3, the bootstrap-package and the blog-extension via composer and then let the wizard create the page structure. A WordPress installation takes just as long and provides me at first also no more functions. Sure, as soon as I then somewhere from a theme with such a page editor reingklicken have, which admittedly really creates any technically uninitiated, WordPress has perhaps its advantages in terms of design. You can see it on this page (I'm just not a pixel pusher ;-) ).

And now I have yet brought in a comparison...


Roleplaying games have always been my hobby somehow. My "Pen & Paper" time is also eons ago, in which we enthusiastically first played Das Schwarze Auge and AD&D and then, in addition to Shadworun, Star Wars (yes, there really was once a roleplaying system for), Plush, Power and Plunder also passed stat battles with the Rolemaster rulebook. And there have always been roleplaying games on the computer. On the C64 I had little contact with it, although there were games like Bards Tale. But the fascination really came with the first part of the Sternenschweif trilogy of the Das Schwarze Auge or with the Pool of Radiance series, which was played on the IBM PC.

But I also loved the Ultima series (especially Ultima VII). And actually wanted to play that again. But it's aged really badly. Above all, you just can't read the yellow text on the background anymore without panicking that you'll have to get new glasses at the optician in the next few days. But on the pile of shame of never finished games, there's also the successor Ultima VIII Pagan. Although the game didn't get good reviews because of its game mechanics, I still remember how I spent nights playing it. And I cursed when I had to master another jump'n'run passage.

I'll see how far I get this time.

Give the code statics

Yes, I know, statics and static code analyzer has nothing common in the first place, but at last will code be better by using them. Harder. And so they contribute to a solid code structure that makes our applications more stable and better.

Roland Golla writes in the edition 5.2021 of the Entwickler Magazin: "Legacy code makes sick." His article is about PHPStan. How you integrate this static code analyzer in your development environment (and that doesn't mean your IDE only), not only to identify undiscovered sources of error but to improve your skills and your knowledge as developer.

You just can't know everything, development in PHP takes place in ever shorter release cycles. On the other hand, the customer's aging application is maintained. Every developer has to cover an enormous range of features that are made available by the PHP version used in the respective project.

In my opinion, the unbelievably beautiful and always fascinating thing about being a software developer is that you learn something every day. Really every day. And tools like static code analyzer can help. I think everyone knows the feeling when you look at code from three, maybe four years ago, shake your head and then after a courageous "git blame" would like to sink into the ground when you realize that you have produced this legacy code yourself.

Static code analyzers start with the first development and help you to write a lot of clean code. They don't necessarily help you to write better program logics, so you can still nest the business logic so uselessly and implement it difficult to understand. But hey, there are other tools like Performance Profiler (Blackfire etc.) that you can throw at this problem.

I can only recommend tools such as PHPStan, rector, Psalm etc. to anyone, in addition to the tools such as PHP-CS-Fixer or PHPMD, which have hopefully been used for years. To analyze code, refactor it, and most importantly, learn. Quasi as pair programming with a tool and not with another developer. Or as a code review before the actual code review.

Disclaimer: Roland Golla made the above-mentioned edition available to me free of charge, for which I thank him very much. I've lost sight of print products for a long time when it comes to programming or topics on the web. But once again it was a wonderful experience to have paper in hand while reading. I will not make a subscription now, but if I should ever travel by train or something again, I will look for such magazines at the station kiosk. Otherwise, I can recommend his YouTube channel "Never Code Alone", which I follow regularly. His videos are mainly about testing, refactoring and general topics about being a developer.


I haven't seen a message from all browsers besides Chrome that want to integrate Google's cookie “replacement” FLoC to track user behavior. But just to really make sure that your own website does not participate in the whole thing, you should prevent the whole thing with a Permissions Policy. Since there is currently only the OptOut using the HTTP response header, you have to put a stop to the whole thing either directly via the server configuration, the htaccess file or by setting the headers using TypoScript:

config {
    additionalHeaders {
		10.header = Permissions-Policy: interest-cohort=()

Of course, please adjust the order in the additionalHeaders array, I'm assuming that there are a few more headers such as content security policy etc.


In the future I would collect the best and most useful articles/websites collect in a list to hold on the one side my list of read articles small and maybe it helps someone on the other side. If anyone even reads my blog. Which I am not assuming.

So let’s start:

  • Xdebug or actually the sponsoring page from Derick, who is the maintainer and inventor of the best debug tool for PHP. Go! Support! Because also developer want to earn money.
  • TYPO3 Rector: actually I wanted to use my vacation for a lot of learning and looking about things over the holidays, but sometimes it happens different. I will use it for the next refactoring/migration and will report about it.
  • Laragon: I am a strong advocate of DDEV for a server environment for local development with TYPO3. Laragon apparently wants to be something like that. Unfortunately I haven’t seen it yet, because I’m more than satisfied with DDEV.
  • A nice “Everything was better (different) before” article about OpenSource development: The Golden Age of Open Source is Over

Everything must leave

In the last year which is not allowed to be called by name, I had so many plans and really achieved only a little bit of it. Because I'm doing something wrong (or different) than everyone else who was also in the home office and felt had have always leisure time or at least were so deeply relaxed, that I have started with meditation in the later summer to get to the same level. The meditation I've given up fast because that is a thing that just doesn't work for me. Apparently you have to believe in it just like with homeopathy, and that's just not what my brain is made for.

I didn't get into blogging as I had planned. Just write texts. For me. And put them on the Internet. For whatever reason. Because that's how it was done in the early times of the Internet. Where the internet wasn't quite as broken as it is today.

Maybe I'll even publish a blogroll here soon, because it there is it still there! The little blogosphere and also the tech bloggers. But I will start with a selection of articles and websites that I saved in Pocket last year and forgot. Of the almost 300 entries I will left these here, maybe one or the other will find something that will help them.

Web design




Programming in general

30 years later

I bought my first Game Boy less than 30 years ago. It must have been in the summer of 1991 when I was in England for a language course during the summer holidays. I scraped together all my pocket money and bought with excitement the console and two games: Dynablaster and Super Mario Land.

The first one was the European version of Bomberman, which you could even play against each other, assuming two modules and the multiplayer adapter, of course. And I think that I don't really have to explain Super Mario Land. The name speaks for itself.

But I never managed to play through the entire twelve levels. No idea why. Until last night. With the last life. One less game on the pile of shame.

Surf another way

Update: With release of TYPO3 10.4.8 the problem is gone because the dependencies were adjusted. Apparently there were problems not only with Surf, but also with Solr and dependencies on PHP 7.2. Nevertheless, I will not install Surf with composer in the project, but instead globally in the DDEV container.

Yesterday a planned maintenance update of TYPO3 was published. Version 10.4.7. The best content management system that I know. And of course all projects should get the new version. What was previously possible without any problems with a hearty 'composer update' without any other effort. Just not yesterday.

composer absolutely refused to integrate the new version into the projects. Okay, no problem, let us approach the whole thing systematically. First with 

composer clear-cache && composer update

force composer to forget everything, go through all the sources and try again. But this did not bring any new TYPO3 onto the hard drive.

Then I would look around and with the question

composer why-not typo3/cms-core:10.4.7

it became clear that typo3/surf has a dependency with symfony/console which finally has a dependency with symfony/event-dispatcher-contracts that prevented going to a larger version than 2.0. But what typo3/cms-core absolutely requires. npm, what the hell!

This morning I tried another time to find a solution but maybe I should think about another job in my elderly age. So there was only Twitter left, my grief complained and minutes later the two heroes @t3easy_de and @chriwode came around the corner.

The first attempt to run Surf locally on Windows failed miserably. Yes, Windows. I don't want to talk about that here. The whole thing fails because, among other things, Windows does not know awk and even if you install this, you will be hit with further errors.

To get to the point: so far I have setup projects using DDEV and not only installed TYPO3 and the extensions used via composer, but also Surf. In order to be able to deploy a project via the command line, for example, if no corresponding CI/CD system is available. My solution now looks like this: Surf has removed of this composer.json and is installed globally via the DDEV start hook:

  - exec: composer global require hirak/prestissimo
  - exec: composer global require typo3/surf:^2.0

So TYPO3 10.4.7 can be installed and I can move the project to another system via surf.

Speed is everything

There are investigations for everything. Also for how the loading time of a website affects the possible bounce rate of the visitors. And it's hard to believe, but the bottom line is that the longer it takes a website to load, the higher the chance that the visitor will close the tab. Incredible.

So you should do everything possible to ensure that a website is delivered and, above all, displayed as quickly as possible. Apart from the fact that you should make sure that elements in the visible area are rendered first and certainly not flip back and forth while loading, another factor that can be easily influenced is keeping the number and the size of the required resources like stylesheets and JavaScript as small as possible.

The AssetCollector has been integrated with TYPO3 10.3. With this, scripts and stylesheets in Fluid files can be added to the rendering process with the ViewHelpers f:asset.script and f:asset.css. They behave similar to the renderAssetsForRequest already added in 8.6, with which you could render the corresponding code via the two Fluid sections HeaderAssets and FooterAssets.

The key difference is that, as the name suggests, the AssetCollector first collects the stylesheets and scripts and then only includes them once in the rendering. This means that I can reference the same JavaScript file in various Fluid files with the same name, which I need for example for a slider, but which is then only stored once in the document using a script tag at the end of the document.

Another advantage is that in this way you can ensure that only required resources are sent to the browser and not a JavaScript plugin for an accordion, which is not rendered on the page. Of course, this negates the concept that you always send the same resources to the browser so that it no longer requests them on the second page because it then takes them from its cache.

But with the simultaneous use of HTTP/2, which ensures that the resources for rendering the website are delivered to the browser before it even knows that it needs them, a speed advantage is still achieved in conjunction with the small data size and is especially noticeable in a faster rendering of the page. It is not at all bad that the resources are not integrated into the concatenation or compression process of TYPO3, as you were used to when you integrated your resources using TypoScript.

And so you have already made a few more visitors to your website happier.
And yes, I know, I have unfortunately not yet activated HTTP/2 on this page. It's not me. I'm sorry.