12.07.2015 Aufrufe

Modulentwicklung. - Contao

Modulentwicklung. - Contao

Modulentwicklung. - Contao

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Modulentwicklung</strong>.Usertreffen 2009Usertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 1 / 45


Was Euch in den nächsten zwei Stunden erwartet:TheoriePraxisPlanung eines TYPOlight-ModulsDas Ordner- und DateisystemDer Modulgenerator- - Fragen, Ergänzungen & Kommentare hierzu - -Ein BeispielmodulDas Modul über den Generator anlegenErstellung und Konfiguration des ModulsErgänzungenHooksKleine ÄnderungenRessourcen für EntwicklerFazitOffene Fragerunde & AbschlussdiskussionUsertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 2 / 45


Konfigurieren statt ProgrammierenTheoriePlanung einesTL-ModulsOrdner- undDateisystemDCAModulgeneratorTYPOlight setzt auf eine festgelegte OrdnerstrukturModule klinken sich in das System einCore-Funktionalitäten können verändert oder erweitert werden,ohne dass der Originalcode verändert wirdModule nutzen vorhandene Eigenschaften, Libraries, Variablen,Objekte etc.Grundsätzliche Überlegungen bei der <strong>Modulentwicklung</strong>Geht es (teilweise) auch mit „Bordmitteln“?➔Listenausgaben sind z.B. oft mit dem Modul Auflistungmachbar.Kann eine vorhandene Funktionalität erweitert werden?➔Bsp.: Erweiterung der Mitgliederdaten statt einem neuen ModulUsertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 3 / 45


Benennungen von Erweiterungen und VariablenTheoriePlanung einesTL-ModulsOrdner- undDateisystemDCAModulgeneratorNamenskonflike vermeiden!Modulnamen können nur 1x vergeben werdenSystemweit genutzte Variablen ebenfallsPräfixe sorgen für korrekte, eindeutige Zuordnungen➔➔bei Modul- und Verzeichnisnamenbei Variablen-Erweiterungen (z.B. in der Tabelle tl_modules)SchlechtBesserModulnameVariable in tl_modulesVariable in SessionMeineFilmsammlungabteilung_templateschuhgroessefm_MeineFilmsammlungfm_abteilung_templatefm_schuhgroesseUsertreffen 2009:<strong>Modulentwicklung</strong>Ausnahme: Erweiterungen, die möglichst als Letztes geladenwerden sollen, könnten mit „z_“, „zz_“, „zzz_“ o.ä. benannt werden.de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 6 / 45


Das Grundgerüst: Ordner und DateienTheoriePlanung einesTL-ModulsOrdner- undDateisystemDCAModulgeneratorUsertreffen 2009:<strong>Modulentwicklung</strong>Verzeichnisstruktur in/TL_ROOT/system/modules/mein_modulmein_modul.phpconfigconfig.phpdatabase.sqldcatl_mein_modul.phpz.B. tl_module.php etc.languagesdedefault.phpmodules.phptl_mein_modul.phpz.B. tl_member.phptemplatesmein_template.tplvom Modul benötigter PHP-Codeallgemeine Konfiguation, Registrierung vonBE- und FE-Modulen, einzubindendesJavascript, Hooks etcSQL-Definitionen aller benötigten TabellenDCA + BE-Klassen für eigene ModultabelleDCA-Ergänzungen für bestehende DCAsSprachsnippets und -variablen für...das Modul selbst, allgemeine Angaben etc...die Modulanzeige im BE...für FE-Module...ggf. Ergänzungen zu TL-eigenen TabellenAusgabetemplate(s)Die Struktur kann um eigene Verzeichnisseerweitert werden, z.B. /html für Icons.de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 7 / 45


DCA = Data Container ArrayTheoriePlanung einesTL-ModulsOrdner- undDateisystemDCAModulgeneratorZentrales Element des TL-BackendsBackend generiert sich ausden DCA der einzelnenModuleErmöglicht Pflege aller mit tl_beginnenden DatentabellenDCA-Erstellung undManipulation:➔➔über Konfigurationsdateienim Modulon the Fly im Modul(Beispiel: Die Katalog-Extension)Mögliche Abschnitte eines DCA:config➔list➔➔➔Tabellenfestlegung, allgemeineKonfigurationAuflistungsmöglichkeitenglobale OperationenDatensatz-Operationenpalettes➔Festlegung der pflegbaren Felder(Paletten)subpalettes➔Unter-PalettenUsertreffen 2009:<strong>Modulentwicklung</strong>➔über die dcaconfig.php(siehe Ergänzungen)fields➔Definitionen der Feld-Eingabemasken.de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 8 / 45


DCA: GliederungTheoriePlanung einesTL-ModulsOrdner- undDateisystemDCAModulgenerator$GLOBALS['TL_DCA']['TABELLENNAME'] = array ('config' => array (... ALLGEMEINE KONFIGURATION ...),'list' => array ('sorting' => array (... SORTIERUNGEN ...),'label' => array (... ANGABEN IN DER LISTENANSICHT ...),'global_operations' => array (... GLOBALE OPERATIONEN ...),'operations' => array (... OPERATIONEN PRO DATENSATZ ...)),'palettes' => array (... PALETTEN: WELCHE FELDER WERDEN GEPFLEGT? ...),'subpalettes' => array (... UNTERPALETTEN ...),'fields' => array (... FELDDEFINITIONEN ...));Usertreffen 2009:<strong>Modulentwicklung</strong>Genaue Angaben zu allen DCA-Optionen: http://dev.typolight.orgde la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 9 / 45


Der Modul-GeneratorTheoriePlanung einesTL-ModulsOrdner- undDateisystemDCAModulgeneratorUsertreffen 2009:<strong>Modulentwicklung</strong>Kann als Extension„developement“ installiertwerden und steht dann als„Extension Creator“ im BE zurVerfügungIst ein Hilfsmittel, umgrundlegendeModuleigenschaftenfestzulegenIst keine klick-mich-ich-machein-fertiges-Modul-ErweiterungErzeugt eine passendeVerzeichnisstruktur mitrudimentären Dateien/mein_modul.php- Modul-Klasse mit Zuweisung derTemplate-Variable und der Methodecompile() für den PHP-Code/configconfig.php- Hilfskommentare/dcadatabase.sql- Basis-SQL für Tabellentl_mein_modul.php- Rudimentäres DCA/languages/dedefault.php- Leere Bsp.-Variablenmodules.php- Sprachen-Variablentl_mein_modul.php- Sprachen-Variablen/templatesmein_modul.php- Leeres Templatede la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 10 / 45


Der Modul-GeneratorTheoriePlanung einesTL-ModulsOrdner- undDateisystemDCAModulgeneratorDie erzeugten Dateien enthalten:die allgemeine Strukturalle angegebenen Klassenviele Kommentare mit HilfetextenBasis-SQL für alle TabellenBeispiele für die VariablennotationUsertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 11 / 45


Erweiterungs-Entwicklung in der PraxisPraxisEin BeispielmodulWas wir machen werden:Das Modul anlegenErstellung undKonfigurationErgebnisErstellung mit dem Modul-GeneratorTyp Modul mit Parent-/Child-Tabellen erstellenEinen Hook nutzen (durchsuchbare Einzelseiten)Typ Content-Element erstellenDCA sehen & verstehenSQL-Tabellen neu erstellen & modifizierenJavascript im Seiten-Header platzierenVorhandene Felder nutzenWas wir nicht machen können:Usertreffen 2009:<strong>Modulentwicklung</strong>Alle DCA-Möglichkeiten durchgehenDen Code erst vor Ort entwickeln und Testende la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 14 / 45


Anpassung: database.sqlPraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnistl_module & tl_content➔Alle Felder entfernen (bereits vorhanden) + neue einfügen:CREATE TABLE `tl_module` (`ch_playlists` blob NULL,`ch_autoplay` char(1) NOT NULL default '1',`ch_playersize` varchar(64) NOT NULL default '') ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE `tl_content` (`ch_movie` varchar(255) NOT NULL default '',`ch_description` text NULL,`ch_autoplay` char(1) NOT NULL default '1',`ch_preview` varchar(255) NOT NULL default '',`ch_playersize` varchar(255) NOT NULL default '',`ch_params` text NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8;Usertreffen 2009:<strong>Modulentwicklung</strong>tl_ch_flowplayer➔pid, sorting, key pid entfernen (nicht benötigt) + einfügen:CREATE TABLE `tl_ch_flowplayer` (`id` int(10) unsigned NOT NULL auto_increment,`tstamp` int(10) unsigned NOT NULL default '0',`title` varchar(64) NOT NULL default ''PRIMARY KEY (`id`),) ENGINE=MyISAM DEFAULT CHARSET=utf8;de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 21 / 45


Anpassung: database.sqlPraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnistl_ch_flowplayer_playlist➔Felder einfügenCREATE TABLE `tl_ch_flowplayer_playlist` (`id` int(10) unsigned NOT NULL auto_increment,`pid` int(10) unsigned NOT NULL default '0',`sorting` int(10) unsigned NOT NULL default '0',`tstamp` int(10) unsigned NOT NULL default '0',`published` char(1) NOT NULL default '',`title` varchar(64) NOT NULL default '',`alias` varchar(128) NOT NULL default '',`description` text NULL,`movie` varchar(32) NOT NULL default '',`addImage` char(1) NOT NULL default '',`singleSRC` varchar(255) NOT NULL default '',`size` varchar(64) NOT NULL default '',`alt` varchar(255) NOT NULL default '',`caption` varchar(255) NOT NULL default '',`floating` varchar(32) NOT NULL default '',`imagemargin` varchar(255) NOT NULL default '',`fullsize` char(1) NOT NULL default '',`params` text NULL,PRIMARY KEY (`id`),KEY `pid` (`pid`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;Usertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 22 / 45


Anpassung: DCA tl_module.php & tl_content.phpPraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnisFür dca/tl_module.php und dca/tl_content.php müssen nur Palettenund Eingabemasken für noch nicht in den TL-Tabellen vorhandeneFelder definiert werden. Z.B.:$GLOBALS['TL_DCA']['tl_module']['palettes']['ch_flowplayer_reader'] = '{title_legend},name,headline,type;{config_legend},ch_playlists,ch_autoplay,ch_playersize;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space';$GLOBALS['TL_DCA']['tl_module']['palettes']['ch_flowplayer_list'] = '{title_legend},name,headline,type,jumpTo;{config_legend},ch_playlists;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space';$GLOBALS['TL_DCA']['tl_module']['fields']['ch_playlists'] = array ('label' => &$GLOBALS['TL_LANG']['tl_module']['ch_playlists'],'exclude' => true,'inputType' => 'checkboxWizard','foreignKey' => 'tl_ch_flowplayer.title','eval' => array('multiple'=>true, 'mandatory'=>true));Usertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 23 / 45


Anpassung: DCA tl_ch_flowplayer.php & tl_ch_flowplayer_playlist.phpPraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnisFür dca/tl_ch_flowplayer.php und dca/tl_ch_flowplayer_playlist.phpmüssen vollständige DCA definiert werden. Z.B.:$GLOBALS['TL_DCA']['tl_ch_flowplayer'] = array('config' => array('dataContainer' => 'Table','ctable'=> array('tl_ch_flowplayer_playlist'),'switchToEdit' => true, // 'Speichern und bearbeiten''enableVersioning'=> true // Mit Versionierung),'list' => array('sorting' => array('mode' => 1, // Standard-Sortierung'fields' => array('title'),'flag' => 1, // Nach Anfangsbuchstaben aufsteigend'panelLayout' => 'filter;search,limit',// Einschänkungen u. Felder im Kopf der Liste),'label' => array // In Liste angezeigte Daten('fields' => array('title'),'format' => '%s' // Ersetzte Anzeigedaten),...Usertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 24 / 45


Anpassung: DCA tl_ch_flowplayer.php & tl_ch_flowplayer_playlist.phpPraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnis...'global_operations' => array('all' => array // Alle bearbeiten('label' => &$GLOBALS['TL_LANG']['MSC']['all'],'href' => 'act=select','class' => 'header_edit_all','attributes' => 'onclick="Backend.getScrollOffset();"')),'operations' => array('edit' => array // Element bearbeiten('label' => &$GLOBALS['TL_LANG']['tl_ch_flowplayer']['edit'],'href' => 'table=tl_ch_flowplayer_playlist',// In Detail-Tabelle wechseln'icon' => 'edit.gif'),'copy' => array // Element kopieren('label' => &$GLOBALS['TL_LANG']['tl_ch_flowplayer']['copy'],'href' => 'act=copy','icon' => 'copy.gif'),...Usertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 25 / 45


Anpassung: DCA tl_ch_flowplayer.php & tl_ch_flowplayer_playlist.phpPraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnis'delete' => array // Element löschen('label' => &$GLOBALS['TL_LANG']['tl_ch_flowplayer']['delete'],'href' => 'act=delete','icon' => 'delete.gif','attributes' => 'onclick="if (!confirm(\'' . $GLOBALS['TL_LANG']['MSC']['deleteConfirm'] . '\')) return false;Backend.getScrollOffset();"'// Sicherheitsabfrage),'show' => array // Element zeigen('label' => &$GLOBALS['TL_LANG']['tl_ch_flowplayer']['show'],'href' => 'act=show','icon' => 'show.gif'))),'palettes' => array // Pflegbare Felder('default' => '{title_legend},title'// Legende des (klappbaren) Bereichs// Feldnamen mit Unterteilungen (, und ; für Linie)),......Usertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 26 / 45


PraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnis);...'fields' => array // Einzelne Felddefinition('title' => array('label' => &$GLOBALS['TL_LANG']['tl_ch_flowplayer']['title'],// Feldüber- und unterschrift'search' => true, // nach Feld kann gesucht werden'exclude' => true, // aber nur Admins sehen es!'inputType' => 'text', // Was für ein Feld?'eval' => array('mandatory'=>true, 'maxlength'=>255)// Diverse Angaben zum Feld. Pflichtfeld? Wie viele Zeichen?))Usertreffen 2009:<strong>Modulentwicklung</strong>Viele weitere DCA-Möglichkeiten vorhandenWichtig: Callback-Funktionen➔➔Funktionen, die eigene Überprüfungen, DCA-Änderungen 'onthe fly' oder Zwischenschritte ermöglichen - ähnlich Hooks. Z.B:➔Füllen einer Auswahlliste mit Werten aus einer eigenen Tabelle, spezielleZugriffsrechte implementieren, Dateien nach (User-)Aktionen erstellen ...An vielen Stellen im DCA nutzbar (siehe http://dev.typolight.org)de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 27 / 45


DCA: Klassen und Methoden ergänzenPraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnisIn dca/tl_ch_flowplayer_playlist.php fehlen noch eine Methode zurAliaserstellung und eine zur Elementdarstellung im BE:class tl_ch_flowplayer_playlist extends Backend{public function generateAlias($varValue, DataContainer $dc){... GENERIERE ALIAS AUS DEM TITEL ...}}public function listMovies($arrRow){... ZEIGT TYP DES ELEMENTS IM BE ...}Ohne Aliaserstellung ist eine FE-Verlinkung zur Detailseite nurnumerisch möglich (z.B. www.irgendwas.de/filme/film/2215.html)Hier sind auch weitere BE-Klassenerweiterungen möglichUsertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 28 / 45


Anpassung: SprachendateienPraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnislanguages/de/default.php➔Bezeichnungen für CE und Modul ch_flowplayer setzen$GLOBALS['TL_LANG']['MOD']['ch_flowplayer'] = array('Videos','FLV-Filme mit dem FlowPlayer verwalten.');$GLOBALS['TL_LANG']['CTE']['ch_flowplayer'] = array('Video','FLV-Film mit dem FlowPlayer wiedergeben.');languages/de/modules.php➔Bezeichnungen für FE-Module setzen$GLOBALS['TL_LANG']['FMD']['ch_flowplayer_reader'] = array('FlowPlayer Reader','Mit diesem Modul binden Sie denFlowPlayer zur Wiedergabe einer Playlist ein.');$GLOBALS['TL_LANG']['FMD']['ch_flowplayer_list'] = array('FlowPlayer Liste','Mit diesem Modul binden Sie einePlayliste für den FlowPlayer ein.');Usertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 29 / 45


Anpassung: SprachendateienPraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnislanguages/de/tl_ch_flowplayer.php➔Felder, Buttons und Legenden$GLOBALS['TL_LANG']['tl_ch_flowplayer']['title'] = array('Titel', 'Titel der Playlist');$GLOBALS['TL_LANG']['tl_ch_flowplayer']['tstamp'] = array('Änderungsdatum', 'Datum und Uhrzeit der letzten Änderung');$GLOBALS['TL_LANG']['tl_ch_flowplayer']['new'] = array('Neue Playlist', 'Eine neue Playlist anlegen');$GLOBALS['TL_LANG']['tl_ch_flowplayer']['edit'] = array('Playlist bearbeiten', 'Playlist ID %s bearbeiten');$GLOBALS['TL_LANG']['tl_ch_flowplayer']['copy'] = array('Playlist duplizieren', 'Playlist ID %s duplizieren');$GLOBALS['TL_LANG']['tl_ch_flowplayer']['delete'] = array('Playlist löschen', 'Playlist ID %s löschen');$GLOBALS['TL_LANG']['tl_ch_flowplayer']['show'] = array('Playlistdetails', 'Details der Playlist ID %s anzeigen');Usertreffen 2009:<strong>Modulentwicklung</strong>$GLOBALS['TL_LANG']['tl_ch_flowplayer']['title_legend'] = 'Titel';de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 30 / 45


Anpassung: SprachendateienPraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnislanguages/de/tl_module.php➔Felder$GLOBALS['TL_LANG']['tl_module']['ch_playlists'] = array('Playlisten','Wählen Sie die Playlisten mit dengewünschten Filmen aus.');$GLOBALS['TL_LANG']['tl_module']['ch_autoplay'] = array('Autoplay', 'Sollen die Filme automatisch starten?');$GLOBALS['TL_LANG']['tl_module']['ch_playersize'] = array('Breite und Höhe des Players', 'Geben Sie Breiteund Höhe des FlowPlayers ein.');Der Aufbau der Sprachendateien ist ansonsten weitgehend gleichWeitere Sprachen werden durch exakt analoge Dateien inentsprechend benannten Verzeichnissen erstellt.Usertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 31 / 45


Anpassung: Logik Content-ElementPraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnisContent_ch_FlowPlayer.php➔➔➔Stellt ein Content-Element FlowPlayer im FE zur VerfügungTemplate-Variable setzenCode für das Template einfügenclass Content_chFlowPlayer extends Module{/*** Template* @var string*/protected $strTemplate = 'ce_ch_flowplayer';/*** Generate module*/protected function compile(){PHP-LOGIK FÜR DAS TEMPLATEUsertreffen 2009:<strong>Modulentwicklung</strong>}}de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 32 / 45


Anpassung: Logik Modul ListePraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnisModule_ch_FlowPlayerList.php➔➔➔Stellt ein Modul FlowPlayer Liste im FE zur VerfügungTemplate-Variable setzenCode für BE-Darstellung einfügenclass Module_chFlowPlayerList extends Module{protected $strTemplate = 'mod_ch_flowplayer_list';public function generate(){if (TL_MODE == 'BE'){DARSTELLUNG DES MODULS IM BE}$this->ch_playlists = deserialize($this->ch_playlists, true);if (!is_array($this->ch_playlists)|| count($this->ch_playlists) < 1){NICHT ZEIGEN, WENN KEINE PLAYLISTS VORHANDEN}Usertreffen 2009:<strong>Modulentwicklung</strong>}return parent::generate();...de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 33 / 45


Anpassung: Logik Modul ListePraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnisModule_ch_FlowPlayerList.php}➔➔➔Code für das Template einfügenVariable für mögliche Zielseiten setzenZielseite für Detailansicht ermittelnprotected function compile(){PHP-LOGIK FÜR DAS TEMPLATE}...protected $arrTargets = array();protected function generateMovieLink(Database_Result $objMovies){GENERIERUNG VON LINKS ZUR DETAILSEITE}Usertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 34 / 45


Anpassung: Logik Modul ReaderPraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnisModule_ch_FlowPlayerReader.php➔➔➔➔Stellt ein Modul FlowPlayer Reader im FE zur VerfügungTemplate-Variable setzenCode für BE-Darstellung analog zuModule_ch_FlowPlayerList.php einfügenCode für das Template einfügenclass Module_chFlowPlayerReader extends Module{protected $strTemplate = 'mod_ch_flowplayer_reader';public function generate(){DARSTELLUNG DES MODULS IM BEANALOG ZU Module_ch_FlowPlayerList.php}}protected function compile(){PHP-LOGIK FÜR DAS TEMPLATE}Usertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 35 / 45


Anpassung: Logik Modul FlowPlayerPraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnisModule_ch_FlowPlayer.php➔➔➔➔➔Bindet die Detailseiten der Playlisten in die TL-Suche ein(analog zu de News, den FAQ etc)Enthält die Methode, die in der config/config.php für den Hookregistriert wurdeÄnderung: Extends Frontend!Änderungen: Variable $strTemplate u. Methode compile()rausCode für die Ermittlung möglicher Film-Detailseiten einfügenclass Module_chFlowPlayer extends Frontend{}public function getSearchablePages($arrPages, $intRoot=0){PHP-LOGIK ZUR SEITENERMITTLUNG}Usertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 36 / 45


Anpassung: Template Content Element FlowPlayerPraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnistemplates/ce_ch_flowplayer.tpl➔➔➔➔Grundaufbau analog zu fast allen TL-CE-TemplatesGliederung des Templates:Block mit Template-Klasse, Id & Headline (in praktisch allenTL-CE-Elementen gleich)Ausgabecode für den Player, hierbei:➔➔Einbindung des PlayersJavascript zur Player-Steuerung mit➔➔entweder gewähltem Startbild oder Autoplayoder freien Parametern➔Kurzbeschreibung des FilmsUsertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 37 / 45


Anpassung: Template Modul FlowPlayer ListePraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationtemplates/mod_ch_flowplayer_list.tpl➔➔Grundaufbau analog zu fast allen TL-Modul-TemplatesAuskommentierung der Ausgabe für die TL-SucheErgebnis➔Gliederung des Templates:➔➔➔➔➔➔Block mit Template-Klasse, Id & Headline (in praktisch allen TL-Modulengleich)Schleife, die alle möglichen Playlists durchläuft mit:Schleife, die alle Filme der aktuellen Playlist auflistet mit:Vorschau-BildKurzbeschreibungLinkUsertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 38 / 45


Anpassung: Template Modul FlowPlayer ListePraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnisUsertreffen 2009:<strong>Modulentwicklung</strong>Fertiges Template templates/mod_ch_flowplayer_list.tpl:


Anpassung: Template Modul FlowPlayer ReaderPraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnistemplates/mod_ch_flowplayer_reader.tpl➔➔➔➔➔Aufbau praktisch 1:1 wie für das Content-ElementGrundaufbau analog zu fast allen TL-Detail-TemplatesGliederung des Templates:Block mit Template-Klasse, Id & Headline (in praktisch allenTL-Modulen gleich)Ausgabecode für den Player, hierbei:➔➔Einbindung des PlayersJavascript zur Player-Steuerung mit➔➔entweder gewähltem Startbild oder Autoplayoder freien ParameternUsertreffen 2009:<strong>Modulentwicklung</strong>➔➔Kurzbeschreibung des FilmsBacklink zur letzten besuchten Seite (i.d.R. die Liste)de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 40 / 45


Das ErgebnisPraxisEin BeispielmodulDas Modul anlegenErstellung undKonfigurationErgebnisNach Fertigstellung und Installation des Moduls kann es beliebig inTYPOlight genutzt werden:Usertreffen 2009:<strong>Modulentwicklung</strong>Die Erweiterung kann als „ch_FlowPlayer“ ab sofort im Repositoryinstalliert oder heruntergeladen werden.de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 41 / 45


Hooks nutzenErgänzungenHooksKleine ÄnderungenHooks = Stellen, an denen eigene Logik in bestehende Abläufeeingefügt werden kannRessourcen➔➔Vor oder nach bestimmter Aktion wird verzweigt➔externe Logik aus externen Dateien/Klassen abgearbeitetund wieder in die restliche Verarbeitung zurückgesprungenHooks werden in der Datei config.php eines Moduls registriertDas Handbuch unter http://dev.typolight.org zeigt genau, welcheHooks wie im Core zur Verfügung stehen.Module können eigene Hooks enthalten, um selbst erweiterbar zuwerden.Usertreffen 2009:<strong>Modulentwicklung</strong>de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 42 / 45


Kleine ÄnderungenErgänzungenHooksKleine ÄnderungenRessourcenUsertreffen 2009:<strong>Modulentwicklung</strong>Kleine Änderungen sind auch ohne eigene Module machbarUpdatesichere Speicherung im Ordner TL_ROOT/system/config/Werden als letztes Element eingelesen, können ergo z.B. alleglobalen Variablen überschreibenEmpfehlung: Wirklich nur für kleine Änderungen nutzenNutzbare Dateien:➔➔➔localconfig.php➔Ggf. benötigte allgemeine Konfigurationsvariablendcaconfig.php➔➔Änderungen an bestehenden DCABsp: -Tag im Seitentitel (für's Menü) erlauben:$GLOBALS['TL_DCA']['tl_page']['fields']['title']['eval']['preserveTags'] = true;langconfig.php➔➔Einzelne sprachenspezifische ÄnderungenBsp: Die Text-Ausgabe eines anderen Moduls zu ändernde la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 43 / 45


Ressourcen für EntwicklerErgänzungenHooksKleine ÄnderungenRessourcenEntwicklerserver http://dev.typolight.org➔➔➔HandbuchDevelopers Guide➔➔➔Table Configuration➔Genaue Definition aller in den DCA benutzbarenOptionen und EinstellungenHooks➔API➔In TL selbst enthaltene Hooks mit ErläuterungenHier kann man sich alle Core-Klassen undMethoden im Detail ansehen.User TutorialsDas Forum http://typolight.org/board.htmlSelfPHP http://selfphp.deUsertreffen 2009:<strong>Modulentwicklung</strong>Auch nicht vergessen: Bestehende Erweiterungen & Kollegen!de la Haye Kommunikationsdesign • Viersen • delahaye.de Seite 44 / 45


Vielen Dank für Eure Aufmerksamkeit!Kontaktde la Haye KommunikationsdesignInh. Christian de la HayeKarl-Seepe-Str. 1241747 ViersenUsertreffen 2009Usertreffen 2009:<strong>Modulentwicklung</strong>0 21 62 - 50 12 25service@delahaye.dede Quellennachweise: la Haye Kommunikationsdesign Deckblatt, Affe aboutpixel.de • Viersen © Peter • delahaye.de Ehmann, Juranek Hubert - Logo, Buch & Screens: typolight.org - Flowplayer: flowplayer.orgSeite 45 / 45

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!