The Tesseract Project is a suite of TYPO3 extensions that implement a global MVC pattern for collecting information from many sources (in particular the local database) and process it to some output (in particular HTML for display in the frontend).
SQL Database Design For Developers at php[tek] 2024
T3CON10: The Tesseract Project for TYPO3
1. The Tesseract
Project
Display any piece of information in your
web site
François Suter, Senior TYPO3 developer, fsuter@cobweb.ch
David Méndez, Managing Partner, dmendez@cobweb.ch
T3CON10 - Frankfurt, October 2, 2010
3. cobweb.ch
web agency, since 1996
> 6 years TYPO3 expertise
n°1 integrator in Western Switzerland
experienced team
consultancy
webdesign
TYPO3 & Magento developers
SME, major companies & NPO's
4. ecodev.ch
Swiss IT services
> 4 years TYPO3 expertise
7 people
6. tesseract team
François Suter, Cobweb
Lead Developer
TYPO3 core team member
7. tesseract team
François Suter, Cobweb
Lead Developer
TYPO3 core team member
Fabien Udriot, Ecodev
Developer
8. tesseract team
François Suter, Cobweb
Lead Developer
TYPO3 core team member
Fabien Udriot, Ecodev
Developer
Roberto Presedo, Cobweb
Developer
TYPO3 certified integrator
9. tesseract team
François Suter, Cobweb
Lead Developer
TYPO3 core team member
Fabien Udriot, Ecodev
Developer
Roberto Presedo, Cobweb
Developer
TYPO3 certified integrator
David Méndez, Cobweb
Business Development
25. Data Data Data
Filter Provider Consumer
re
View
qu
es
ut
tp
t
ou
Controller
Data Data
Filter Provider
... output
request
Model
26. Data Data Data
Filter Provider Consumer
re
View
qu
es
ut
tp
t
ou
Controller
Data Data
Filter Provider
... output
request
Model
27. Data Data Data
Filter Provider Consumer
re
View
qu
es
ut
tp
t
ou
Controller
Data Data
Filter Provider
... output
request
Model
28. Data Data Data
Filter Provider Consumer
re
View
qu
es
ut
tp
t
ou
Controller
Data Data
Filter Provider
... output
request
Model
29. Data Data Data
Filter Provider Consumer
re
View
qu
es
ut
tp
t
ou
Controller
Data Data
Filter Provider
... output
request
Model
30. Data Data Data
Filter Provider Consumer
re
View
qu
es
ut
tp
t
ou
Controller
Data Data
Filter Provider
... output
request
Model
31. Data Data Data
Filter Provider Consumer
re
View
qu
es
ut
tp
t
ou
Controller
Data Data
Filter Provider
... output
request
Model
32. Data Data Data
Filter Provider Consumer
re
View
qu
es
ut
tp
t
ou
Controller
Data Data
Filter Provider
... output
request
Model
33. dataquery (SQL)
Data Data
googlequery (Google box) Data
Filter Provider Consumer
tagpackprovider (Tag Pack)
re
View
qu
es
ut
tp
t
ou
Controller
Data Data
Filter Provider
... output
request
Model
34. dataquery (SQL)
Data Data templatedisplay (HTML)
Data
googlequery (Google box)
Filter Provider phpdisplay (PHP)
Consumer
tagpackprovider (Tag Pack)
re
View
qu
es
ut
tp
t
ou
Controller
Data Data
Filter Provider
... output
request
Model
35. dataquery (SQL)
Data Data templatedisplay (HTML)
Data
googlequery (Google box)
Filter Provider phpdisplay (PHP)
Consumer
tagpackprovider (Tag Pack)
re
View
qu
es
ut
tp
t
ou
displaycontroller
Controller
displaycontroller_advanced
Data Data
Filter Provider
... output
request
Model
36. dataquery (SQL)
Data Data templatedisplay (HTML)
Data
googlequery (Google box)
datafilter r
Filte Provider phpdisplay (PHP)
Consumer
tagpackprovider (Tag Pack)
re
View
qu
es
ut
tp
t
ou
displaycontroller
Controller
displaycontroller_advanced
Data Data
Filter Provider
... output
request
Model
37. dataquery (SQL)
Data Data templatedisplay (HTML)
Data
googlequery (Google box)
datafilter r
Filte Provider phpdisplay (PHP)
Consumer
tagpackprovider (Tag Pack)
re
View
qu
es
ut
tp
t
ou
displaycontroller
Controller
displaycontroller_advanced
Data Data
Filter Provider
... output
request
tesseract
expressions
Model overlays
context
73. enjoy & share it...
find the extensions in the TER
official website
www.typo3-tesseract.com
contacts
François Suter David Méndez
Lead Developer Business development
@fsuter @davidmendez
Editor's Notes
DME
DME
Founded in 1996, Cobweb is a Swiss web agency in Geneva.
With over 6 years experience on TYPO3, we are the leading TYPO3 integrator in Western Swizerland.
Our experienced team consists of 10 senior consultant, webdesigner and developer.
Our clients are local Small and Medium Entreprises, Major companies like Manpower or non-profit organizations like International Federation of Red Cross and Red Crescent Societies.
Ecodev is a Swiss IT services company based in Neuchâtel.
Ecodev has been using TYPO3 since 2006 and consists of a team 7 people.
François is the initiator and architect of the project. He was supported by Fabien and Roberto.
My self, as usual for business developers, I haven't really worked on the project... but I had the pleasure to experience it on various client projects.
François is the initiator and architect of the project. He was supported by Fabien and Roberto.
My self, as usual for business developers, I haven't really worked on the project... but I had the pleasure to experience it on various client projects.
François is the initiator and architect of the project. He was supported by Fabien and Roberto.
My self, as usual for business developers, I haven't really worked on the project... but I had the pleasure to experience it on various client projects.
François is the initiator and architect of the project. He was supported by Fabien and Roberto.
My self, as usual for business developers, I haven't really worked on the project... but I had the pleasure to experience it on various client projects.
Over the years we worked on a large number of web sites. Our experience is that - although every web site is different - there’s one particular requirement that we need to meet in most projects. So we set out to create a general solution to this recurring need.
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
So what’s that requirement? It’s the need to display variously structured information on the web site. This can be...
- contacts, locations, pieces of real estate, job offers, pharmacies, you name it
to sum it up “stuff”
Clients want to display stuff on their web site, stuff that often comes from internal systems and represent their domain of activity
And what do we want to do with that stuff? Most of the time, always the same:
- list it
- browse it
- view its details
- search it
- and create cross-links between various pieces of information
If you don’t have some special solution, you find yourself repeating the same developments over and over
The TYPO3 Extension Repository is full of extensions each dedicated to one particular type of structured information
This is not a solution
Clients want to display stuff on their web site, stuff that often comes from internal systems and represent their domain of activity
And what do we want to do with that stuff? Most of the time, always the same:
- list it
- browse it
- view its details
- search it
- and create cross-links between various pieces of information
If you don’t have some special solution, you find yourself repeating the same developments over and over
The TYPO3 Extension Repository is full of extensions each dedicated to one particular type of structured information
This is not a solution
Clients want to display stuff on their web site, stuff that often comes from internal systems and represent their domain of activity
And what do we want to do with that stuff? Most of the time, always the same:
- list it
- browse it
- view its details
- search it
- and create cross-links between various pieces of information
If you don’t have some special solution, you find yourself repeating the same developments over and over
The TYPO3 Extension Repository is full of extensions each dedicated to one particular type of structured information
This is not a solution
Clients want to display stuff on their web site, stuff that often comes from internal systems and represent their domain of activity
And what do we want to do with that stuff? Most of the time, always the same:
- list it
- browse it
- view its details
- search it
- and create cross-links between various pieces of information
If you don’t have some special solution, you find yourself repeating the same developments over and over
The TYPO3 Extension Repository is full of extensions each dedicated to one particular type of structured information
This is not a solution
Clients want to display stuff on their web site, stuff that often comes from internal systems and represent their domain of activity
And what do we want to do with that stuff? Most of the time, always the same:
- list it
- browse it
- view its details
- search it
- and create cross-links between various pieces of information
If you don’t have some special solution, you find yourself repeating the same developments over and over
The TYPO3 Extension Repository is full of extensions each dedicated to one particular type of structured information
This is not a solution
Clients want to display stuff on their web site, stuff that often comes from internal systems and represent their domain of activity
And what do we want to do with that stuff? Most of the time, always the same:
- list it
- browse it
- view its details
- search it
- and create cross-links between various pieces of information
If you don’t have some special solution, you find yourself repeating the same developments over and over
The TYPO3 Extension Repository is full of extensions each dedicated to one particular type of structured information
This is not a solution
Clients want to display stuff on their web site, stuff that often comes from internal systems and represent their domain of activity
And what do we want to do with that stuff? Most of the time, always the same:
- list it
- browse it
- view its details
- search it
- and create cross-links between various pieces of information
If you don’t have some special solution, you find yourself repeating the same developments over and over
The TYPO3 Extension Repository is full of extensions each dedicated to one particular type of structured information
This is not a solution
In 2006 I presented my first thoughts about the need for a general solution at T3DD06.
Nothing much happened afterwards, but in late 2007 I had an opportunity to develop a first rough solution, which was presented during T3DD08
In 2008 several large projects gave us the opportunity to start the real development and to put the solution to test on large, high-traffic web sites.
The project matured all the way to the current day and we chose T3CON10 as a deadline for going public.
So now on to the solution itself.
What’s the possible solution to this conundrum? You can see it coming: a generic solution.
Big words
Does that scare you? It should.
Generic solutions...
That’s often how it ends up. You want to do everything and you end up with an overly complex structure which nobody understands anymore after a while.
But it needs not be so
There are clever generic solutions!
They rely on a simple principle: modularity
Generic solutions...
That’s often how it ends up. You want to do everything and you end up with an overly complex structure which nobody understands anymore after a while.
But it needs not be so
There are clever generic solutions!
They rely on a simple principle: modularity
How did we make this modularity come true?
This is the architecture of our solution.
At the center is a controller which receives a request to produce some output. It calls on something called a Data Provider which returns a set of data.
This data is passed to a Data Consumer to produce some output, which is returned by the controller. A typical output will be HTML to display in the TYPO3 FE.
How can that work?
Data Providers and Data Consumers exchange data in standardized formats. This means that there can exist any number of consumers and providers who don’t need to know anything about one another. They must be able to produce or handle the standard data formats. In effect this is an implementation of the Model-View-Controller pattern.
On top of that Data Providers may receive input from Data Filters that is used to restrict the data returned by the Data Provider (think browsing, filtering, searching).
How did we make this modularity come true?
This is the architecture of our solution.
At the center is a controller which receives a request to produce some output. It calls on something called a Data Provider which returns a set of data.
This data is passed to a Data Consumer to produce some output, which is returned by the controller. A typical output will be HTML to display in the TYPO3 FE.
How can that work?
Data Providers and Data Consumers exchange data in standardized formats. This means that there can exist any number of consumers and providers who don’t need to know anything about one another. They must be able to produce or handle the standard data formats. In effect this is an implementation of the Model-View-Controller pattern.
On top of that Data Providers may receive input from Data Filters that is used to restrict the data returned by the Data Provider (think browsing, filtering, searching).
How did we make this modularity come true?
This is the architecture of our solution.
At the center is a controller which receives a request to produce some output. It calls on something called a Data Provider which returns a set of data.
This data is passed to a Data Consumer to produce some output, which is returned by the controller. A typical output will be HTML to display in the TYPO3 FE.
How can that work?
Data Providers and Data Consumers exchange data in standardized formats. This means that there can exist any number of consumers and providers who don’t need to know anything about one another. They must be able to produce or handle the standard data formats. In effect this is an implementation of the Model-View-Controller pattern.
On top of that Data Providers may receive input from Data Filters that is used to restrict the data returned by the Data Provider (think browsing, filtering, searching).
How did we make this modularity come true?
This is the architecture of our solution.
At the center is a controller which receives a request to produce some output. It calls on something called a Data Provider which returns a set of data.
This data is passed to a Data Consumer to produce some output, which is returned by the controller. A typical output will be HTML to display in the TYPO3 FE.
How can that work?
Data Providers and Data Consumers exchange data in standardized formats. This means that there can exist any number of consumers and providers who don’t need to know anything about one another. They must be able to produce or handle the standard data formats. In effect this is an implementation of the Model-View-Controller pattern.
On top of that Data Providers may receive input from Data Filters that is used to restrict the data returned by the Data Provider (think browsing, filtering, searching).
How did we make this modularity come true?
This is the architecture of our solution.
At the center is a controller which receives a request to produce some output. It calls on something called a Data Provider which returns a set of data.
This data is passed to a Data Consumer to produce some output, which is returned by the controller. A typical output will be HTML to display in the TYPO3 FE.
How can that work?
Data Providers and Data Consumers exchange data in standardized formats. This means that there can exist any number of consumers and providers who don’t need to know anything about one another. They must be able to produce or handle the standard data formats. In effect this is an implementation of the Model-View-Controller pattern.
On top of that Data Providers may receive input from Data Filters that is used to restrict the data returned by the Data Provider (think browsing, filtering, searching).
How did we make this modularity come true?
This is the architecture of our solution.
At the center is a controller which receives a request to produce some output. It calls on something called a Data Provider which returns a set of data.
This data is passed to a Data Consumer to produce some output, which is returned by the controller. A typical output will be HTML to display in the TYPO3 FE.
How can that work?
Data Providers and Data Consumers exchange data in standardized formats. This means that there can exist any number of consumers and providers who don’t need to know anything about one another. They must be able to produce or handle the standard data formats. In effect this is an implementation of the Model-View-Controller pattern.
On top of that Data Providers may receive input from Data Filters that is used to restrict the data returned by the Data Provider (think browsing, filtering, searching).
The modularity translates into a number of extensions, each with its own specialization.
Data Providers: dataquery (SQL-based), googlequery (Google Search Appliance or Google Mini), tagpackprovider (Tag Pack)
Data Consumers: templatedisplay (HTML templates), phpdisplay (straight templating in PHP)
Controllers: displaycontroller and displaycontroller_advanced which allows for more complicated interactions between the components
Data Filters: only datafilter, but it’s very powerful and we’ll come back to that later
Additionally there are a number of related extensions: tesseract (which is obviously a base extension), expressions (used by datafilter, more later), overlays (used by dataquery to transparently handle translations) and context (used to define some global values in TypoScript which can be picked up with datafilter - this is a more advanced concept of Tesseract, which I will not cover here)
The modularity translates into a number of extensions, each with its own specialization.
Data Providers: dataquery (SQL-based), googlequery (Google Search Appliance or Google Mini), tagpackprovider (Tag Pack)
Data Consumers: templatedisplay (HTML templates), phpdisplay (straight templating in PHP)
Controllers: displaycontroller and displaycontroller_advanced which allows for more complicated interactions between the components
Data Filters: only datafilter, but it’s very powerful and we’ll come back to that later
Additionally there are a number of related extensions: tesseract (which is obviously a base extension), expressions (used by datafilter, more later), overlays (used by dataquery to transparently handle translations) and context (used to define some global values in TypoScript which can be picked up with datafilter - this is a more advanced concept of Tesseract, which I will not cover here)
The modularity translates into a number of extensions, each with its own specialization.
Data Providers: dataquery (SQL-based), googlequery (Google Search Appliance or Google Mini), tagpackprovider (Tag Pack)
Data Consumers: templatedisplay (HTML templates), phpdisplay (straight templating in PHP)
Controllers: displaycontroller and displaycontroller_advanced which allows for more complicated interactions between the components
Data Filters: only datafilter, but it’s very powerful and we’ll come back to that later
Additionally there are a number of related extensions: tesseract (which is obviously a base extension), expressions (used by datafilter, more later), overlays (used by dataquery to transparently handle translations) and context (used to define some global values in TypoScript which can be picked up with datafilter - this is a more advanced concept of Tesseract, which I will not cover here)
The modularity translates into a number of extensions, each with its own specialization.
Data Providers: dataquery (SQL-based), googlequery (Google Search Appliance or Google Mini), tagpackprovider (Tag Pack)
Data Consumers: templatedisplay (HTML templates), phpdisplay (straight templating in PHP)
Controllers: displaycontroller and displaycontroller_advanced which allows for more complicated interactions between the components
Data Filters: only datafilter, but it’s very powerful and we’ll come back to that later
Additionally there are a number of related extensions: tesseract (which is obviously a base extension), expressions (used by datafilter, more later), overlays (used by dataquery to transparently handle translations) and context (used to define some global values in TypoScript which can be picked up with datafilter - this is a more advanced concept of Tesseract, which I will not cover here)
The modularity translates into a number of extensions, each with its own specialization.
Data Providers: dataquery (SQL-based), googlequery (Google Search Appliance or Google Mini), tagpackprovider (Tag Pack)
Data Consumers: templatedisplay (HTML templates), phpdisplay (straight templating in PHP)
Controllers: displaycontroller and displaycontroller_advanced which allows for more complicated interactions between the components
Data Filters: only datafilter, but it’s very powerful and we’ll come back to that later
Additionally there are a number of related extensions: tesseract (which is obviously a base extension), expressions (used by datafilter, more later), overlays (used by dataquery to transparently handle translations) and context (used to define some global values in TypoScript which can be picked up with datafilter - this is a more advanced concept of Tesseract, which I will not cover here)
How does that translate into real projects? Tesseract is not some conceptual piece of code. It has been powering large web site for about two years.
Let’s look at a couple of them to better understand how the Tesseract components are called into action.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
The International Motorcycle Federation represent a very typical case. The client has a vast quantity of data in external systems: everything related to races (pilots, manufacturers, championships, results, etc.) in a proprietary database and official documents managed with Alfresco. All this data is imported into TYPO3.
Thanks to Tesseract no specific extension needed to be developed to display this data.
The workhorse here is Data Query. We use SQL to query any of the imported tables.
Here’s an example query, aimed at retrieving a list of races.
This query is not executed as is. A Data Filter is applied to it, restricting the selection of races to one particular championship and one particular season.
On the other hand is the template. We use templatedisplay to use a HTML template, complete markers mapped to database fields and TypoScript configuration for finer rendering.
Finally everything is bound together by a Display Controller.
When the Data Query has executed its query, the resulting data set is passed to the Template Display component, which produces output, which is in turn sent to the FE by the Display Controller.
You can see how this matches the schema presented before, but this time with real-world components applied to a real-world web site.
A second example of real-life, large web site using Tesseract is Manpower Switzerland.
Here again we have data coming from third-party system, namely job offers pushed to TYPO3 by a specialized job offers and applications management system.
This project relies on a Google Mini Server for searching, but we needed to bind search results with Tesseract to display customized lists of job offers.
The overall schema is the same as before, so I’ll mention what is really specific here.
One interesting point is that we created special pages using Tesseract that contain the job offer itself plus a number of information relating to it (in particular its primary key) as meta data. Using this information, Google Mini is able to perform a full-text search, but return the corresponding jobs primary keys.
The querying itself is performed using the “googlequery” extension which queries the Google server and returns the resulting data according to the Tesseract standards.
Here are some screenshots of “googlequery”, first is some general information, in the second tab comes the selection of information that we want to retrieve. This information will be available for mapping into the HTML template the same way that we saw in the previous example.
A second example of real-life, large web site using Tesseract is Manpower Switzerland.
Here again we have data coming from third-party system, namely job offers pushed to TYPO3 by a specialized job offers and applications management system.
This project relies on a Google Mini Server for searching, but we needed to bind search results with Tesseract to display customized lists of job offers.
The overall schema is the same as before, so I’ll mention what is really specific here.
One interesting point is that we created special pages using Tesseract that contain the job offer itself plus a number of information relating to it (in particular its primary key) as meta data. Using this information, Google Mini is able to perform a full-text search, but return the corresponding jobs primary keys.
The querying itself is performed using the “googlequery” extension which queries the Google server and returns the resulting data according to the Tesseract standards.
Here are some screenshots of “googlequery”, first is some general information, in the second tab comes the selection of information that we want to retrieve. This information will be available for mapping into the HTML template the same way that we saw in the previous example.
A second example of real-life, large web site using Tesseract is Manpower Switzerland.
Here again we have data coming from third-party system, namely job offers pushed to TYPO3 by a specialized job offers and applications management system.
This project relies on a Google Mini Server for searching, but we needed to bind search results with Tesseract to display customized lists of job offers.
The overall schema is the same as before, so I’ll mention what is really specific here.
One interesting point is that we created special pages using Tesseract that contain the job offer itself plus a number of information relating to it (in particular its primary key) as meta data. Using this information, Google Mini is able to perform a full-text search, but return the corresponding jobs primary keys.
The querying itself is performed using the “googlequery” extension which queries the Google server and returns the resulting data according to the Tesseract standards.
Here are some screenshots of “googlequery”, first is some general information, in the second tab comes the selection of information that we want to retrieve. This information will be available for mapping into the HTML template the same way that we saw in the previous example.
A second example of real-life, large web site using Tesseract is Manpower Switzerland.
Here again we have data coming from third-party system, namely job offers pushed to TYPO3 by a specialized job offers and applications management system.
This project relies on a Google Mini Server for searching, but we needed to bind search results with Tesseract to display customized lists of job offers.
The overall schema is the same as before, so I’ll mention what is really specific here.
One interesting point is that we created special pages using Tesseract that contain the job offer itself plus a number of information relating to it (in particular its primary key) as meta data. Using this information, Google Mini is able to perform a full-text search, but return the corresponding jobs primary keys.
The querying itself is performed using the “googlequery” extension which queries the Google server and returns the resulting data according to the Tesseract standards.
Here are some screenshots of “googlequery”, first is some general information, in the second tab comes the selection of information that we want to retrieve. This information will be available for mapping into the HTML template the same way that we saw in the previous example.
A second example of real-life, large web site using Tesseract is Manpower Switzerland.
Here again we have data coming from third-party system, namely job offers pushed to TYPO3 by a specialized job offers and applications management system.
This project relies on a Google Mini Server for searching, but we needed to bind search results with Tesseract to display customized lists of job offers.
The overall schema is the same as before, so I’ll mention what is really specific here.
One interesting point is that we created special pages using Tesseract that contain the job offer itself plus a number of information relating to it (in particular its primary key) as meta data. Using this information, Google Mini is able to perform a full-text search, but return the corresponding jobs primary keys.
The querying itself is performed using the “googlequery” extension which queries the Google server and returns the resulting data according to the Tesseract standards.
Here are some screenshots of “googlequery”, first is some general information, in the second tab comes the selection of information that we want to retrieve. This information will be available for mapping into the HTML template the same way that we saw in the previous example.
A second example of real-life, large web site using Tesseract is Manpower Switzerland.
Here again we have data coming from third-party system, namely job offers pushed to TYPO3 by a specialized job offers and applications management system.
This project relies on a Google Mini Server for searching, but we needed to bind search results with Tesseract to display customized lists of job offers.
The overall schema is the same as before, so I’ll mention what is really specific here.
One interesting point is that we created special pages using Tesseract that contain the job offer itself plus a number of information relating to it (in particular its primary key) as meta data. Using this information, Google Mini is able to perform a full-text search, but return the corresponding jobs primary keys.
The querying itself is performed using the “googlequery” extension which queries the Google server and returns the resulting data according to the Tesseract standards.
Here are some screenshots of “googlequery”, first is some general information, in the second tab comes the selection of information that we want to retrieve. This information will be available for mapping into the HTML template the same way that we saw in the previous example.
To go a step further in understanding how Tesseract works, let’s step through a simple, but more detailed example.
Image the following scenario: you want to display a list of BE users on your web site, so that people can easily get in touch with the site’s administrators.
This is not possible by default in TYPO3 and you would normally have to develop a custom extension or some other workaround.
This example is actually a summary of the first Tesseract tutorial, which is available on the Tesseract web site and is included in the proceeding of this conference.
To get a list of BE users we’re going to use “dataquery”, since it allows us to send a SQL query to the TYPO3 database.
We choose to select just the admin’s name, username and e-mail address.
A simple HTML template is more than enough for this example (as it is - in our experience - 99% of the time).
The syntax is fairly simple. It relies on markers close to the usual TYPO3 syntax, plus some control elements like loops and conditions.
We’ll come back to this component later.
As a controller we use an instance of extension “displaycontroller”, which acts as a FE plugin. As can be expected from a controller, it defines the relations between the various components.
In this case we just have a Data Provider and a Data Consumer.
Now that these two components have been related with one another, we can go back to the Data Consumer and take the next step...
...which is to map the data coming from the database to the markers that we placed in the template.
This is easily achieved with a convenient point and click interface.
Each marker can be matched to one field. There are different field types, which - roughly - correspond to the base content object types. Additional TypoScript can be entered for each field.
Bingo, a list of BE users in under 5 minutes.
This is a very simple example of what can be achieved with Tesseract. It’s far more powerful that this, but this example highlights a typical workflow.
I would like to dwell a bit longer on one particular component type: the Data Filter. Its flexibility is one important reason for Tesseract’s capability to handle most situations that you can throw at it.
We discussed before the danger that looms over all generic solutions: as they try to cover all situations they grow ever more complex until they become unwieldy and unmaintainable.
One way we avoided this pitfall in Tesseract is to exclude some features from it: one such feature is search forms.
It comes at a little additional efforts for site administrators, but let me try to convince you of this choice.
The problem with search forms is that they are often very specific to a project. Since the data is always different, the criteria change all the time.
And there are often very precise design requirements too.
Look at this first form. That’s just simple drop-down menu to select years.
Next form. There’s still the year selector, but a few more have been added to that.
Next is the page browser. That’s also a form of filter. And note that we still have a year selector, but this time represented by actual pages.
And then there are some really sophisticated forms, with many fields, requiring some unusual layouts
Here’s another one to search for watches on many criteria.
This whole variety of search forms and filters is very difficult to achieve with a generic solution without ending up with an extremely complicated piece of software.
This is the reason why we chose to leave form building completely out of Tesseract.
The problem with search forms is that they are often very specific to a project. Since the data is always different, the criteria change all the time.
And there are often very precise design requirements too.
Look at this first form. That’s just simple drop-down menu to select years.
Next form. There’s still the year selector, but a few more have been added to that.
Next is the page browser. That’s also a form of filter. And note that we still have a year selector, but this time represented by actual pages.
And then there are some really sophisticated forms, with many fields, requiring some unusual layouts
Here’s another one to search for watches on many criteria.
This whole variety of search forms and filters is very difficult to achieve with a generic solution without ending up with an extremely complicated piece of software.
This is the reason why we chose to leave form building completely out of Tesseract.
The problem with search forms is that they are often very specific to a project. Since the data is always different, the criteria change all the time.
And there are often very precise design requirements too.
Look at this first form. That’s just simple drop-down menu to select years.
Next form. There’s still the year selector, but a few more have been added to that.
Next is the page browser. That’s also a form of filter. And note that we still have a year selector, but this time represented by actual pages.
And then there are some really sophisticated forms, with many fields, requiring some unusual layouts
Here’s another one to search for watches on many criteria.
This whole variety of search forms and filters is very difficult to achieve with a generic solution without ending up with an extremely complicated piece of software.
This is the reason why we chose to leave form building completely out of Tesseract.
The problem with search forms is that they are often very specific to a project. Since the data is always different, the criteria change all the time.
And there are often very precise design requirements too.
Look at this first form. That’s just simple drop-down menu to select years.
Next form. There’s still the year selector, but a few more have been added to that.
Next is the page browser. That’s also a form of filter. And note that we still have a year selector, but this time represented by actual pages.
And then there are some really sophisticated forms, with many fields, requiring some unusual layouts
Here’s another one to search for watches on many criteria.
This whole variety of search forms and filters is very difficult to achieve with a generic solution without ending up with an extremely complicated piece of software.
This is the reason why we chose to leave form building completely out of Tesseract.
The problem with search forms is that they are often very specific to a project. Since the data is always different, the criteria change all the time.
And there are often very precise design requirements too.
Look at this first form. That’s just simple drop-down menu to select years.
Next form. There’s still the year selector, but a few more have been added to that.
Next is the page browser. That’s also a form of filter. And note that we still have a year selector, but this time represented by actual pages.
And then there are some really sophisticated forms, with many fields, requiring some unusual layouts
Here’s another one to search for watches on many criteria.
This whole variety of search forms and filters is very difficult to achieve with a generic solution without ending up with an extremely complicated piece of software.
This is the reason why we chose to leave form building completely out of Tesseract.
The problem with search forms is that they are often very specific to a project. Since the data is always different, the criteria change all the time.
And there are often very precise design requirements too.
Look at this first form. That’s just simple drop-down menu to select years.
Next form. There’s still the year selector, but a few more have been added to that.
Next is the page browser. That’s also a form of filter. And note that we still have a year selector, but this time represented by actual pages.
And then there are some really sophisticated forms, with many fields, requiring some unusual layouts
Here’s another one to search for watches on many criteria.
This whole variety of search forms and filters is very difficult to achieve with a generic solution without ending up with an extremely complicated piece of software.
This is the reason why we chose to leave form building completely out of Tesseract.
The problem with search forms is that they are often very specific to a project. Since the data is always different, the criteria change all the time.
And there are often very precise design requirements too.
Look at this first form. That’s just simple drop-down menu to select years.
Next form. There’s still the year selector, but a few more have been added to that.
Next is the page browser. That’s also a form of filter. And note that we still have a year selector, but this time represented by actual pages.
And then there are some really sophisticated forms, with many fields, requiring some unusual layouts
Here’s another one to search for watches on many criteria.
This whole variety of search forms and filters is very difficult to achieve with a generic solution without ending up with an extremely complicated piece of software.
This is the reason why we chose to leave form building completely out of Tesseract.
The problem with search forms is that they are often very specific to a project. Since the data is always different, the criteria change all the time.
And there are often very precise design requirements too.
Look at this first form. That’s just simple drop-down menu to select years.
Next form. There’s still the year selector, but a few more have been added to that.
Next is the page browser. That’s also a form of filter. And note that we still have a year selector, but this time represented by actual pages.
And then there are some really sophisticated forms, with many fields, requiring some unusual layouts
Here’s another one to search for watches on many criteria.
This whole variety of search forms and filters is very difficult to achieve with a generic solution without ending up with an extremely complicated piece of software.
This is the reason why we chose to leave form building completely out of Tesseract.
The problem with search forms is that they are often very specific to a project. Since the data is always different, the criteria change all the time.
And there are often very precise design requirements too.
Look at this first form. That’s just simple drop-down menu to select years.
Next form. There’s still the year selector, but a few more have been added to that.
Next is the page browser. That’s also a form of filter. And note that we still have a year selector, but this time represented by actual pages.
And then there are some really sophisticated forms, with many fields, requiring some unusual layouts
Here’s another one to search for watches on many criteria.
This whole variety of search forms and filters is very difficult to achieve with a generic solution without ending up with an extremely complicated piece of software.
This is the reason why we chose to leave form building completely out of Tesseract.
The problem with search forms is that they are often very specific to a project. Since the data is always different, the criteria change all the time.
And there are often very precise design requirements too.
Look at this first form. That’s just simple drop-down menu to select years.
Next form. There’s still the year selector, but a few more have been added to that.
Next is the page browser. That’s also a form of filter. And note that we still have a year selector, but this time represented by actual pages.
And then there are some really sophisticated forms, with many fields, requiring some unusual layouts
Here’s another one to search for watches on many criteria.
This whole variety of search forms and filters is very difficult to achieve with a generic solution without ending up with an extremely complicated piece of software.
This is the reason why we chose to leave form building completely out of Tesseract.
Instead forms can be built with any solution you choose: any of the existing form extensions, a custom-made plugin, even the standard mailform for simple cases.
Thanks to the expressions library, the Data Filter can retrieve data from many sources including any GET/POST variables, TypoScript values, FE user values, etc.
Thus it does not matter how a search form is built nor how filters or restrictions are defined. It’s possible to catch all these values using a Data Filter.
These values then get injected into the Data Consumer to restrict its selection.
This is very powerful.
So, Tesseract, fine and dandy. But there’s extbase, fluid, flow3, phoenix and all that.
With all the wonders promised by recent and upcoming new technologies, you may wonder why we invested so much in the Tesseract project.
First of all the actual development started back in early 2008. Back then extbase didn’t exist and neither did fluid, flow3 was not even alpha and phoenix was still only conceptual.
So we built a solution on an existing base, but we tried to make it as independent as possible: if you consider the whole Tesseract architecture, it’s really just the controller who are built as pibase plugins.
The other components are independent.
There could be an extbase-based controller.
There’s already a Fluid-based Data Consumer on Forge. It’s not released yet because it depends on changes in Fluid that are not stable yet, but which enable Fluid to run outside of an Extbase context.
But in the very near future it will be possible to also use Fluid within Tesseract.
What with further in the future, with TYPO3 v5?
This is very hard to say for now. There are talks about trying to create generic domain models. This might render Tesseract obsolete, but we’re not there yet.
The modular structure of Tesseract can certainly be reproduced in the v5 and some of the logic reused.
In the meantime Tesseract helps solve real-world problems in a very flexible way and we’re very happy about releasing it to the community.
All extensions that make up Tesseract have been released to the TER on Monday this week.
We have also set up a dedicated web site with a global overview of the project and some tutorials. We plan to release more tutorials in the future, as well as tips & tricks and examples of advanced usage.
So go and look at the web site and watch the introductory screencast. Try out Tesseract and give us your feedback. We hope you will find it as useful as we do.