traumziel mv: relaunch eines tourismusportals mit typo3 extbase und fluid
DESCRIPTION
Vortrag auf den 9. Wirtschaftsinformatik-Tagen (WIWITA) an der Hochschule Wismar am 12. und 13. Juni 2014TRANSCRIPT
Qbus Werbeagentur GmbH
Heiligengeisthof 5 • 18055 Rostock • Tel. (0381) 4 61 39 0 • [email protected] • 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 | [email protected]
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
RegionHost
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 \Qbus\Traumzielmv\Domain\Model\Region $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 \Qbus\Traumzielmv\Domain\Repository\HikingRepository
* @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 \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
...
/**
* 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=Qbus\Traumzielmv\ViewHelpers}
...
<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 Templatesergeben 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