TYPO3 CMS is a great enterprise CMS because it’s highly customizable. While the core comes with many CMS features right out of the box, it’s the PHP extensions that make the possibilities truly endless. Each extension you add dynamically extends the TYPO3 core with just the functionality you need. Other software makers may refer to them as modules, plugins, or add-ons. In this post we’ll look at what it takes to make extensions, how to either get them created for you, or build the skills you need to make them yourself.
A TYPO3 extension is a collection of files containing some functionality and is written in PHP. PHP extensions allow you to easily customize and enhance complex TYPO3 applications.
Being open source software (OSS), TYPO3 CMS comes with full access to the source code and unlimited customizability. That’s why IT decision makers opt for open source over proprietary solutions. The core of TYPO3 solves essential business challenges, with easy administration, content publishing tools, security, multi-lingual and multi-site capability. After that, you can keep your application lean by only selecting features your application needs; for example adding custom integrations, comprehensive search, and custom content templates.
Need to extend TYPO3? There are two ways. Ideally you can find what you need in the TYPO3 Extension Repository (TER), it's like an App Store for TYPO3. If you can't find what you need, then it's time to create your own custom PHP extension.
1. Where to download (free) TYPO3 extensions?
Thanks to TYPO3 contributors there are thousands of freely available extensions. Browse the collection of available extensions in the TYPO3 Extension Repository (TER) on TYPO3.org. Check the documentation of ones you find interesting, download what you need (for free), and install the extensions via the TYPO Extension Manager.
2. How to create custom TYPO3 extensions from scratch?
The TYPO3 community has a wealth of qualified TYPO3 agencies and freelance developers who build TYPO3 websites and applications. One of their key services is creating custom PHP extensions to extend TYPO3. Typically, they would take one of three common approaches to building TYPO3 extensions.
Use a pi-based infrastructure
Contrary to a rumor that stubbornly prevails, it is still considered good practice to use a pi-based (AbstractPlugin) infrastructure to build extensions. Pi-based extensions are not dead, they are still supported and can be used without any limitations. Yes, it is not really “state-of-the-art” anymore and this approach has been surpassed by other methods, but it is still a valid way to build custom TYPO3 extensions.
A good example is the FrontendLoginController, which uses the AbstractPlugin class and can be used as a reference for an implementation.
Based on Extbase and Fluid
Extbase offers a clear and structured means of PHP development, it’s a framework for TYPO3 extension development. Templating can be done in Fluid, a PHP template engine. Good starting points to learn these key skills are the guide on Extbase and Fluid in the TYPO3 documentation, the guide “Creating a First Extension” or a book on Extbase and Fluid with code examples to follow step-by-step (available in English, German and Italian).
Particularly the power of Fluid as template engine is amazing. Fluid is a markup based template engine with the option to extend the functionality with ViewHelpers which can do anything for you. Fluid is also available as a standalone version, which means you can use Fluid in non TYPO3 related projects, but also for pi-based extensions or any other custom PHP code.
Those who are PHP savvy can start from scratch and write the PHP code line by line. Yes, you can write pure PHP code or use other frameworks and components if you like. Simply register any kind of controller as plugin or module and you are ready to use custom PHP code. With the routing feature you can register routes to any PHP entry point you like.
If you want to try create the extensions yourself instead of hiring an agency or a freelancer, you can build the skills you need. Try out the TYPO3 Introduction Package (it’s free!). Here are some more resources to help you learn to get the most out of TYPO3.
TYPO3 CMS questions on Stack Overflow
Before you go anywhere else, check out the questions tagged “typo3” on Stack Overflow.
TYPO3 CMS Slack
The TYPO3 community collaborates on Slack. This is the place to go if you have questions. Check out the #typo3-cms channel for general chat, or find your own local group to meet others in your area.
TYPO3 YouTube channel
You'll also find answers to frequently asked technical questions, instructional clips and all sorts of helpful videos on our TYPO3 YouTube channel. We publish new videos on Friday.
Code sprints - Check out the events listing on TYPO3.org
Review Friday at TYPO3 GmbH
Every first Friday of the month, TYPO3 GmbH opens their doors for all who’d like to contribute to the TYPO3 project by doing reviews or writing patches. It’s a great opportunity to share know-how and learn more as you go.
If you’re an agency or if you’re building your own in-house team of TYPO3 developers you may already know that hiring experienced developers is costly and time-consuming. Wouldn’t it be great to give a less experienced developer an opportunity to learn, and give them on-the-job training to build the skills they need? Of course the problem is getting the time to invest in training and development.
That’s why we created the TYPO3 GmbH program to “Send your junior” where we provide on-the-job training for your junior developer. They get instruction from highly skilled senior TYPO3 developers in a structured environment. This is an investment that will help you grow and scale your team. Then you can hire for the personal qualities you’re looking for, without being limited by technical experience.
Watch junior developer Henrik Elsner from DFAU GmbH talk about his experience on the program. And BTW: While he was working in Düsseldorf for the TYPO3 Company, he built a backend extension that is now available (for free) in the TYPO3 Extension Repository (TER): QueryBuilder, a component to create and run database queries.