Vorhandene Module erweitern: Unterschied zwischen den Versionen

Aus Contao Community Documentation

K (Erstellen des neuen Modulverzeichnis mit nötiger Verzeichnis- und Dateistruktur)
K
 
(26 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{stub}}
+
[[Category:Dev_HOWTOS]]{{AppliesTo
[[Category:Dev_HOWTOS]]
+
|Version=2.9 RC1 / 3.0
{{AppliesTo
+
|Version=2.9 RC1
+
 
}}
 
}}
 
=Vorwort=
 
=Vorwort=
Zeile 12: Zeile 10:
 
Zur Umsetzung der Anforderung wird das Formular zur Eingabe von Terminen um eine zusätzliche Checkbox erweitert. Diese Checkbox ist bei Veranstaltungen mit kostenlosem Eintritt zu aktivieren. Falls die Prüfung im Template ergibt, dass der Wert der Checkbox gesetzt ist, wird eine entsprechende Information im Frontend ausgegeben.
 
Zur Umsetzung der Anforderung wird das Formular zur Eingabe von Terminen um eine zusätzliche Checkbox erweitert. Diese Checkbox ist bei Veranstaltungen mit kostenlosem Eintritt zu aktivieren. Falls die Prüfung im Template ergibt, dass der Wert der Checkbox gesetzt ist, wird eine entsprechende Information im Frontend ausgegeben.
  
=Kurzanleitung=
+
=Kurzanleitung für Contao 3=
 
# ''TL_ROOT/system/modules/calendarFreeEntry'' - neues Modulverzeichnis mit nötiger Verzeichnis- und Dateistruktur erstellen
 
# ''TL_ROOT/system/modules/calendarFreeEntry'' - neues Modulverzeichnis mit nötiger Verzeichnis- und Dateistruktur erstellen
# ''TL_ROOT/system/modules/calendarFreeEntry/config/database.sql'' – Datenbanktabelle um neues Feld freeEntry erweitern
+
# ''TL_ROOT/system/modules/calendarFreeEntry/config/autoload.php'' - Autoloader Datei erstellen
 +
# ''TL_ROOT/system/modules/calendarFreeEntry/dca/tl_calendar_events.php'' – Data Container Array erweitern inkl. Datenbankfeld ''freeEntry''
 +
# ''TL_ROOT/system/modules/calendarFreeEntry/languages'' – Sprachdateien um neues Feld ''freeEntry'' erweitern
 +
# ''TL_ROOT/system/modules/calendarFreeEntry/templates'' – Erweiterung der Templates um Laden der Sprachdatei, Prüfung des Feldes freeEntry und abhängiger Ausgabe
 +
# ''<nowiki>http://www.meinedomain.de/contao/install.php</nowiki>'' - Datenbank-Update durchführen, Template in der Eventliste ändern, Termin einstellen, testen
 +
 
 +
=Detailanleitung für Contao 3=
 +
 
 +
==Erstellen des neuen Modulverzeichnis mit nötiger Verzeichnis- und Dateistruktur==
 +
In dieser Anleitung wird die Extension-Erweiterung lokal erstellt und anschließend auf den Webserver hoch geladen.
 +
 
 +
<source lang="text">
 +
TL_ROOT/system/modules/calendarFreeEntry/config/
 +
TL_ROOT/system/modules/calendarFreeEntry/config/autoload.php
 +
TL_ROOT/system/modules/calendarFreeEntry/dca
 +
TL_ROOT/system/modules/calendarFreeEntry/dca/tl_calendar_events.php
 +
TL_ROOT/system/modules/calendarFreeEntry/languages
 +
TL_ROOT/system/modules/calendarFreeEntry/languages/de
 +
TL_ROOT/system/modules/calendarFreeEntry/languages/de/tl_calendar_events.php
 +
TL_ROOT/system/modules/calendarFreeEntry/languages/en
 +
TL_ROOT/system/modules/calendarFreeEntry/languages/en/tl_calendar_events.php
 +
TL_ROOT/system/modules/calendarFreeEntry/templates/
 +
TL_ROOT/system/modules/calendarFreeEntry/templates/event_list_freeEntry.html5
 +
TL_ROOT/system/modules/calendarFreeEntry/templates/event_list_freeEntry.xhtml
 +
</source>
 +
 
 +
==Anlegen der autoload.php==
 +
Dazu die Datei TL_ROOT/system/modules/calendarFreeEntry/config/autoload.php öffnen und folgenden Inhalt einfügen:
 +
 
 +
<source lang="php">
 +
<?php
 +
 
 +
/**
 +
* Register the templates
 +
*/
 +
TemplateLoader::addFiles(array
 +
(
 +
'event_list_freeEntry' => 'system/modules/calendarFreeEntry/templates',
 +
));
 +
 
 +
</source>
 +
 
 +
==Erweiterung des vorhandenen Data Container Arrays (DCA)==
 +
Dazu die Datei ''TL_ROOT/system/modules/calendarFreeEntry/dca/tl_calendar_events.php'' öffnen und folgenden Inhalt einfügen:
 +
 
 +
<source lang="php">
 +
<?php
 +
 
 +
//Anzeige im Backend
 +
$GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default'] = str_replace('title,','title,freeEntry,', $GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default']);
 +
 
 +
//Beschreibung des Feldes
 +
$GLOBALS['TL_DCA']['tl_calendar_events']['fields']['freeEntry'] = array
 +
(
 +
        'label'                  => &$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'],
 +
        'inputType'              => 'checkbox',
 +
        'sql'                    => "char(1) NOT NULL default ''"
 +
);
 +
 
 +
</source>
 +
 
 +
Anschliessend speichern und schliessen.
 +
 
 +
==Erweiterung der vorhandenen Sprachdateien==
 +
''TL_ROOT/system/modules/calendarFreeEntry/languages/de/tl_calendar_events.php''
 +
 
 +
<source lang="php">
 +
<?php
 +
 
 +
$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'][0] = 'Free entry';
 +
$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'][1] = 'Zeigen Sie den Termin mit kostenlosen Eintritt an.';
 +
 
 +
</source>
 +
 
 +
''TL_ROOT/system/modules/calendarFreeEntry/languages/en/tl_calendar_events.php''
 +
 
 +
<source lang="php">
 +
<?php
 +
 
 +
$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'][0] = 'Free entry';
 +
$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'][1] = 'Display the event with free entry.';
 +
 
 +
</source>
 +
 
 +
==Erweiterung des vorhandenen Templates==
 +
 
 +
Damit im Template die gewünschte Information ausgegeben werden kann, wird das vorhandene Template der Kerninstallation kopiert, in das neue Modulverzeichnis eingefügt und die PHP-Logik entsprechend ergänzt. (jeweils die html5 und xhtml Version) Dazu wird eine Prüfung eingebaut, die prüft, ob der Wert der Checkbox gesetzt wurde. Bei gesetztem Wert soll im Template sprachabhängig die Information ausgegeben, dass es sich um eine kostenlose Veranstaltung handelt. Damit auf die Inhalte der Sprachdateien zugegriffen werden kann, muss die Sprachdatei zuerst noch geladen werden. Contao wurde so konzipiert, dass ausschließlich nur die benötigten Ressourcen geladen werden, um das System auch in der Laufzeit möglichst performant zu halten.
 +
 
 +
Vorhandene Datei aus ''TL_ROOT/system/modules/calendar/templates/event_list.html5'' und ''TL_ROOT/system/modules/calendar/templates/event_list.xhtml'' in ''TL_ROOT/system /modules/calendarFreeEntry/templates'' kopieren, in ''event_list_freeEntry.html5'' bzw.  ''event_list_freeEntry.xhtml'' umbenennen und entsprechend erweitern:
 +
 
 +
event_list_freeEntry.html5
 +
<source lang="php">
 +
 
 +
<?php $this->loadLanguageFile('tl_calendar_events'); ?>
 +
<?php if ($this->header): ?>
 +
<div class="header<?php echo $this->classHeader; ?>">
 +
<time datetime="<?php echo $this->datetime; ?>" class="date"><?php echo $this->firstDate; ?></time><?php if ($this->firstDay): ?> <span class="day">(<?php echo $this->firstDay; ?>)</span><?php endif; ?>
 +
</div>
 +
 
 +
<?php endif; ?>
 +
<div class="event layout_list<?php echo $this->classList; ?>">
 +
<h2><a href="<?php echo $this->href; ?>" title="<?php echo $this->title; ?> (<?php if ($this->day): echo $this->day; ?>, <?php endif; echo $this->date; if ($this->time): ?>, <?php echo $this->time; endif; ?>)"<?php echo $this->target; ?>><?php echo $this->link; ?></a></h2>
 +
<?php if ($this->time || $this->span): ?>
 +
<p class="time"><?php echo $this->time . $this->span; ?></p>
 +
<?php endif; ?>
 +
<?php if ($this->freeEntry): ?>
 +
<p class="freeEntry"><?php echo $GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'][0]; ?></p>
 +
<?php endif; ?>
 +
<div class="ce_text">
 +
<?php echo $this->details; ?>
 +
</div>
 +
</div>
 +
 
 +
</source>
 +
 
 +
event_list_freeEntry.xhtml
 +
<source lang="php">
 +
 
 +
<?php $this->loadLanguageFile('tl_calendar_events'); ?>
 +
<?php if ($this->header): ?>
 +
<div class="header<?php echo $this->classHeader; ?>">
 +
<span class="date"><?php echo $this->firstDate; ?></span><?php if ($this->firstDay): ?> <span class="day">(<?php echo $this->firstDay; ?>)</span><?php endif; ?>
 +
</div>
 +
 
 +
<?php endif; ?>
 +
<div class="event layout_list<?php echo $this->classList; ?>">
 +
<h2><a href="<?php echo $this->href; ?>" title="<?php echo $this->title; ?> (<?php if ($this->day): echo $this->day; ?>, <?php endif; echo $this->date; if ($this->time): ?>, <?php echo $this->time; endif; ?>)"<?php echo $this->target; ?>><?php echo $this->link; ?></a></h2>
 +
<?php if ($this->time || $this->span): ?>
 +
<p class="time"><?php echo $this->time . $this->span; ?></p>
 +
<?php endif; ?>
 +
<?php if ($this->freeEntry): ?>
 +
<p class="freeEntry"><?php echo $GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'][0]; ?></p> 
 +
<?php endif; ?>
 +
<div class="ce_text">
 +
<?php echo $this->details; ?>
 +
</div>
 +
</div>
 +
 
 +
</source>
 +
 
 +
Dies waren die letzten Dateien, die erstellt / bearbeitet werden mussten. Nun muss das ganze Paket in die Contao-Installation hoch geladen werden. Beim Hochladen ist darauf zu achten, dass der Ordner an die richtige Stelle kopiert wird.
 +
 
 +
[[Datei:moduleext_ftp.png|FTP]]
 +
 
 +
==Datenbank-Update, Systemwartung, Veranstaltung eintragen, Test==
 +
Über ''<nowiki>http://www.meinedomain.de/contao/install.php</nowiki>'' ein Datenbank-Update durchführen (vorgeschlagene Änderungen per Haken aktivieren => Update Database).
 +
 
 +
[[Datei:moduleext_updatedb.png|Datenbank-Update durchführen]]
 +
 
 +
Anschließend im Backend unter Themes das MusicAcademy-Theme bearbeiten und bei den Frontend-Modulen das Modul ''Calendar - Event List (Eventliste)'' suchen und dieses ebenfalls bearbeiten. Unter dem Punkt ''Template-Einstellungen'' wählt man nun das neu erstellte Template ''event_list_freeEntry'' aus.
 +
 
 +
[[Datei:moduleext_template.png|Erstelltes Template auswählen]]
 +
 
 +
Nun noch wegen der manuellen Installation des Moduls den internen Contao Cache löschen, dazu unter System-Systemwartung alle "Seitencache leeren" und "Internen Cache leeren" markieren und auf "Daten bereinigen" klicken.
 +
 
 +
Wenn man nun ein neues Event erstellt oder ein vorhandenes bearbeitet, hat man unter dem ''Title''-Feld eine neue Auswahl ''Free entry'' zur Verfügung.
 +
 
 +
[[Datei:moduleext_editevent.png|Event bearbeiten]]
 +
 
 +
Wird diese Einstellung aktiviert, so wird im Frontend in der Eventliste (.../contao_music/index.php/event-list.html?month=201001) zu den normalen Informationen zusätzlich der Eintrag ''Free Entry'' angezeigt.
 +
 
 +
[[Datei:moduleext_fe.png|Frontend Ausgabe]]
 +
 
 +
=Kurzanleitung für Contao 2=
 +
# ''TL_ROOT/system/modules/calendarFreeEntry'' - neues Modulverzeichnis mit nötiger Verzeichnis- und Dateistruktur erstellen
 +
# ''TL_ROOT/system/modules/calendarFreeEntry/config/database.sql'' – Datenbanktabelle um neues Feld ''freeEntry'' erweitern
 
# ''TL_ROOT/system/modules/calendarFreeEntry/dca/tl_calendar_events.php'' – Data Container Array erweitern
 
# ''TL_ROOT/system/modules/calendarFreeEntry/dca/tl_calendar_events.php'' – Data Container Array erweitern
# ''TL_ROOT/system/modules/calendarFreeEntry/languages'' – Sprachdateien um neues Feld freeEntry erweitern
+
# ''TL_ROOT/system/modules/calendarFreeEntry/languages'' – Sprachdateien um neues Feld ''freeEntry'' erweitern
 
# ''TL_ROOT/system/modules/calendarFreeEntry/templates'' – Erweiterung Template um Laden der Sprachdatei, Prüfung des Feldes freeEntry und abhängiger Ausgabe
 
# ''TL_ROOT/system/modules/calendarFreeEntry/templates'' – Erweiterung Template um Laden der Sprachdatei, Prüfung des Feldes freeEntry und abhängiger Ausgabe
# ''<nowiki>http://www.meinedomain.de/typolight/install.php</nowiki>'' - Datenbank-Update durchführen, Template in der Eventliste ändern, Termin einstellen, testen
+
# ''<nowiki>http://www.meinedomain.de/contao/install.php</nowiki>'' - Datenbank-Update durchführen, Template in der Eventliste ändern, Termin einstellen, testen
  
=Detailanleitung=
+
=Detailanleitung für Contao 2=
 
==Erstellen des neuen Modulverzeichnis mit nötiger Verzeichnis- und Dateistruktur==
 
==Erstellen des neuen Modulverzeichnis mit nötiger Verzeichnis- und Dateistruktur==
<pre>
+
In dieser Anleitung wird die Extension-Erweiterung lokal erstellt und anschließend auf den Webserver hoch geladen.
 +
 
 +
<source lang="text">
 
TL_ROOT/system/modules/calendarFreeEntry
 
TL_ROOT/system/modules/calendarFreeEntry
 
TL_ROOT/system/modules/calendarFreeEntry/config
 
TL_ROOT/system/modules/calendarFreeEntry/config
Zeile 35: Zeile 200:
 
TL_ROOT/system/modules/calendarFreeEntry/templates/
 
TL_ROOT/system/modules/calendarFreeEntry/templates/
 
TL_ROOT/system/modules/calendarFreeEntry/templates/event_list_freeEntry.tpl
 
TL_ROOT/system/modules/calendarFreeEntry/templates/event_list_freeEntry.tpl
</pre>
+
</source>
  
 
==Erweiterung der vorhandenen Datenbanktabelle tl_calendar_events==
 
==Erweiterung der vorhandenen Datenbanktabelle tl_calendar_events==
 
Dazu die Datei ''TL_ROOT/system/modules/calendarFreeEntry/config/database.sql'' öffnen und folgenden Inhalt einfügen:
 
Dazu die Datei ''TL_ROOT/system/modules/calendarFreeEntry/config/database.sql'' öffnen und folgenden Inhalt einfügen:
<pre>
+
 
 +
<source lang="sql">
 
--
 
--
 
-- Table `tl_calendar_events`
 
-- Table `tl_calendar_events`
Zeile 47: Zeile 213:
 
`freeEntry` char(1) NOT NULL default '',
 
`freeEntry` char(1) NOT NULL default '',
 
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
</pre>
+
</source>
 +
 
 
Anschliessend speichern und schliessen.
 
Anschliessend speichern und schliessen.
  
 
==Erweiterung des vorhandenen Data Container Arrays (DCA)==
 
==Erweiterung des vorhandenen Data Container Arrays (DCA)==
 
Dazu die Datei ''TL_ROOT/system/modules/calendarFreeEntry/dca/tl_calendar_events.php'' öffnen und folgenden Inhalt einfügen:
 
Dazu die Datei ''TL_ROOT/system/modules/calendarFreeEntry/dca/tl_calendar_events.php'' öffnen und folgenden Inhalt einfügen:
<pre>
+
 
 +
<source lang="php">
 
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
 
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
  
 
//Anzeige im Backend
 
//Anzeige im Backend
$GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default'] = str_replace('title','title,freeEntry', $GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default']);
+
$GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default'] = str_replace('title,','title,freeEntry,', $GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default']);
  
 
//Beschreibung des Feldes
 
//Beschreibung des Feldes
Zeile 63: Zeile 231:
 
'label'                  => &$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'],
 
'label'                  => &$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'],
 
'inputType'              => 'checkbox'
 
'inputType'              => 'checkbox'
)
+
);
  
 
?>
 
?>
</pre>
+
</source>
 +
 
 
Anschliessend speichern und schliessen.
 
Anschliessend speichern und schliessen.
  
 
==Erweiterung der vorhandenen Sprachdateien==
 
==Erweiterung der vorhandenen Sprachdateien==
Die vorhandenen Dateien ''TL_ROOT/system/modules/calendar/languages/de'' und ''TL_ROOT/system/modules/calendar/languages/en'' werden kopiert, der Inhalt gelöscht und folgende Zeilen eingetragen:
+
''TL_ROOT/system/modules/calendarFreeEntry/languages/de/tl_calendar_events.php''
  
''TL_ROOT/system/modules/calendarFreeEntry/languages/de''
+
<source lang="php">
<pre>
+
 
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
 
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
  
Zeile 79: Zeile 247:
  
 
?>
 
?>
</pre>
+
</source>
  
''TL_ROOT/system/modules/calendarFreeEntry/languages/en''
+
''TL_ROOT/system/modules/calendarFreeEntry/languages/en/tl_calendar_events.php''
<pre>
+
 
 +
<source lang="php">
 
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
 
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
  
Zeile 88: Zeile 257:
  
 
?>
 
?>
</pre>
+
</source>
  
 
==Erweiterung des vorhandenen Templates==
 
==Erweiterung des vorhandenen Templates==
Damit im Template die gewünschte Information ausgegeben werden kann, wird das vorhandene Template der Kerninstallation kopiert, in das neue Modulverzeichnis eingefügt und die PHP-Logik entsprechend ergänzt. Dazu wird eine Prüfung eingebaut, die prüft, ob der Wert der Checkbox gesetzt wurde. Bei gesetztem Wert soll im Template sprachabhängig die Information ausgegeben, dass es sich um eine kostenlose Veranstaltung handelt. Damit die Inhalte der Sprachdateien zugegriffen werden kann, muss die Sprachdatei zu erst noch geladen werden. Contao wurde so konzipiert, dass ausschließlich nur die benötigten Ressourcen geladen werden, um das System auch in der Laufzeit möglichst performant zu halten.
+
Damit im Template die gewünschte Information ausgegeben werden kann, wird das vorhandene Template der Kerninstallation kopiert, in das neue Modulverzeichnis eingefügt und die PHP-Logik entsprechend ergänzt. Dazu wird eine Prüfung eingebaut, die prüft, ob der Wert der Checkbox gesetzt wurde. Bei gesetztem Wert soll im Template sprachabhängig die Information ausgegeben, dass es sich um eine kostenlose Veranstaltung handelt. Damit auf die Inhalte der Sprachdateien zugegriffen werden kann, muss die Sprachdatei zuerst noch geladen werden. Contao wurde so konzipiert, dass ausschließlich nur die benötigten Ressourcen geladen werden, um das System auch in der Laufzeit möglichst performant zu halten.
  
Vorhandene Datei aus ''TL_ROOT/system/modules/calendar/templates/event_list.tpl'' in ''TL_ROOT/system /modules/calendarFreeEntry/templates'' kopieren, in ''event_list_freeEntry.tpl'' umbenennen und entsprechend erweitern (komplettes Beispiel s. angehängte zip-Datei):
+
Vorhandene Datei aus ''TL_ROOT/system/modules/calendar/templates/event_list.tpl'' in ''TL_ROOT/system /modules/calendarFreeEntry/templates'' kopieren, in ''event_list_freeEntry.tpl'' umbenennen und entsprechend erweitern:
<pre>
+
 
 +
<source lang="php">
 
//Load language file
 
//Load language file
 
<?php $this->loadLanguageFile('tl_calendar_events'); ?>
 
<?php $this->loadLanguageFile('tl_calendar_events'); ?>
Zeile 102: Zeile 272:
 
//Check field freeEntry
 
//Check field freeEntry
 
<?php if ($this->freeEntry): ?>
 
<?php if ($this->freeEntry): ?>
<p class="freeEntry"><?php echo $GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry']0; ?></p>   
+
<p class="freeEntry"><?php echo $GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'][0]; ?></p>   
<?php endif;  
+
<?php endif; ?>  
.
+
</source>
.
+
 
.
+
Dies war die letzte Datei, die erstellt / bearbeitet werden musste. Nun muss das ganze Paket in die Contao-Installation hoch geladen werden. Beim Hochladen ist darauf zu achten, dass der Ordner an die richtige Stelle kopiert wird.
?>
+
 
</pre>
+
[[Datei:moduleext_ftp.png|FTP]]
  
 
==Datenbank-Update, Veranstaltung eintragen, Test==
 
==Datenbank-Update, Veranstaltung eintragen, Test==
Über ''<nowiki>http://www.meinedomain.de/typolight/install.php</nowiki>'' ein Datenbank-Update durchführen (vorgeschlagene Änderungen per Haken aktivieren => Update Database), im Backend unter Layout => Module => Eventlist => das neue Template auswählen, Veranstaltung eintragen und mit freiem Entritt versehen, ggf. Cache leeren und im Frontend prüfen.
+
Über ''<nowiki>http://www.meinedomain.de/typolight/install.php</nowiki>'' ein Datenbank-Update durchführen (vorgeschlagene Änderungen per Haken aktivieren => Update Database).
 +
 
 +
[[Datei:moduleext_updatedb.png|Datenbank-Update durchführen]]
 +
 
 +
Anschließend im Backend unter Themes das MusicAcademy-Theme bearbeiten und bei den Frontend-Modulen das Modul ''Calendar - Event List (Eventliste)'' suchen und dieses ebenfalls bearbeiten. Unter dem Punkt ''Template-Einstellungen'' wählt man nun das neu erstellte Template ''event_list_freeEntry'' aus.
 +
 
 +
[[Datei:moduleext_template.png|Erstelltes Template auswählen]]
 +
 
 +
Wenn man nun ein neues Event erstellt oder ein vorhandenes bearbeitet, hat man unter dem ''Title''-Feld eine neue Auswahl ''Free entry'' zur Verfügung.
 +
 
 +
[[Datei:moduleext_editevent.png|Event bearbeiten]]
 +
 
 +
Wird diese Einstellung aktiviert, so wird im Frontend in der Eventliste (.../contao_music/index.php/event-list.html?month=201001) zu den normalen Informationen zusätzlich der Eintrag ''Free Entry'' angezeigt.
 +
 
 +
[[Datei:moduleext_fe.png|Frontend Ausgabe]]
  
 
=Credits=
 
=Credits=
 
Die Orginal-Anleitung wurde erstellt von manela<br />
 
Die Orginal-Anleitung wurde erstellt von manela<br />
 
Div. Korrekturen und Anpassungen an die Contao-Version durch [[user:Toflar|Toflar]], [[user:BugBuster|BugBuster]] und [[user:manitougs|manitougs]]
 
Div. Korrekturen und Anpassungen an die Contao-Version durch [[user:Toflar|Toflar]], [[user:BugBuster|BugBuster]] und [[user:manitougs|manitougs]]
 +
=Verwandte Themen=
 +
[[Eigene_Templates_trotz_fehlender_Auswahlmöglichkeit|Templates Erweitern]]

Aktuelle Version vom 8. Dezember 2012, 18:41 Uhr

betrifft
Contao Version 2.9 RC1 / 3.0

Vorwort

Dieses Tutorial soll neben anderen vorhandenen Tutorials beim Einstieg in die Modulprogrammierung helfen. Hier wird kein eigenständiges Modul erstellt, sondern auf ein vorhandenes Core-Modul und der Demo-Installation Music Academy aufgebaut.

Anforderung

Die Music Academy hat in diesem Jahr so viele talentierte Schüler, dass sie mit Hilfe deren musikalischer Unterstützung verschiedene Abendveranstaltungen durchführen möchte. Manche der Veranstaltungen werden mit kostenlosem Eintritt angeboten, andere Veranstaltungen sollen kostenpflichtig sein. Um den besonders kostenbewussten Musikliebhabern in der Veranstaltungsliste auf einem Blick aufzuzeigen, welche Veranstaltungen kostenfrei sind, soll diese Information in Zukunft bei jeder einzelnen Veranstaltung direkt angezeigt werden.

Zur Umsetzung der Anforderung wird das Formular zur Eingabe von Terminen um eine zusätzliche Checkbox erweitert. Diese Checkbox ist bei Veranstaltungen mit kostenlosem Eintritt zu aktivieren. Falls die Prüfung im Template ergibt, dass der Wert der Checkbox gesetzt ist, wird eine entsprechende Information im Frontend ausgegeben.

Kurzanleitung für Contao 3

  1. TL_ROOT/system/modules/calendarFreeEntry - neues Modulverzeichnis mit nötiger Verzeichnis- und Dateistruktur erstellen
  2. TL_ROOT/system/modules/calendarFreeEntry/config/autoload.php - Autoloader Datei erstellen
  3. TL_ROOT/system/modules/calendarFreeEntry/dca/tl_calendar_events.php – Data Container Array erweitern inkl. Datenbankfeld freeEntry
  4. TL_ROOT/system/modules/calendarFreeEntry/languages – Sprachdateien um neues Feld freeEntry erweitern
  5. TL_ROOT/system/modules/calendarFreeEntry/templates – Erweiterung der Templates um Laden der Sprachdatei, Prüfung des Feldes freeEntry und abhängiger Ausgabe
  6. http://www.meinedomain.de/contao/install.php - Datenbank-Update durchführen, Template in der Eventliste ändern, Termin einstellen, testen

Detailanleitung für Contao 3

Erstellen des neuen Modulverzeichnis mit nötiger Verzeichnis- und Dateistruktur

In dieser Anleitung wird die Extension-Erweiterung lokal erstellt und anschließend auf den Webserver hoch geladen.

TL_ROOT/system/modules/calendarFreeEntry/config/
TL_ROOT/system/modules/calendarFreeEntry/config/autoload.php
TL_ROOT/system/modules/calendarFreeEntry/dca
TL_ROOT/system/modules/calendarFreeEntry/dca/tl_calendar_events.php
TL_ROOT/system/modules/calendarFreeEntry/languages
TL_ROOT/system/modules/calendarFreeEntry/languages/de
TL_ROOT/system/modules/calendarFreeEntry/languages/de/tl_calendar_events.php
TL_ROOT/system/modules/calendarFreeEntry/languages/en
TL_ROOT/system/modules/calendarFreeEntry/languages/en/tl_calendar_events.php
TL_ROOT/system/modules/calendarFreeEntry/templates/
TL_ROOT/system/modules/calendarFreeEntry/templates/event_list_freeEntry.html5
TL_ROOT/system/modules/calendarFreeEntry/templates/event_list_freeEntry.xhtml

Anlegen der autoload.php

Dazu die Datei TL_ROOT/system/modules/calendarFreeEntry/config/autoload.php öffnen und folgenden Inhalt einfügen:

<?php
 
/**
 * Register the templates
 */
TemplateLoader::addFiles(array
(
'event_list_freeEntry' => 'system/modules/calendarFreeEntry/templates',
));

Erweiterung des vorhandenen Data Container Arrays (DCA)

Dazu die Datei TL_ROOT/system/modules/calendarFreeEntry/dca/tl_calendar_events.php öffnen und folgenden Inhalt einfügen:

<?php 
 
//Anzeige im Backend
$GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default'] = str_replace('title,','title,freeEntry,', $GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default']);
 
//Beschreibung des Feldes
$GLOBALS['TL_DCA']['tl_calendar_events']['fields']['freeEntry'] = array
(
        'label'                   => &$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'],
        'inputType'               => 'checkbox',
        'sql'                     => "char(1) NOT NULL default ''"
);

Anschliessend speichern und schliessen.

Erweiterung der vorhandenen Sprachdateien

TL_ROOT/system/modules/calendarFreeEntry/languages/de/tl_calendar_events.php

<?php 
 
$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'][0] = 'Free entry';
$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'][1] = 'Zeigen Sie den Termin mit kostenlosen Eintritt an.';

TL_ROOT/system/modules/calendarFreeEntry/languages/en/tl_calendar_events.php

<?php 
 
$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'][0] = 'Free entry';
$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'][1] = 'Display the event with free entry.';

Erweiterung des vorhandenen Templates

Damit im Template die gewünschte Information ausgegeben werden kann, wird das vorhandene Template der Kerninstallation kopiert, in das neue Modulverzeichnis eingefügt und die PHP-Logik entsprechend ergänzt. (jeweils die html5 und xhtml Version) Dazu wird eine Prüfung eingebaut, die prüft, ob der Wert der Checkbox gesetzt wurde. Bei gesetztem Wert soll im Template sprachabhängig die Information ausgegeben, dass es sich um eine kostenlose Veranstaltung handelt. Damit auf die Inhalte der Sprachdateien zugegriffen werden kann, muss die Sprachdatei zuerst noch geladen werden. Contao wurde so konzipiert, dass ausschließlich nur die benötigten Ressourcen geladen werden, um das System auch in der Laufzeit möglichst performant zu halten.

Vorhandene Datei aus TL_ROOT/system/modules/calendar/templates/event_list.html5 und TL_ROOT/system/modules/calendar/templates/event_list.xhtml in TL_ROOT/system /modules/calendarFreeEntry/templates kopieren, in event_list_freeEntry.html5 bzw. event_list_freeEntry.xhtml umbenennen und entsprechend erweitern:

event_list_freeEntry.html5

<?php $this->loadLanguageFile('tl_calendar_events'); ?>
<?php if ($this->header): ?>
<div class="header<?php echo $this->classHeader; ?>">
<time datetime="<?php echo $this->datetime; ?>" class="date"><?php echo $this->firstDate; ?></time><?php if ($this->firstDay): ?> <span class="day">(<?php echo $this->firstDay; ?>)</span><?php endif; ?> 
</div>
 
<?php endif; ?>
<div class="event layout_list<?php echo $this->classList; ?>">
<h2><a href="<?php echo $this->href; ?>" title="<?php echo $this->title; ?> (<?php if ($this->day): echo $this->day; ?>, <?php endif; echo $this->date; if ($this->time): ?>, <?php echo $this->time; endif; ?>)"<?php echo $this->target; ?>><?php echo $this->link; ?></a></h2>
<?php if ($this->time || $this->span): ?>
<p class="time"><?php echo $this->time . $this->span; ?></p>
<?php endif; ?>
<?php if ($this->freeEntry): ?>
<p class="freeEntry"><?php echo $GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'][0]; ?></p>
<?php endif; ?>
<div class="ce_text">
<?php echo $this->details; ?>
</div>
</div>

event_list_freeEntry.xhtml

<?php $this->loadLanguageFile('tl_calendar_events'); ?>
<?php if ($this->header): ?>
<div class="header<?php echo $this->classHeader; ?>">
<span class="date"><?php echo $this->firstDate; ?></span><?php if ($this->firstDay): ?> <span class="day">(<?php echo $this->firstDay; ?>)</span><?php endif; ?> 
</div>
 
<?php endif; ?>
<div class="event layout_list<?php echo $this->classList; ?>">
<h2><a href="<?php echo $this->href; ?>" title="<?php echo $this->title; ?> (<?php if ($this->day): echo $this->day; ?>, <?php endif; echo $this->date; if ($this->time): ?>, <?php echo $this->time; endif; ?>)"<?php echo $this->target; ?>><?php echo $this->link; ?></a></h2>
<?php if ($this->time || $this->span): ?>
<p class="time"><?php echo $this->time . $this->span; ?></p>
<?php endif; ?>
<?php if ($this->freeEntry): ?>
<p class="freeEntry"><?php echo $GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'][0]; ?></p>  
<?php endif; ?>
<div class="ce_text">
<?php echo $this->details; ?>
</div>
</div>

Dies waren die letzten Dateien, die erstellt / bearbeitet werden mussten. Nun muss das ganze Paket in die Contao-Installation hoch geladen werden. Beim Hochladen ist darauf zu achten, dass der Ordner an die richtige Stelle kopiert wird.

FTP

Datenbank-Update, Systemwartung, Veranstaltung eintragen, Test

Über http://www.meinedomain.de/contao/install.php ein Datenbank-Update durchführen (vorgeschlagene Änderungen per Haken aktivieren => Update Database).

Datenbank-Update durchführen

Anschließend im Backend unter Themes das MusicAcademy-Theme bearbeiten und bei den Frontend-Modulen das Modul Calendar - Event List (Eventliste) suchen und dieses ebenfalls bearbeiten. Unter dem Punkt Template-Einstellungen wählt man nun das neu erstellte Template event_list_freeEntry aus.

Erstelltes Template auswählen

Nun noch wegen der manuellen Installation des Moduls den internen Contao Cache löschen, dazu unter System-Systemwartung alle "Seitencache leeren" und "Internen Cache leeren" markieren und auf "Daten bereinigen" klicken.

Wenn man nun ein neues Event erstellt oder ein vorhandenes bearbeitet, hat man unter dem Title-Feld eine neue Auswahl Free entry zur Verfügung.

Event bearbeiten

Wird diese Einstellung aktiviert, so wird im Frontend in der Eventliste (.../contao_music/index.php/event-list.html?month=201001) zu den normalen Informationen zusätzlich der Eintrag Free Entry angezeigt.

Frontend Ausgabe

Kurzanleitung für Contao 2

  1. TL_ROOT/system/modules/calendarFreeEntry - neues Modulverzeichnis mit nötiger Verzeichnis- und Dateistruktur erstellen
  2. TL_ROOT/system/modules/calendarFreeEntry/config/database.sql – Datenbanktabelle um neues Feld freeEntry erweitern
  3. TL_ROOT/system/modules/calendarFreeEntry/dca/tl_calendar_events.php – Data Container Array erweitern
  4. TL_ROOT/system/modules/calendarFreeEntry/languages – Sprachdateien um neues Feld freeEntry erweitern
  5. TL_ROOT/system/modules/calendarFreeEntry/templates – Erweiterung Template um Laden der Sprachdatei, Prüfung des Feldes freeEntry und abhängiger Ausgabe
  6. http://www.meinedomain.de/contao/install.php - Datenbank-Update durchführen, Template in der Eventliste ändern, Termin einstellen, testen

Detailanleitung für Contao 2

Erstellen des neuen Modulverzeichnis mit nötiger Verzeichnis- und Dateistruktur

In dieser Anleitung wird die Extension-Erweiterung lokal erstellt und anschließend auf den Webserver hoch geladen.

TL_ROOT/system/modules/calendarFreeEntry
TL_ROOT/system/modules/calendarFreeEntry/config
TL_ROOT/system/modules/calendarFreeEntry/config/database.sql
TL_ROOT/system/modules/calendarFreeEntry/dca
TL_ROOT/system/modules/calendarFreeEntry/dca/tl_calendar_events.php
TL_ROOT/system/modules/calendarFreeEntry/languages
TL_ROOT/system/modules/calendarFreeEntry/languages/de
TL_ROOT/system/modules/calendarFreeEntry/languages/de/tl_calendar_events.php
TL_ROOT/system/modules/calendarFreeEntry/languages/en
TL_ROOT/system/modules/calendarFreeEntry/languages/en/tl_calendar_events.php
TL_ROOT/system/modules/calendarFreeEntry/templates/
TL_ROOT/system/modules/calendarFreeEntry/templates/event_list_freeEntry.tpl

Erweiterung der vorhandenen Datenbanktabelle tl_calendar_events

Dazu die Datei TL_ROOT/system/modules/calendarFreeEntry/config/database.sql öffnen und folgenden Inhalt einfügen:

--
--		Table `tl_calendar_events`
--
 
CREATE TABLE `tl_calendar_events` (
	`freeEntry` CHAR(1) NOT NULL DEFAULT '',
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Anschliessend speichern und schliessen.

Erweiterung des vorhandenen Data Container Arrays (DCA)

Dazu die Datei TL_ROOT/system/modules/calendarFreeEntry/dca/tl_calendar_events.php öffnen und folgenden Inhalt einfügen:

<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
 
//Anzeige im Backend
$GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default'] = str_replace('title,','title,freeEntry,', $GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default']);
 
//Beschreibung des Feldes
$GLOBALS['TL_DCA']['tl_calendar_events']['fields']['freeEntry'] = array
(
'label'                   => &$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'],
'inputType'               => 'checkbox'
);
 
?>

Anschliessend speichern und schliessen.

Erweiterung der vorhandenen Sprachdateien

TL_ROOT/system/modules/calendarFreeEntry/languages/de/tl_calendar_events.php

<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
 
$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry']        = array('Free entry', 'Zeigen Sie den Termin mit kostenlosen Eintritt an.'); 
 
?>

TL_ROOT/system/modules/calendarFreeEntry/languages/en/tl_calendar_events.php

<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
 
$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry']        = array('Free Entry', 'Display the event with free entry.');
 
?>

Erweiterung des vorhandenen Templates

Damit im Template die gewünschte Information ausgegeben werden kann, wird das vorhandene Template der Kerninstallation kopiert, in das neue Modulverzeichnis eingefügt und die PHP-Logik entsprechend ergänzt. Dazu wird eine Prüfung eingebaut, die prüft, ob der Wert der Checkbox gesetzt wurde. Bei gesetztem Wert soll im Template sprachabhängig die Information ausgegeben, dass es sich um eine kostenlose Veranstaltung handelt. Damit auf die Inhalte der Sprachdateien zugegriffen werden kann, muss die Sprachdatei zuerst noch geladen werden. Contao wurde so konzipiert, dass ausschließlich nur die benötigten Ressourcen geladen werden, um das System auch in der Laufzeit möglichst performant zu halten.

Vorhandene Datei aus TL_ROOT/system/modules/calendar/templates/event_list.tpl in TL_ROOT/system /modules/calendarFreeEntry/templates kopieren, in event_list_freeEntry.tpl umbenennen und entsprechend erweitern:

//Load language file
<?php $this->loadLanguageFile('tl_calendar_events'); ?>
.
.
.
//Check field freeEntry
<?php if ($this->freeEntry): ?>
<p class="freeEntry"><?php echo $GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry'][0]; ?></p>  
<?php endif; ?>

Dies war die letzte Datei, die erstellt / bearbeitet werden musste. Nun muss das ganze Paket in die Contao-Installation hoch geladen werden. Beim Hochladen ist darauf zu achten, dass der Ordner an die richtige Stelle kopiert wird.

FTP

Datenbank-Update, Veranstaltung eintragen, Test

Über http://www.meinedomain.de/typolight/install.php ein Datenbank-Update durchführen (vorgeschlagene Änderungen per Haken aktivieren => Update Database).

Datenbank-Update durchführen

Anschließend im Backend unter Themes das MusicAcademy-Theme bearbeiten und bei den Frontend-Modulen das Modul Calendar - Event List (Eventliste) suchen und dieses ebenfalls bearbeiten. Unter dem Punkt Template-Einstellungen wählt man nun das neu erstellte Template event_list_freeEntry aus.

Erstelltes Template auswählen

Wenn man nun ein neues Event erstellt oder ein vorhandenes bearbeitet, hat man unter dem Title-Feld eine neue Auswahl Free entry zur Verfügung.

Event bearbeiten

Wird diese Einstellung aktiviert, so wird im Frontend in der Eventliste (.../contao_music/index.php/event-list.html?month=201001) zu den normalen Informationen zusätzlich der Eintrag Free Entry angezeigt.

Frontend Ausgabe

Credits

Die Orginal-Anleitung wurde erstellt von manela
Div. Korrekturen und Anpassungen an die Contao-Version durch Toflar, BugBuster und manitougs

Verwandte Themen

Templates Erweitern

Ansichten
Meine Werkzeuge

Contao Community Documentation

<user> Composer meckert bei Isotope, dass er mit tablelookupwizard 3.1 nicht zurecht kommt - korrekt?
<Toflar> keine Ahnung, sowas weiss ich doch nicht auswendig :D
<user> wer dann ;)
<Toflar> na niemand, deswegen schreibt man's ja in die composer.json

Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge