Ergebnis 1 bis 11 von 11

Thema: Callback beim Absenden von Formularen

  1. #1
    Contao-Nutzer
    Registriert seit
    05.01.2010.
    Ort
    Berlin
    Beiträge
    22

    Standard Callback beim Absenden von Formularen

    Guten Abend,

    ich habe zwei Fragen zur Modulentwicklung:

    1. Lässt sich beim Absenden eines Formulars im Backend von TYPOlight auch über einen Callback oder aber eine Eigenschaft abfragen, ob ein Datensatz mit der Aktion neu angelegt wird. Bisher habe ich einen Callback

    'onsubmit_callback' => array (array('tl_availability', 'save'))

    definiert, sehe aber in der Methode "save" keine Möglichkeit zu erkennen, dass es sich beim Abschicken des Formulars um eine Neuanlage des Datensatzes handelt. Auch beim Aufruf von "create" als Action, befindet sich im Parameter "act" nach Absenden des Formulars die Action "edit".

    2. Kann das Label "Datensatz ID 19 bearbeiten" beim Bearbeiten von Datensätzen im oberen Formularbereich angepasst werden oder ist es immer mit dem Text fest vordefiniert?

    Viele Grüße, Andreas

  2. #2
    Contao-Nutzer
    Registriert seit
    22.06.2009.
    Ort
    St.Pauli
    Beiträge
    217

    Standard

    Hi Andreas,
    zu 1: die aktuellen $_GET Parameter sollten doch act=create beinhalten. Könntest du auslesen und in deiner callback-Funktion benutzen(?).

    zu 2:
    $GLOBALS['TL_LANG']['MSC']['editRecord']
    (aber wenn du diese Angabe bedingungslos neu setzt, gilt sie natürlich systemweit).


    cheers
    Antipitch
    Geändert von Antipitch (11.01.2010 um 12:28 Uhr)
    "Some people, when confronted with a problem, think 'I know, I’ll use regular expressions.' Now they have two problems." Jamie Zawinski

  3. #3
    Contao-Nutzer
    Registriert seit
    05.01.2010.
    Ort
    Berlin
    Beiträge
    22

    Standard

    Hallo Antipitch,

    danke für die Antwort. Das Ergebnis deiner Schilderung hätte ich erwartet und die Abfrage von "create" in den Parametern per

    $act = $dc->Input->get('act');

    habe ich versucht. Wie an anderen Stellen des Systems sichtbar, wird bereits beim Anlegen eines neues Datensatzes aus dem "create" ein "edit", z. B. siehst du das bei den News. Legst du ein "Neues Archiv" an, lautet der Link http://linux/cms/typolight/main.php?do=news&act=create, aber die Zielseite ist http://linux/cms/typolight/main.php?...dit&id=5&s2e=1. Damit ist anhand des Parameters nicht mehr sichtbar, dass es eine Neuanlage ist. TYPOlight legt in der Datenbank auch bereits einen leeren Datensatz an. Es ist also keine Lösung des Problems.

    Wegen der Kopfzeile muss ich dann andere Wege gehen. Die Meldung ist mir zu "technisch", so dass ich eine seitenabhängige Ausgabe passender finde.

    Viele Grüße, Andreas

  4. #4
    Contao-Nutzer
    Registriert seit
    22.06.2009.
    Ort
    St.Pauli
    Beiträge
    217

    Standard

    Hi Andreas,
    vielleicht verstehe ich dich ja irgendwie falsch, aber wenn nicht, machst du es dir schwerer als nötig.

    Der Get-Parameter ist zunächst natürlich immer vorhanden. Und zwar so:
    PHP-Code:
    $this->Input->get('act'); 
    .
    Vielleicht hat dich die News Archiv-Klasse etwas in die Irre geführt: dort wird onload die Funktion checkPermission ausgeführt und der Datensatz ggf. sofort gespeichert (deshalb die geänderten Parameter). Deine Abfrage müsste also davor stattfinden. Wenn du dir besagte Funktion ansiehst, wirst du übrigens feststellen, dass Leo selbst dort die von mir angedeuete Vorgehensweise benutzt. Wenn du copy->insert auch berücksichtigen musst, sehen die relevanten Parameter natürlich etwas anders aus, funktioniert aber letztlich ebenso...


    Gruß
    Antipitch
    Geändert von Antipitch (11.01.2010 um 23:07 Uhr)
    "Some people, when confronted with a problem, think 'I know, I’ll use regular expressions.' Now they have two problems." Jamie Zawinski

  5. #5
    Contao-Nutzer
    Registriert seit
    05.01.2010.
    Ort
    Berlin
    Beiträge
    22

    Standard

    Hallo Antipitch,

    du verstehst es richtig und ich kann deine Aussage auch bestätigen, aber sie führen nicht zur Lösung des Problems. Es gibt anscheinend zwei Callback-Funktionen auf der globalen Ebene "onload_callback" und "onsubmit_callback". Das von dir dargestellt Beispiel benutzt den "onload_callback" und auch dort sehe ich bei mir noch das "create" in der "act". Beim Absenden des Formulars ist es eben nicht mehr vorhanden. Somit ist es mir nicht möglich zu prüfen, ob es sich bei dem aktuellen Datensatz um einen komplett neuen Datensatz handelt.

    Beispiel der Config:

    PHP-Code:
        // Config
        
    'config' => array
        (
            
    'dataContainer'                   => 'Table',
            
    'ptable'                          => 'tl_availability',
            
    'enableVersioning'                => false,
            
    'onload_callback' => array
            (
                array(
    'tl_availability_item''load')
            ),
            
    'onsubmit_callback' => array
            (
                array(
    'tl_availability_item''save')
            )
        ), 
    Viele Grüße, Andreas

  6. #6
    Contao-Nutzer
    Registriert seit
    22.06.2009.
    Ort
    St.Pauli
    Beiträge
    217

    Standard

    Hi Andreas,
    Es gibt anscheinend zwei Callback-Funktionen auf der globalen Ebene "onload_callback" und "onsubmit_callback".
    stimmt (fast ). Alle callbacks findest du hier (Obacht: es sind auch welche aus TL 2.8 dabei).

    Beim Absenden des Formulars ist es eben nicht mehr vorhanden.
    Nicht prinzipiell. Hängt eben davon ab, was innerhalb der dca Datei passiert. Allerdings richtigerweise nicht in einer onsubmit_callback-Funktion, dann ist der Datensatz schon gespeichert.

    Was willst du denn machen? Vielleicht lässt sich das Pferd auch von vorne aufzäumen?


    cheers
    Antipitch
    "Some people, when confronted with a problem, think 'I know, I’ll use regular expressions.' Now they have two problems." Jamie Zawinski

  7. #7
    Contao-Nutzer
    Registriert seit
    05.01.2010.
    Ort
    Berlin
    Beiträge
    22

    Standard

    Hallo Antipitch,

    richtig, es sind zusammen mit dem Löschen drei globale Callbacks. Wenn ein Datensatz neu angelegt wird, ist in in meinem Fall eine zusätzliche Logik damit verbunden. Es soll zum Beispiel eine E-Mail abgesendet werden oder zusätzlich ein Aufruf eines Services erfolgen. Insofern muss ich an dieser Stelle ermitteln, ob der Datensatz nur editiert oder aber tatsächlich neu angelegt wird. Es muss doch eine einfache Möglichkeit geben, die Neuanlage von Datensätzen zu filtern. Über den Action-Parameter "act" scheint es ja nicht möglich zu sein.

    In der Konfiguration habe ich folgenden Link/Operation angelegt:

    PHP-Code:
    /**
     * Table tl_availability
     */
    $GLOBALS['TL_DCA']['tl_availability'] = array
    (
    ...
                
    'create' => array
                (
                    
    'label'           => &$GLOBALS['TL_LANG']['tl_availability']['items'],
                    
    'href'            => 'table=tl_availability_item&act=create',
                    
    'icon'            => 'system/modules/availability/html/icon.gif'
                
    ),
    ... 
    Viele Grüße, Andreas

  8. #8
    Contao-Nutzer
    Registriert seit
    22.06.2009.
    Ort
    St.Pauli
    Beiträge
    217

    Standard

    Hi Andreas,
    ich versteh immer noch nicht wirklich, wo das Problem ist. Dass das Erfassen von Neuerstellungen einfach möglich ist, hatten wir schon festgestellt (vgl. z.B. auch TL Log). Dir stehen doch alle Möglichkeiten offen, das auch beim Speichern noch zu "wissen"?

    Falls dein Problem noch besteht, wär's vielleicht wirklich einfacher, wenn du uns sagst, was du eigentlich machen willst...


    cheers
    Antipitch
    "Some people, when confronted with a problem, think 'I know, I’ll use regular expressions.' Now they have two problems." Jamie Zawinski

  9. #9
    Contao-Nutzer
    Registriert seit
    05.01.2010.
    Ort
    Berlin
    Beiträge
    22

    Standard

    Hallo Antipitch,

    wann hatten wir festgestellt, dass das "Erfassen von Neuerstellungen einfach möglich ist"? Wir haben bisher geklärt, dass der Paramter "act" im Callback "onload_callback" korrekt auf "create" steht. Wenn du dir den Parameter danach im Callback "onsubmit_callback" anschaust, wurde er automatisch zu "edit".

    Ein tieferer Blick in den Code der Klasse "drivers/DC_Table.php" zeigt die Ursache. In der Methode "create" kommt es zum Aufruf von "switchToEdit". Damit wird die "act" von "create" auf "edit" umgeschrieben und ein Dummy-Eintrag in der Datenbank angelegt. An dieser Stelle ist mein Formular zur Neuanlage aber noch nicht abgeschickt.

    Das Konzept erschließt sich mir an dieser Stelle nicht und meine Frage bleibt bestehen, welche Möglichkeiten mit das System im "onsubmit_callback" zur Erkennung von neu angelegten Datensätzen bietet. Was ist Best Practice bei TYPOlight, um bei Neuanlage eines Datensatzes zum Beispiel eine E-Mail zu versenden?

    Viele Grüße, Andreas

  10. #10
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    • tl_meinetabelle
      • notification_sent default ''


    Callback --> if(notification_sent != 1) send mail and update tl_meinetabelle set notification_sent=1

    Ansonsten return;
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  11. #11
    Contao-Nutzer
    Registriert seit
    05.01.2010.
    Ort
    Berlin
    Beiträge
    22

    Standard

    Hallo Toflar,

    vielen Dank für den Hinweis. Einen ganz ähnlichen Mechanismus nutze ich aktuell über den verfügbaren Timestamp (tstamp) in der Tabelle. Damit ist kein zusätzliches Attribut notwendig. Das wirkt eher wie ein Workaround, denn es sollte aus meiner Sicht an der Stelle möglich sein, über das Framework diese Status-Information zu bekommen.

    Viele Grüße, Andreas

Aktive Benutzer

Aktive Benutzer

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

Ähnliche Themen

  1. Lightbox soll sich beim absenden schließen!
    Von Supermann im Forum Layout / Templates / Holy Grail
    Antworten: 2
    Letzter Beitrag: 11.02.2011, 21:09
  2. Fehler beim speichern von Formularen
    Von id3nki im Forum Formulare
    Antworten: 6
    Letzter Beitrag: 18.10.2010, 14:15
  3. Callback per AJAX im Backend?
    Von asteireif im Forum Entwickler-Fragen
    Antworten: 0
    Letzter Beitrag: 07.11.2009, 15:42

Lesezeichen

Lesezeichen

Berechtigungen

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