Ergebnis 1 bis 5 von 5

Thema: Mit EFG Daten editieren in Metamodels

  1. #1
    Contao-Nutzer Avatar von vienneva
    Registriert seit
    13.01.2011.
    Ort
    Wien
    Beiträge
    136

    Standard Mit EFG Daten editieren in Metamodels

    Hallo,

    ich bräuchte einen Stups in die richtige Richtung:
    Ich befülle ein kleines Metamodel per EFG und würde gern die Daten im Frontend editierbar machen.
    Leider kann ich beim formdatalisting nur die EFG-Formdata-Tabellen auswählen, aber nicht meine Metamodel-Tabelle aus der Datenbank. Wo kann ich ansetzen um dort meine Metamodel-Tabelle zu verwenden? Was müsste alles umgeschrieben werden? Und das sollte dann wahrscheinlich in ein neues Modul, oder?

    Freue mich über alle Tipps.

    Liebe Grüße aus Wien,
    Eva

  2. #2
    Alter Contao-Hase Avatar von Messa
    Registriert seit
    19.01.2011.
    Ort
    Vorarlberg, Österreich
    Beiträge
    1.423

    Standard

    Du muss dazu zuerst die Daten einlesen.

    Ich habe das über Templates umgesetzt. (MM Templates)
    Da ich dort alle relevanten Daten automatisch bekomme.

    Ich habe damals dass so umgesetzt.
    - Liste mit allen Einträgen (FE)
    - Bei klick wurde die ID weitergeben
    - ein select zur DB und die Felder mit der ID rausgeholt
    - diese dann als Formular darstellen ({{request_token}} nicht vergessen )
    - beim Absenden dann ein update der DB durchführen

    Hier ein Beispiel für CRUD:

    http://www.startutorial.com/articles...utorial-part-1

    lg Matthias
    Geändert von Messa (21.09.2015 um 10:02 Uhr)
    Full Service Agentur - Grafikdesign, Screendesign, Webdesign, Webentwicklung, SEO, Weiterbildung, persönliches Coaching
    http://www.matthiasgmeiner.com

  3. #3
    Contao-Nutzer Avatar von vienneva
    Registriert seit
    13.01.2011.
    Ort
    Wien
    Beiträge
    136

    Standard

    Hallo Matthias,

    Danke dir. Da bin ich schon am richtigen Weg. Kann meine Daten auslesen, die werden auch ins Formularfeld wieder eingelesen. Dort kann man sie dann editieren. Request Token hab ich auch dabei.
    Mir fehlt der Schritt, wo ich das Formular abschicke und damit das DB update starte.
    Geht das über einen Hook oder rufe ich die Datei in der das DB-Schreiben steht direkt im Formular auf?
    DB-Update müsste ja gehen wie hier beschrieben:
    http://de.contaowiki.org/Datenbank_Klasse_verwenden
    oder?

    LG Eva

  4. #4
    Alter Contao-Hase Avatar von Messa
    Registriert seit
    19.01.2011.
    Ort
    Vorarlberg, Österreich
    Beiträge
    1.423

    Standard

    Sagen wir in der DB heißt das Feld "nummer".

    $id muss die ID des bearbeiten Datensatz beinhalten.
    $nummer ist der Wert aus dem Formularfeld.

    PHP-Code:
    $this->Database->prepare("UPDATE mm_kunden SET nummer=? WHERE id=?")->execute($nummer$id); 
    Vielleicht hilft dir dieser Link.
    http://www.hoenninger-it.net/contao-...nkzugriff.html

    lg Matthias
    Full Service Agentur - Grafikdesign, Screendesign, Webdesign, Webentwicklung, SEO, Weiterbildung, persönliches Coaching
    http://www.matthiasgmeiner.com

  5. #5
    Contao-Nutzer Avatar von vienneva
    Registriert seit
    13.01.2011.
    Ort
    Wien
    Beiträge
    136

    Lachendes Gesicht Gelöst: Mit EFG Daten editieren in Metamodels

    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

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •