Ergebnis 1 bis 8 von 8

Thema: EFG - einfache Berechnung

  1. #1
    Contao-Nutzer
    Registriert seit
    03.01.2011.
    Beiträge
    17

    Standard EFG - einfache Berechnung

    Hallo

    ich stehe gerade ein wenig auf dem schlauch.

    ich habe eine tabelle angelegt, diese hat 4 spalten.

    1. Datum
    2. Uhrzeit
    3. Zählerstand
    4. Bemerkungen


    Wie bekomme ich es hin, dass er in der Frontend-Listenansicht sich den Zählerstand vom Voreintrag holt und Ihn nicht editierbar in der Frontend - Detailseite wieder ausgibt?

    dann möchte ich jetzt, dass in der Ausgabe im Frontend-Liste sowie Detailseite das Ergebniss folgender Berechnung mit ausgegeben wird:

    Verbrauch = Zählerstand Aktuell eingegeben - Zählerstand Vortag

    Ich habe zwar das hier gefunden aber weis nicht wirklich weiter:

    http://www.tl-usertreffen.weitzeldesign.com/efg-6.html

    könnte mir vieleicht jemand dabei helfen?

    Vielen dank
    Geändert von xchs (25.07.2011 um 20:31 Uhr) Grund: Korrektur

  2. #2
    Alter Contao-Hase
    Registriert seit
    06.07.2009.
    Beiträge
    1.493

    Standard

    Hi,

    hier mal nen Beispiel wie du das mit den Berechnungen hinbekommst:

    1. Eine Php Datei mit dem Namen EfgCallbacks erstellen mit folgendem Inhalt:

    PHP-Code:
    <?php
     
    // $arrSubmitted enthalt die POST-Werte
    // $arrFiles ggf. Datei-Uploads
    // $intOldId die ID des bearbeiteten Datensatzes, im Falle von Frontend-Bearbeitung
    // $arrForm enthaelt die 'Formular-Konfiguration'

    //Registrieren des Callbacks in system/config/dcaconfig.php - $GLOBALS['TL_HOOKS']['processEfgFormData']['callback_01'] = array('EfgCallbacks', 'VerbrauchCalculate');
     
    class EfgCallbacks extends Backend
    {

        public function 
    VerbrauchCalculate($arrSubmitted$arrFiles$intOldId, &$arrForm)
        {
     
            
    // Einschraenkung auf das Formular
            
    if ($arrSubmitted['FORM_SUBMIT'] == 'auto_form_38')
            {
                
                
    // Subtrahieren von Werten mehrerer Formularfelder 
                
    $arrSubmitted['verbrauch'] = $arrSubmitted['zs_aktuell'] - $arrSubmitted['zs_vortag'];
                
            }

            return 
    $arrSubmitted;
     
        }
    }
    ?>
    2. Callback registrieren... hierfür:

    PHP-Code:
    $GLOBALS['TL_HOOKS']['processEfgFormData']['callback_01'] = array('EfgCallbacks''VerbrauchCalculate'
    in system/config/dcaconfig.php eintragen.


    3. Anpassungen in der PHP Datei:

    Die ID deines Formulares bitte bei auto_form_38 austauschen... d.h. Statt der 38 die ID von deinem Formular.


    4. Im Formular das Feld welches den Verbrauch ausgibt den Feldnamen in verbrauch ändern.
    DenFeldnamen für den Aktuellen Verbrauch in zs_aktuell umbenennen. Den Feldnamen mit dem Verbrauch vom Vortag in zs_vortag umbenennen.

    5. Melden falls es Schwierigkeiten gibt.

    Habe es gerade mal getestet. Bei mir werden die berechneten Daten per E-Mail an mich versendet. Also alles ohne Probleme.

  3. #3
    Contao-Nutzer Avatar von GeorgDerks
    Registriert seit
    20.01.2010.
    Ort
    47906 Kempen
    Beiträge
    70
    Partner-ID
    6516

    Standard

    Zitat Zitat von Acta Beitrag anzeigen
    ... 1. Eine Php Datei mit dem Namen EfgCallbacks erstellen mit folgendem Inhalt: ...
    Hallo Acta. Klingt prima. Wo muss die PHP-Datei abgelegt werden?

    Und noch eine Sache: Du schreibst:
    Zitat Zitat von Acta Beitrag anzeigen
    ... Bei mir werden die berechneten Daten per E-Mail an mich versendet. Also alles ohne Probleme.
    Werden die Formulardaten in die E-Mail an den Empfänger der Nachricht (Contao-Core) und/oder an den Absender (per EFG, Kopie der gesendeten Daten) geschrieben?
    Herzlichen Gruß,

  4. #4
    Contao-Nutzer Avatar von GeorgDerks
    Registriert seit
    20.01.2010.
    Ort
    47906 Kempen
    Beiträge
    70
    Partner-ID
    6516

    Standard Gelöst!

    Habe in dem Beitrag "Der Hook 'processEfgFormData'" von Thomas Weitzel unter
    http://www.tl-usertreffen.weitzeldesign.com/efg-6.html
    die Antwort auf meine Frage gefunden:

    Die Callback-Funktionen werden in einer PHP-Klasse, z.B. als Datei 'EfgCallbacks.php' im Verzeichnis 'system/modules/efg' gespeichert.
    Hier findet sich auch ein anderes Berechnungsbeispiel.

    Und die zweite Antwort habe ich durch Testen herausgefunden:
    Der neu berechnete Wert erscheint nur in der E-Mail an den Absender (Formulareinstellungen Backend, Absatz "(EFG) Bestätigung per E-Mail versenden") und nicht an den Anbieter (Formulareinstellungen Backend, Absatz "Formulardaten versenden")!
    Geändert von GeorgDerks (26.09.2011 um 12:20 Uhr)
    Herzlichen Gruß,

  5. #5
    Contao-Nutzer Avatar von malle
    Registriert seit
    21.03.2012.
    Ort
    Berlin
    Beiträge
    65

    Standard Ausgabe des berechneten Feldes in der Bestätigungs-E-Mail

    Hallo!

    Wie lautet denn die Syntax, wenn ich den Verbrauch aus dem Beispiel in der Bestätigungs-E-Mail ausgeben will?
    So?

    PHP-Code:
    {{form::verbrauch}} 
    Gruß
    Marcus

  6. #6
    Contao-Fan Avatar von tom
    Registriert seit
    16.06.2009.
    Ort
    Ludwigsburg
    Beiträge
    385

    Standard

    Hallo,

    ja

    Gruß
    Tom

  7. #7
    Contao-Nutzer Avatar von Schmidty
    Registriert seit
    06.06.2011.
    Ort
    Pforzheim
    Beiträge
    203

    Frage Funktioniert (bei mir) unter Contao 3.2.9 nicht

    Hallo,

    das Ganze funktioniert bei mir unter Contao 3.2.9 nicht. Ich bin wie folgt vorgegangen:

    1) Im Formular habe ich drei Checkboxen angelegt, im Wert jeweils die zu addierenden Werte. Der jeweilige Wert soll nur zur Berechnung herangezogen werden, wenn die Checkbox auch abgehakt ist.
    (Screenshot: checkbox-konfiguration.JPG)


    2) Die Datei "EfgCallbacks.php" erstellt und in .../system/modules/efg abgelegt. Die Datei "EfgCallbacks.php" hat folgenden Inhalt:

    PHP-Code:
    <?php
    // $arrSubmitted enthalt die POST-Werte
    // $arrFiles ggf. Datei-Uploads
    // $intOldId die ID des bearbeiteten Datensatzes, im Falle von Frontend-Bearbeitung
    // $arrForm enthaelt die 'Formular-Konfiguration'
     
    class EfgCallbacks extends Backend
      
    {
          public function 
    Calculate($arrSubmitted$arrFiles$intOldId, &$arrForm)
            {
            
    // Einschraenkung auf das Formular
            
    if ($arrSubmitted['FORM_SUBMIT'] == 'auto_form_2')
                {
                
    // addieren von Werten mehrerer Formularfelder, Übertragen der Summe 
                
    $arrSubmitted['gesamtsumme'] = $arrSubmitted['feldname1'] + $arrSubmitted['feldname2'] + $arrSubmitted['feldname3'];
                }
          return 
    $arrSubmitted;
          }
      }
    ?>

    3) In der datei "dcaconfig.php" wurde der folgende Eintrag hinzugefügt:
    Code:
    $GLOBALS['TL_HOOKS']['processEfgFormData']['callback_01'] = array('EfgCallbacks', 'Calculate');

    ==> Nach dem versenden des Formulars endet das Ganze mit einem weißen Screen und folgender Fehlermeldung in der error.log:
    Code:
    [21-May-2014 16:13:19 Europe/Berlin] 
    PHP Warning: in_array() expects parameter 2 to be array, null given in /is/htdocs/pfad/zu/contao/system/modules/core/library/Contao/System.php on line 110
    #0 [internal function]: __error(2, 'in_array() expe...', '/is/htdocs/wp10...', 110, Array)
    #1 /is/htdocs/pfad/zu/contao/system/modules/core/library/Contao/System.php(110): in_array('getInstance', NULL)
    #2 /is/htdocs/pfad/zu/contao/system/modules/efg/classes/FormdataProcessor.php(163): Contao\System->import('EfgCallbacks')
    #3 /is/htdocs/pfad/zu/contao/system/modules/core/forms/Form.php(484): Efg\FormdataProcessor->processSubmittedData(Array, Array, Array, Array, Object(Efg\ExtendedForm))
    #4 /is/htdocs/pfad/zu/contao/system/modules/core/forms/Form.php(225): Contao\Form->processFormData(Array, Array)
    #5 /is/htdocs/pfad/zu/contao/system/modules/efg/forms/ExtendedForm.php(149): Contao\Form->compile()
    #6 /is/htdocs/pfad/zu/contao/system/modules/core/classes/Hybrid.php(218): Efg\ExtendedForm->compile()
    #7 /is/htdocs/pfad/zu/contao/system/modules/core/forms/Form.php(56): Contao\Hybrid->generate()
    #8 /is/htdocs/pfad/zu/contao/system/modules/core/library/Contao/Controller.php(456): Contao\Form->generate()
    #9 /is/htdocs/pfad/zu/contao/system/modules/core/modules/ModuleArticle.php(205): Contao\Controller->getContentElement(Object(Contao\ContentModel), 'main')
    #10 /is/htdocs/pfad/zu/contao/system/modules/core/modules/Module.php(148): Contao\ModuleArticle->compile()
    #11 /is/htdocs/pfad/zu/contao/system/modules/core/modules/ModuleArticle.php(59): Contao\Module->generate()
    #12 /is/htdocs/pfad/zu/contao/system/modules/core/library/Contao/Controller.php(392): Contao\ModuleArticle->generate(false)
    #13 /is/htdocs/pfad/zu/contao/system/modules/core/library/Contao/Controller.php(254): Contao\Controller->getArticle(Object(Contao\ArticleModel), false, false, 'main')
    #14 /is/htdocs/pfad/zu/contao/system/modules/core/pages/PageRegular.php(138): Contao\Controller->getFrontendModule('0', 'main')
    #15 /is/htdocs/pfad/zu/contao/index.php(256): Contao\PageRegular->generate(Object(Contao\PageModel), true)
    #16 /is/htdocs/pfad/zu/contao/index.php(440): Index->run()
    #17 {main}
    
    [21-May-2014 16:13:19 Europe/Berlin] PHP Fatal error:  Class 'EfgCallbacks' not found in /is/htdocs/pfad/zu/contao/system/modules/core/library/Contao/System.php on line 110

    Muss ich die Datei "EfgCallbacks.php" bei Contao 3.2.9 in einem anderen Pfad ablegen
    (derzeit .../system/modules/efg)?
    Oder habe ich an einer anderen Stelle einen Fehler eingebaut?

    Danke für die Hilfe.

    Schmidty

  8. #8
    Contao-Nutzer Avatar von Schmidty
    Registriert seit
    06.06.2011.
    Ort
    Pforzheim
    Beiträge
    203

    Daumen hoch Problem gelöst

    Hallo,

    ich konnte das Problem lösen. Unter Contao 3.2.x müssen wohl die Hooks anders eingebunden werden.

    Der Code in der Datei EfgCallbacks.php ist richtig, die Befehlszeile zum Aufruf des Hooks ebenfalls. Was nicht gestimmt hat, ist der Pfad zu den Dateien.
    Damit das Ganze funktioniert bin ich wie folgt vorgegangen:
    In …/system/modules ein neues Modul erstellt mit dem Namen efg-calculate, darin wurde die Datei EfgCallbacks.php gespeichert. Außerdem wurde in …/system/modules/efg-calculate ein Unterordner erstellt mit dem Namen config. In diesem Ordner wurde die Datei config.php abgelegt mit folgenden Inhalt:

    PHP-Code:
    <?php
        $GLOBALS
    ['TL_HOOKS']['processEfgFormData']['callback_01'] = array('EfgCallbacks''Calculate');
    ?>
    Danach noch über das Backend die Autoload-Dateien für efg-calculate erstellen, den Systemcache leeren und das Ganze funktioniert.

    Ein Eintrag in die Datei dcaconfig.php ist nicht erforderlich.

    Bezüglich der Ausgabe des berechneten Wertes habe ich jetzt noch eine andere Frage, diese habe ich in einen neuen, separaten Thread gestellt.

    Schmidty
    Geändert von Schmidty (23.05.2014 um 09:52 Uhr)

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
  •