I've worked with Phabrictor, GitHub, Bitbucket and GitLab in the past. GitHub itself has a very clean process for forks and many people seem to be fine with them. I myself wasn't aware of some issues for a very long time. But a TYPO3 community member recently contacted me because of a so-called “fork” I had created which changed my mind. That revealed a big issue to me, followed by some smaller…
I attend this year's Web Camp Venlo. And usually I don't publish recaps any more. But this year felt special to me and there was so much going on that I need to write that down and share the experience with everyone out there. History ¶ The Web Camp Venlo started as a TYPO3 Camp back in 2015. I still have the T-shirt, and it was my very first international TYPO3 Camp. I'm living next to the Dutch…
We always use composer to manage our TYPO3 (and other) PHP projects. I'll share our own best practices that come along by using composer for TYPO3 projects. File structure ¶ We store one composer.json which is project specific inside the root folder of a project. We also have a folder holding all project specific composer packages, e.g. specific extensions. The file directory looks like this: .…
We have a custom TYPO3 Backend module which is a small web application. We wrote the web application using TypeScript. But we need to make use of some TYPO3 JavaScript APIs which do not expose types for TypeScript. I'll be going to explain how to set up TypeScript for modules not providing those types. This is a general approach, not specific to TYPO3. Note ¶ I'm not a frontend developer, but a…
Many people, including myself, prefer the already known solutions. We tend to get things done fast by not checking all the possible solutions out there. Checking all solutions for a new problem can be very time-consuming, and we would need to learn a new solution. We therefore often tend to keep the existing solutions as long as possible. I share my own experience with one situation where I had to…
We do website upgrades from time to time, e.g. upgrade from TYPO3 version 10 to version 11. This involves some manual tasks, and you need to verify that everything works as expected prior promising the customer you're done. There are some tools out there to help you get the job done. Still I sometimes prefer a very basic Unix command to get the job of comparison done. Read on how I crawl the two…
I sometimes have a list of URLs and want to check their status code. One use case are updates of a TYPO3 system where I want to check that all the detail pages (e.g. products, authors, etc.) are working. The web server would return a 200 response in case everything is fine, and a 500 in case of issues. This short code snippet will check a list of URLs from a file and return all the URLs with their…
TYPO3 developers are often faced with the same requirement: Import data into TYPO3. TYPO3 itself offers many ways to import data into the system. The DataHandler (TCE) or Extbase might come to your mind, as well as plain Doctrine DBAL queries. This post will explain my views on each of the options and their pros and cons. I don't consider any of them the general solution, but the pros and cons…
I'm a professional web developer doing PHP with TYPO3 since 2012. This post covers my journey from the beginning, how I've become a web developer and how I've become a TYPO3 developer and integrator. I'll also cover my experience back in the old days as a beginner and my current experience, covering my own history as well as TYPO3 history. I hope this will be useful for you, e.g. providing…
I'll dig into the benefits I see in source based distributions in general and especially Nix. This is not about my setup or what I've learned, but what I like right now about my existing setup. We dig into the nixpkgs repository, the nix language and features we get by using the language to describe the system. We will also see how the NixOS and home-manager modules allowed me to learn Linux way…
This should be the first blog post about my Nix Journey, let's see if I’ll continue, there are no promises, except that I hope and plan to continue. This first post will explain how I got introduced to the hole Nix ecosystem. I try to explain where I started, why I had a look and how it continued. It might help you to see how easy or difficult it might be to switch, But it probably only is…
I've a small collection of custom shell scripts for various tasks. Many people use different ways of organizing those scripts. I'm using nix home-manager to actually create those scripts. I'll explain the benefits of using home-manager as a wrapper. And I'll explain my naming convention and why I follow the convention. Building shell scripts with nix home-manager ¶ I'm using…
We need to update software regularly. E.g. because our framework released a new major version containing breaking changes to APIs. It is a cumber stone and hard and boring task, not meant to be done by humans. Luckily we have computers and software we can use to automate boring tasks. Our example is about TYPO3 and Aimeos updates. TYPO3 is an open source CMS while Aimeos is an open source shop…
I find motivation crucial. It is the most important energy that drives us. Everyone has different motivations, but it is essential to every one of us. I currently lack motivation to write new blog posts. And I decided to write down my thoughts why I lack motivation and what actually motivates me. Maybe that will help some of you to learn from it regarding your own motivation. Why I blog ¶ I…
I've just made two updates from TYPO3 v8 to 11 LTS. As well as some updates from 11 LTS to 12 LTS. This post will be an explanation of how I did those updates in order to share my experience with you. Update vs Upgrade ¶ People might have different definitions for “Upgrade” as well as “Update”. Here is my definition, in order to align expectation for this blog post. Both mean to update a software.…
My usual workflow for working on forks looks like this: Clone the original repo, add my own fork as second remote. Fetch all changes from original repo, create a new branch, and push this branch to my own fork. The pushing is where the default sucks. Git will by default push to origin which is the original repo without push rights. I'll explain two solutions I've used so far to ease this little…
TYPO3 provides an "Application Information" dropdown to show some information. This dropdown can be extended with custom information, e.g. some API endpoints or currently deployed Git Commit Hash. This can ease debugging as you can easily check whether the system runs the newest version with all changes applied. I did that for one of our customers and wanted to share how easy it is to add such…
I'm a user of the Fediverse. But TYPO3 is not yet there. I've created multiple accounts that mirror feeds to you can follow them within the Fediverse. Using the accounts ¶ You can either follow the different accounts with your own Fediverse account. Each account also is available as an Atom Feed which you can add to your feed reader. You can also check each accounts contacts and add the RSS feeds…
The internet (more precisely the www) is a decentralized network where everyone can take part. Everyone should be able to contribute, e.g. by providing content. I've discovered the www at the end of 90s and became a web developer. The www is one of my passions and I believe in the decentralized human build www. We should not hand over the www to a small group of big corporations. I'll show you how…
Sometimes a headline needs to use line breaks or formatting like italic words. Some integrators define placeholders like [BR] which get substituted. We use TYPO3 native RTE functionality with stripped down configuration. This small post describes how we set it up. The goal is to have a small field and features like limited number of characters and reduced formatting possibilities. The Problem ¶…
I've read different tips & tricks from developers. I've also read different workflows like "git flow". And I've worked with some freelancers and agencies on a dozen of projects. This post will share my current git workflow that works for all of our clients in all the projects. This includes switching projects and knowing where to continue once you come back. And this also ensures the rest of the…
I thought it is fine to use older no longer supported PHP versions as long as they are supported by the OS (e.g. Debian, Ubuntu, etc.). I've changed my mind after reading blog posts and noticing a change within PHP ecosystem. Let me explain why I changed my mind and why you should prefer official supported versions instead. This not only is true for PHP but any software. How I used to think ¶ I…
Functional tests won't mock single implementations. But code often interacts with external systems by sending requests, e.g. via Guzzle. Guzzle is the default library used within TYPO3, so you might need to mock the requests within functional tests. This blog post explains our solution which is based on Guzzle Docs and Susis Blog post on how to mock Guzzle Client implementation within Unit Tests.…
I know many editors and people complaining about TYPO3 for various reasons. In this video I'll show an actual customer project. I demonstrate how performant a website build with TYPO3 and EXT:solr can be. And I demonstrate how pleasant the TYPO3 backend can be. Context ¶ The customer switched the agency because the old agency created a very slow website. The website used EXT:ke_search. That itself…
I'm using Ubuntu LTS for some years now, coming from macOS with Homebrew beforehand. Right now I'm switching parts of my setup to nix home-manager. Nix itself is a package manager and language to describe how to install packages. home-manager is a community project built on top of the language to describe the setup of a user (home). This post will give a short overview of the benefits and my new…
TypoScript by concept is meant for frontend context only. There is TSconfig for backend as well. Extbase introduced a way to also configure backend modules via TypoScript. Nowadays TypoScript is also used in other context, e.g. scheduler tasks or commands. I'll explain how the actual TypoScript is loaded, so you understand that part and can use it. The issue ¶ Let me explain the issue first.…
Some real world examples on how to use the Symfony Dependency Injection in TYPO3. E.g. how to inject TypoScript settings or database query builder. Don't expect to many explanations here. These are already available, see links at bottom. Instead, this blog post contains concrete examples as reference and copy & paste. Inject DB Connection and QueryBuilder ¶ Given the new Dependency Injection, one…
I hated tag clouds because I didn't understand them. I didn't understand the benefit of those clouds. Today I've understood the huge benefit and actually think they are a must-have. They make using the internet more joyful. I'll try to explain why I think every website profits from being browsable. I'll show examples where websites lost this feature and are more or less useless to me, and even…
Today's search engines are broken. They destroyed the discoverable part of the internet. We are no longer able to find content on the internet. We are pushed towards their own content and big players like Wikipedia or stack overflow. I no longer follow this path and tried to summarize my thoughts and ideas on that topic. I don't remember the times when there were no search engines. As far as I…
Some of you, like one of our customers, are still on TYPO3 v8 or 9. We all dream of a bright future where we get shiny new features like new event handling by PSR-14, and dependency injection by PSR-11. Still we can write code that actually follows the new features and provides benefits today. Updates will become very smooth thanks to rector which could auto migrate everything necessary. Read the…
Some years ago we got a new customer with a lot of similar TYPO3 installations. All had their own Git repository. We decided to migrate this setup to composer and split the existing TYPO3 extensions out of the repositories, into their own. This year we noticed that was a bad idea, and we will migrate all installation into a single Git repository, together with all extensions. I'll try to explain…
Since TYPO3 10.0 it is possible, actually necessary, to use FQCN (=Fully Qualified Class Names) for controllers when configuring plugins and modules. This provides a new benefit in terms of reusing and sharing code between different extensions. This blog post will explain the benefit and provide an outlook in a possible future of TYPO3 Extbase extensions. The technical change ¶ The new feature was…
I'll explain my current setup of Neovim. I'm using this editor since some years as the only editor. I'm a full time developer, mostly working on PHP based websites using the open source CMS TYPO3. Therefore, my Neovim is tuned to ease work in that specific area. I've also worked with ReStructuredText (=rst), Python and TypeScript. Most parts should be reusable for other areas, some are very…
A new bugfix version of TYPO3 extension feedit was released. This one actually allows to use the extension again, and also fixes an issue that prevented proper initialization. Older versions of the extension did not properly initialize TYPO3 backend, e.g. when trying to edit an record. This could lead to an unusable state. This version should fix that and always allow to edit records. The issue is…
I've created a small tracking extension for TYPO3. This should basically demonstrate what developers can achieve with newest APIs inside of TYPO3 v10. It also provides widgets and works as a showcase for the new EXT:dashboard. Two of our customers requested us to extend the extension for their TYPO3 installations. Therefore we added some more features and are now releasing the extension for public…
This post will provide a small introduction into composer package "maglnet/composer-require-checker". Some hints regarding usage for TYPO3 extensions is given, while there is not to much to know. The composer package allows to check missing dependencies within composer.json. Its purpose is to run locally or in a CI to verify that all necessary dependencies are added to the composer.json file. The…
I prerecorded a talk for the t3oce 2020. The talk should introduce beginners into the concepts of TYPO3. It should explain how to add and edit content, as well as what content in Context of TYPO3 actually is. Once one knows these basic concepts, I explain how to render content with TYPO3. The talk should work as an basic introduction into TYPO3 for integrators as well as developers. TYPO3 Online…
This is my very first video. It will introduce you to the beginning of PHPUnit to create unit tests for PHP Code. The video includes instructions on how to install dependencies via composer, as well as how to write and execute first tests. Execution is done on command line, as this should be the same on all environments. The video is intended for real beginners. You should have zero experience…
TYPO3 has hidden gems. One of them is the system extension feedit which adds frontend editing to TYPO3. It adds some options to the admin panel in TYPO3 frontend, and allows integrators to add more fine grained edit experience right into the content. This post will cover most of the provided features, with screenshots and how to configure the extension. I'll also explain why I prefer the approach…
With TYPO3 version 10 around the corner, it is time to have a deeper look at new features. I often hear something like "those features are only targeting developers". Therefore I try to promote opportunities for agencies and users, provided by the new more technical features. Expect a round up of ext:dashboard, new notification API, PSR-14 Events, and some more. This block post should prove that…
When using mysqldump, the tool has to be compatible with mysql server version. Some hosters might not provide such an environment. That's one reason when you wanna use mysqldump on your local system to create an mysql dump from a foreign database. Most environments prevent remote access to the database server, which is a good thing. But this would prevent you from using mysqldump on your local…
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…
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…
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…
Daniel gave a live coding workshop during the "Hall of Fame Never Code Alone Event". The workshop was in german and recorded on video. The workshop included the very basics of how to use Vim, and understanding the concepts behind. The participants worked with a wireless keyboard and tried to find their way around. This is the concept of "Never Code Alone Events". Recorded video ¶ You can find the…
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…
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…
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…
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,…
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. TypoScript linting ¶ Martin Helmich has created a TypoScript parser and TypoScript linter which already…