Hallo,
ich bin selber PHP-Dilettant, hab dass aber soweit hinbekommen - ich bin nur noch nicht sicher, ob das "sicher" ist.
Auf dem Formular habe ich Textfelder für Titel (heißt bei mir title_copy), startDate, endDate, startTime, endTime (jeweils mit Eingabeprüfung auf Datum bzw. Zeit), zwei Textareas für teaser und details, ein SelectMenu (ort) für die css-Klasse und eine CheckBox für published mit dem Wert 1. Zusätzlich ein verstecktes Feld pid (für die ID des Kalenders, in das der Termin eingetragen werden soll) und ein Feld "alias_copy".
In den Formular-Optionen habe ich "Daten im Modul "Formular-Daten" speichern" aktiviert (aber nicht direkt in die tl_calender_events)
Das läuft bei mir dann alles über den efg, mit einem Hook auf processEfgFormData. Dazu in der Datei system/config/dcaconfig.php so eine Zeile ergänzen
PHP-Code:
$GLOBALS['TL_HOOKS']['processEfgFormData']['TerminForm'] = array('eventEfgFuncs', 'processSBData');
Den Wert 'TerminForm' kannst du frei wählen, ebenso das auf der rechten Seite. Das muss dann aber auch im Code unten entsprechend verändert werden (und afaik auch der Dateiname).
unter modules/efg habe ich dann eine Datei eventEfgFuncs.php angelegt, die dann die Werte aus dem Formular konvertiert und in den Kalender schreibt.
Damit später über das Modul "Formulardaten auflisten" auch eine Änderung im Kalender möglich ist, verpasse ich dem Event ein eigenes alias (titel säubern und timestamp dranhängen), was ich auch in den Formulardaten im Feld alias_copy speichere. Beim Bearbeiten kann ich über alias_copy das passende Event im Kalender (hat bei mir die pid 7) finden und updaten.
Kein Garantie, dass das alles richtig ist, aber bisher waren meine Tests mit der Version recht erfolgreich.
PHP-Code:
<?php
class eventEfgFuncs extends Backend
{
public function processSBData($arrToSave, $arrFiles, $intOldId, &$arrForm)
{
if ($arrForm['id'] == '21')
{
$startDate = strtotime($arrToSave['startDate']);
if ($intOldId == 0)
{
// create new alias
$alias = str_replace(' ','-',($arrToSave['title_copy'])).time();
$alias = preg_replace('/[^(\x20-\x7F)]*/','', $alias);
$arrToSave['alias_copy'] = $alias;
}
else
{
// use existing alias
$alias = $arrToSave['alias_copy'];
}
$arrEvent = array
(
'pid' => $arrToSave['pid'],
'alias' => $alias,
'author' => 1,
'tstamp' => $startDate,
'title' => $arrToSave['title_copy'],
'teaser' => $arrToSave['teaser'],
'details' => $arrToSave['details'],
'startDate' => $startDate,
'cssClass' => $arrToSave['ort'],
'published' => $arrToSave['published']
);
$trimmed = trim($arrToSave['endDate']);
if ($trimmed != '')
{
$endDate = strtotime($arrToSave['endDate']);
$arrEvent['endDate'] = $endDate;
$endDateStr = $arrToSave['endDate'];
}
else
{
$arrEvent['endDate'] = NULL;
// needed later
$endDateStr = $arrToSave['startDate'];
//$endDate = strtotime($arrToSave['endDate']);
}
$trimmed = trim($arrToSave['startTime']);
if ($trimmed == '')
{
$useTime = '';
$arrEvent['addTime'] = '';
$arrEvent['startTime'] = $startDate;
} else
{
$useTime = '1';
$startTime = strtotime($arrToSave['startDate'].' '.$arrToSave['startTime']);
$arrEvent['addTime'] = '1';
$arrEvent['startTime'] = $startTime;
}
$trimmed = trim($arrToSave['endTime']);
if ($trimmed == '')
{
$endTime = strtotime($endDateStr.' '.$arrToSave['startTime']);
if ($useTime == '1')
{
$arrEvent['endTime'] = $endTime;
} else
{
$arrEvent['endTime'] = $endTime; //NULL;
}
}
else
{
if ($useTime == '1')
{
$endTime = strtotime($endDateStr.' '.$arrToSave['endTime']);
$arrEvent['endTime'] = $endTime;
}
}
if ($intOldId == 0)
{
// create new entry
$objInsert = $this->Database->prepare('INSERT INTO tl_calendar_events %s')->set($arrEvent)->execute();
}
else
{
// update existing entry
$objUpdate = $this->Database->prepare("UPDATE tl_calendar_events %s WHERE pid='7' AND alias='".$alias."'")->set($arrEvent)->execute();
}
}
return $arrToSave;
}
}
?>
Lesezeichen