Hi Ihr,
vielen Dank für alle Unterstützung. Jetzt funktioniert es.
Ich poste hier genauer meine Aufgabenstellung und Lösungsansätze, falls das mal jemand brauchen kann.
Aufgabestellung:
Eingeloggte Mitglieder können sich eine persönliche Merkliste von Datensätzen (realisiert mit [metamodelsattribute_notelist]) erstellen. Jedes Mitglied kann dann in seiner Liste zu einem gemerkten Datensatz eine Notiz anlegen, editieren und löschen.
Lösungsansätze:
Anlegen der Notiz läuft über ein EFG-Formular, das Mitglieds_ID, Datensatz-ID und Notiztext in ein Metamodel ablegt.
Editieren wollte ich auch über ein EFG-Formular lösen:
Den Notiz-Text hole ich mir ins Formular über einen eigenen Insert-Tag {{merk::notiz}} nach der Anleitung auf
http://de.contaowiki.org/Eigene_insert_tags_erstellen
config.php:
PHP-Code:
$GLOBALS['TL_HOOKS']['replaceInsertTags'][] = array('GetNote', 'noteReplaceInsertTags');
Klasse:
PHP-Code:
class GetNote extends Frontend
{
public function noteReplaceInsertTags($strTag)
{
//Eingeloggtes Mitglied? Id holen
$objMember = \FrontendUser::getInstance();
if (FE_USER_LOGGED_IN) {
$memberid = $objMember->id;
} else {
$memberid = 0;
}
//inserttag abfragen
$arrSplit = explode('::', $strTag);
if ($arrSplit[0] == 'merk') {
if (isset($arrSplit[1]) && $arrSplit[1] == 'notiz')
{
// Metamodels-Eintrag suchen zur Mitglied und Datensatz
$objMetaModel = \MetaModels\Factory::byTableName('mm_notizen');
$objFilter = $objMetaModel->getEmptyFilter();
$objItems = $objMetaModel->findByFilter($objFilter);
foreach ($objItems as $objItem) {
if (!empty($objItem)) {
$notiz_id = $objItem->get('id');
$mitglied = $objItem->get('member_id');
$notiz = $objItem->get('note_text');
$datensatz = $objItem->get('detail_id');
if ($mitglied == $memberid && $datensatz==$_GET['auto_item']){
return $notiz;
}
}
}
}else ...
Dabei frage ich ab, ob zu dem betreffenden Datensatz ein Notiz-Eintrag existiert, der zu dem eingeloggten Mitglied gehört. Der wird dann als Standard mittels insert-tag ins Formularfeld voreingetragen. In versteckten Feldern übergebe ich außerdem die Mitglieds und die Datensatz-ID.
Editieren klappte zunächst nicht. Mein Fehler beim Absenden des Formulars war, dass ich im EFG noch immer Schreiben in die Metamodesl-Tabelle angegeben hatte. Dadurch wurde jedesmal beim Absenden ein neuer Eintrag erzeugt, was ich nicht wollte. Jetzt läuft mein Editier-Formular quasi ins Leere (kein Mail, kein DB-Eintrag!) und mit dem Hook $GLOBALS['TL_HOOKS']['processFormData'][] schreibe ich dann den Eintrag um.
config.php:
PHP-Code:
$GLOBALS['TL_HOOKS']['processFormData'][] = array('EditNote', 'updateNote');
Klasse:
PHP-Code:
class EditFavNote extends System {
public function updateNote($arrPost, $arrForm, $arrFiles){
if ($arrPost['FORM_SUBMIT'] == 'auto_form_8'){
$this->import('Database');
$this->Database->prepare("UPDATE mm_notizen SET note_text = ? WHERE id=?")->execute($arrPost['note_text'], $arrPost['id']);
}
}
}
Das klappt jetzt einwandfrei. Wichtig war, dass das EFG-Fomular ins Leere läuft um keinen zusätzlichen Eintrag zu erzeugen.
Löschen funktioniert analog über den gleichen Hook mit einem Formular das sichtbar nur den Löschbutton enthält - versteckt wird die ID des Notiz-Datensatzes mitgeschickt.
PHP-Code:
if ($arrPost['FORM_SUBMIT'] == 'auto_form_9'){
$this->import('Database');
$this->Database->prepare("DELETE FROM mm_notizen WHERE id=?")->execute($arrPost['id']);
}
LG
Eva
Lesezeichen