Qbus Werbeagentur GmbH
Heiligengeisthof 5 • 18055 Rostock • Tel. (0381) 4 61 39 0 • info@qbus.de • www.qbus.de
Traumziel MV:
Relaunch eines Tourismusportals mit Extbase und Fluid
Vortrag auf den 9. Wirtschaftsinformatiktagen an der Hochschule
Wismar
Dipl.-Ing. Axel Wüstemann | Qbus Werbeagentur GmbH | awu@qbus.de
Qbus Portfolio
- Logo
- Corporate Design
- Corporate Identity
- Corporate Language
- Websites
- Webanwendungen
- Redaktionssysteme
- Content
- Google Werbung
- Suchmaschinenoptimierung
- Zugriffsanalyse
- Social Media Beratung
Projekt-Steckbrief
Hotels als Gastgeber
Basis des Monetarisierungskonzeptes:
Hotels und Pensionen zahlen dafür, dass sie über Traumziel-MV.de
ihren Gâsten einen ganz besonderen Mehrwert anbieten können
Projekt-Steckbrief
Realisierung auf Basis Macromedia / Adobe Flash und MySQL
gewachsene Struktur – viele „Hacks“
uneinheitliche Daten- und Codebasis
fest im Code implementierte Sonderwünsche
Ziele des Relaunch
Eliminierung von Flash als veralterte Technologiebasis
vollstândige mobile Benutzbarkeit
gute Erfassbarkeit von Suchmaschinen mit der Zielstellung, ein
gutes Ranking für relevante Keywords zu erreichen
Einführung eines Premiumbereiches
Kartenmaterial auf Google Maps oder Open Street Map basierend
zukunftsfâhige Technologiebasis für stabilen Betrieb, Wachstum
und weiteren funktionalen Ausbau Typo3
TYPO3 CMS
TYPO3 CMS existiert seit 1998 / ursprünglich entwickelt
vom Dânen Kasper Skårhøj
Nach mehreren Jahren im "Beta-Test"
kam mit der Version 3.0 am 24. Mai 2002
die erste "richtige" Version auf den Markt.
TYPO3 CMS
TYPO3 CMS ist ein
„Enterprise Open Source Content Management Framework“
ca. 500.000 Installationen weltweit, > 5 Mio Downloads
Einsatz in DE z.B. bei > 50% aller DAX 500 Unternehmen, > 50% aller
Bundesliga-Vereinen, Discounter, Autovermieter, Öffentliche
Trâger,...
> 6.000 Extensions, > 100.000 Entwickler weltweit, > 1.500
Agenturen weltweit
Finanziert und unterstützt von der TYPO3 Association
Prinzip eines CMS
Trennung von Inhalt (Content) und Darstellung (Template)
Besonderheit TYPO3: TypoScript
TYPO3 NEOS
Auf den ersten T3DD (TYPO3 Developer Days) im Jahr 2006 wurde
der Entschluss gefasst, TYPO3 von Grund auf neu zu schreiben
Das Projekt wurde vom
Kernentwickler
Robert Lemke
begonnen und nach
wenigen Monaten von
Karsten Dambekalns
unterstützt.
Codename: TYPO3 Phoenix (bzw. TYPO3 5.0)
Beginn der Entwicklung mit eigenem Framework TYPO3 Flow
TYPO3 Flow
TYPO3 Flow ist ein PHP Framework
Bits und Bytes
Strukturen, Funktionen, Objekte
Architektur und Lösungen für Standardaufgaben
Prozessor
Programmiersprache
Framework
Anwendung Lösung der Anwendungsaufgabe
Führende PHP Frameworks
TYPO3 Flow – MVC-Architektur
Domain-Driven Design
Model
View
Controller
TYPO3 Extbase
Rückportierung von TYPO3 Flow auf TYPO3 CMS
für die Programmierung von TYPO3 CMS-Erweiterungen
(extensions)
für die Modernisierung der Codestruktur
von TYPO3 CMS
Domain Driven Design
Hiking
Activity
WaterTravel AnimalWatching
Region
Host
City
Domain Driven Design
Activity
- activityType
- activityName
- activityHosts
- region
...
ActivityRepository
- add()
- update()
- findByHost()
- findByRegion()
...
Persistenz
basiert in Flow auf den Object Relational Manager (ORM) Doctrine
andere Persistenzlayer als relationale Datenbanken anbindbar
in Extbase auf der Typo3 Datenbank API
public function addActivityToPinAction(Pin $pin, Activity $activity)
{
...
$pin->addActivity($activity);
$this->pinRepository->update($pin);
...
}
DQL – Data/Doctrine Query Language
/**
* finds animalWatching tours for a region
*
* @param QbusTraumzielmvDomainModelRegion $region
*/
public function findByRegion($region)
{
$q = $this->createQuery();
$q->matching(
$q->logicalAnd(
$q->equals('region', $region),
$q->equals('activityType',
'animalWatching'),
$q->equals('isActive', true),
));
…
Dependency Injection
class HikingController extends ... {
/**
* hikingRepository
*
* @var QbusTraumzielmvDomainRepositoryHikingRepository
* @inject
*/
protected $hikingRepository;
public function listByRegionAction(Region $region) {
$hikings = $this->hikingRepository->findByRegion($region);
...
}
Annotationen
weniger Code, lesbarer Code, wartbarer Code
z.B. für Validierung, Relationen zwischen Objekten (1:n, m:n usw.),
Object-Property - Database-Field Mapping, Objekttyp (singleton,
prototype, session), AOP-Steuerung, eigene Annotationen
class Pin extends TYPO3CMSExtbaseDomainObjectAbstractEntity {
...
/**
* Datetime until the pin is valid
*
* @var DateTime
* @validate NotEmpty
* @validate(type="DateTime", options={"locale"="de_DE"})
*/
protected $validTo;
...
Weitere Merkmale von Flow/Extbase
AOP – Aspektorientierte Programmierung
Modularisierung von modulübergreifenden Aspekten,
wie z.B. Logging, Security usw.
AOP gibt es nur in Flow, nicht in Extbase
Signal Slot
Implementierung des Observer Patterns für Event-gesteuerte
Ablâufe
TYPO3 Fluid
Mechanismus um „intelligente“ Templates zu entwickeln
klassisch TYPO3: „Markertemplates“
weit verbreitete Extension bis Typo3 4.x: TemplaVoilá
Fluid:
XML-Konform
durch ViewHelper erweiterbar
Template
Layout
Partial
Partial
{namespace tzmv=QbusTraumzielmvViewHelpers}
...
<f:security.ifHasRole role="Gastgeber">
<f:then>
<li>
<f:link.page pageUid="157" ...>
<i class="fa fa-power-off"></i> Abmelden
</f:link.page>
</li>
</f:then>
<f:else>
...
</f:else>
</f:security.ifHasRole>
<nav id="navigation">
<f:cObject typoscriptObjectPath="lib.extTzmv.mainMenu"/>
</nav>
<f:render section="headerMenu" />
<f:comment>Seiteninhalt</f:comment>
<div id="main">
<div class="container">
<f:render section="content" />
</div>
</div>
ViewHelper
class BoolViewHelper extends AbstractViewHelper {
/**
* returns Ja/Nein due to the boolean input value
*
* @param boolean $value
* @return void
*/
public function render($value)
{
return ($value) ? 'Ja' : 'Nein';
}
}
Das Typo3 Universum
EXTBASE FLUID
Fazit
mit Typo3 und Extbase lassen sich komplexe Webanwendungen
mit sinnvollem Aufwand umsetzen
optimal insbesondere in der Mischung von applikativen und
CMS-Funktionen
Daten- und Objektmodellierung sehr einfach und direkt möglich –
insbesondere mit Unterstützung des grafischen Kickstarters
mit Fluid lâsst sich recht elegant arbeiten, bei komplexeren Templates
ergeben sich Strukturierungs- und letztendlich Wartungs-Probleme
größte Herausforderung war die sinnvolle „Responsive“-Umsetzung –
weitere Optimierungen notwendig
Möglich aber noch nicht umgesetzt: testgetriebene Entwicklung

Traumziel MV: Relaunch eines Tourismusportals mit Typo3 Extbase und Fluid

  • 1.
    Qbus Werbeagentur GmbH Heiligengeisthof5 • 18055 Rostock • Tel. (0381) 4 61 39 0 • info@qbus.de • www.qbus.de Traumziel MV: Relaunch eines Tourismusportals mit Extbase und Fluid Vortrag auf den 9. Wirtschaftsinformatiktagen an der Hochschule Wismar Dipl.-Ing. Axel Wüstemann | Qbus Werbeagentur GmbH | awu@qbus.de
  • 2.
    Qbus Portfolio - Logo -Corporate Design - Corporate Identity - Corporate Language - Websites - Webanwendungen - Redaktionssysteme - Content - Google Werbung - Suchmaschinenoptimierung - Zugriffsanalyse - Social Media Beratung
  • 3.
    Projekt-Steckbrief Hotels als Gastgeber Basisdes Monetarisierungskonzeptes: Hotels und Pensionen zahlen dafür, dass sie über Traumziel-MV.de ihren Gâsten einen ganz besonderen Mehrwert anbieten können
  • 4.
    Projekt-Steckbrief Realisierung auf BasisMacromedia / Adobe Flash und MySQL gewachsene Struktur – viele „Hacks“ uneinheitliche Daten- und Codebasis fest im Code implementierte Sonderwünsche
  • 7.
    Ziele des Relaunch Eliminierungvon Flash als veralterte Technologiebasis vollstândige mobile Benutzbarkeit gute Erfassbarkeit von Suchmaschinen mit der Zielstellung, ein gutes Ranking für relevante Keywords zu erreichen Einführung eines Premiumbereiches Kartenmaterial auf Google Maps oder Open Street Map basierend zukunftsfâhige Technologiebasis für stabilen Betrieb, Wachstum und weiteren funktionalen Ausbau Typo3
  • 8.
    TYPO3 CMS TYPO3 CMSexistiert seit 1998 / ursprünglich entwickelt vom Dânen Kasper Skårhøj Nach mehreren Jahren im "Beta-Test" kam mit der Version 3.0 am 24. Mai 2002 die erste "richtige" Version auf den Markt.
  • 9.
    TYPO3 CMS TYPO3 CMSist ein „Enterprise Open Source Content Management Framework“ ca. 500.000 Installationen weltweit, > 5 Mio Downloads Einsatz in DE z.B. bei > 50% aller DAX 500 Unternehmen, > 50% aller Bundesliga-Vereinen, Discounter, Autovermieter, Öffentliche Trâger,... > 6.000 Extensions, > 100.000 Entwickler weltweit, > 1.500 Agenturen weltweit Finanziert und unterstützt von der TYPO3 Association
  • 10.
    Prinzip eines CMS Trennungvon Inhalt (Content) und Darstellung (Template) Besonderheit TYPO3: TypoScript
  • 11.
    TYPO3 NEOS Auf denersten T3DD (TYPO3 Developer Days) im Jahr 2006 wurde der Entschluss gefasst, TYPO3 von Grund auf neu zu schreiben Das Projekt wurde vom Kernentwickler Robert Lemke begonnen und nach wenigen Monaten von Karsten Dambekalns unterstützt. Codename: TYPO3 Phoenix (bzw. TYPO3 5.0) Beginn der Entwicklung mit eigenem Framework TYPO3 Flow
  • 12.
    TYPO3 Flow TYPO3 Flowist ein PHP Framework Bits und Bytes Strukturen, Funktionen, Objekte Architektur und Lösungen für Standardaufgaben Prozessor Programmiersprache Framework Anwendung Lösung der Anwendungsaufgabe
  • 13.
  • 14.
    TYPO3 Flow –MVC-Architektur Domain-Driven Design Model View Controller
  • 15.
    TYPO3 Extbase Rückportierung vonTYPO3 Flow auf TYPO3 CMS für die Programmierung von TYPO3 CMS-Erweiterungen (extensions) für die Modernisierung der Codestruktur von TYPO3 CMS
  • 16.
    Domain Driven Design Hiking Activity WaterTravelAnimalWatching Region Host City
  • 17.
    Domain Driven Design Activity -activityType - activityName - activityHosts - region ... ActivityRepository - add() - update() - findByHost() - findByRegion() ...
  • 18.
    Persistenz basiert in Flowauf den Object Relational Manager (ORM) Doctrine andere Persistenzlayer als relationale Datenbanken anbindbar in Extbase auf der Typo3 Datenbank API public function addActivityToPinAction(Pin $pin, Activity $activity) { ... $pin->addActivity($activity); $this->pinRepository->update($pin); ... }
  • 19.
    DQL – Data/DoctrineQuery Language /** * finds animalWatching tours for a region * * @param QbusTraumzielmvDomainModelRegion $region */ public function findByRegion($region) { $q = $this->createQuery(); $q->matching( $q->logicalAnd( $q->equals('region', $region), $q->equals('activityType', 'animalWatching'), $q->equals('isActive', true), )); …
  • 20.
    Dependency Injection class HikingControllerextends ... { /** * hikingRepository * * @var QbusTraumzielmvDomainRepositoryHikingRepository * @inject */ protected $hikingRepository; public function listByRegionAction(Region $region) { $hikings = $this->hikingRepository->findByRegion($region); ... }
  • 21.
    Annotationen weniger Code, lesbarerCode, wartbarer Code z.B. für Validierung, Relationen zwischen Objekten (1:n, m:n usw.), Object-Property - Database-Field Mapping, Objekttyp (singleton, prototype, session), AOP-Steuerung, eigene Annotationen class Pin extends TYPO3CMSExtbaseDomainObjectAbstractEntity { ... /** * Datetime until the pin is valid * * @var DateTime * @validate NotEmpty * @validate(type="DateTime", options={"locale"="de_DE"}) */ protected $validTo; ...
  • 22.
    Weitere Merkmale vonFlow/Extbase AOP – Aspektorientierte Programmierung Modularisierung von modulübergreifenden Aspekten, wie z.B. Logging, Security usw. AOP gibt es nur in Flow, nicht in Extbase Signal Slot Implementierung des Observer Patterns für Event-gesteuerte Ablâufe
  • 23.
    TYPO3 Fluid Mechanismus um„intelligente“ Templates zu entwickeln klassisch TYPO3: „Markertemplates“ weit verbreitete Extension bis Typo3 4.x: TemplaVoilá Fluid: XML-Konform durch ViewHelper erweiterbar
  • 24.
  • 25.
    {namespace tzmv=QbusTraumzielmvViewHelpers} ... <f:security.ifHasRole role="Gastgeber"> <f:then> <li> <f:link.pagepageUid="157" ...> <i class="fa fa-power-off"></i> Abmelden </f:link.page> </li> </f:then> <f:else> ... </f:else> </f:security.ifHasRole> <nav id="navigation"> <f:cObject typoscriptObjectPath="lib.extTzmv.mainMenu"/> </nav> <f:render section="headerMenu" /> <f:comment>Seiteninhalt</f:comment> <div id="main"> <div class="container"> <f:render section="content" /> </div> </div>
  • 26.
    ViewHelper class BoolViewHelper extendsAbstractViewHelper { /** * returns Ja/Nein due to the boolean input value * * @param boolean $value * @return void */ public function render($value) { return ($value) ? 'Ja' : 'Nein'; } }
  • 27.
  • 30.
    Fazit mit Typo3 undExtbase lassen sich komplexe Webanwendungen mit sinnvollem Aufwand umsetzen optimal insbesondere in der Mischung von applikativen und CMS-Funktionen Daten- und Objektmodellierung sehr einfach und direkt möglich – insbesondere mit Unterstützung des grafischen Kickstarters mit Fluid lâsst sich recht elegant arbeiten, bei komplexeren Templates ergeben sich Strukturierungs- und letztendlich Wartungs-Probleme größte Herausforderung war die sinnvolle „Responsive“-Umsetzung – weitere Optimierungen notwendig Möglich aber noch nicht umgesetzt: testgetriebene Entwicklung