Ergebnis 1 bis 19 von 19

Thema: News-Eingabe über efg im Frontend

  1. #1
    Contao-Nutzer
    Registriert seit
    14.11.2010.
    Beiträge
    27

    Standard News-Eingabe über efg im Frontend

    Hallo,

    ich verwende ein efg-Formular, um angemeldeten Usern zu erlauben, News zu erstellen. Dazu kann der User die relevanten Felder im Formular ausfüllen, weitere Daten werden über versteckte Felder im Formular gesetzt. Das funktioniert soweit ganz gut.

    Jetzt habe ich allerdings meine News durch die Erweiterung newsentrymore optimiert. Der User kann jetzt im Formular die Felder "textPart1" und "textPart2" ausfüllen und speichern. Allerdings bleibt dadurch das DB-Feld "text" leer und die Anzeige des kompletten News-Textes funktioniert nicht mehr.
    Wie kann ich - am einfachsten ebenfalls über ein verstecktes Feld - das Feld "text" setzen mit "textPart1" + "textPart2"? Leider kenne ich mich mit PHP überhaupt nicht aus, um einen entsprechenden Code zu schreiben.
    Kann mir jemand helfen? Oder kennt jemand ein andere Erweiterung, um News im FE anlegen zu können?

    Grüße,
    Steff

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

    Standard

    Über einen Callback.

    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', 'Textzusammenfassen');
     
    class EfgCallbacks extends Backend
    {

        public function 
    Textzusammenfassen($arrSubmitted$arrFiles$intOldId, &$arrForm)
        {

    // Einschraenkung auf das Formular
            
    if ($arrSubmitted['FORM_SUBMIT'] == 'auto_form_3')
            {
                
     
    // Textzusammenfassen
          
        
    $arrSubmitted['text'] = $arrSubmitted['text_1'] + $arrSubmitted['text_2'] ;

           
            }
                         
             return 
    $arrSubmitted;
            }
        }
    ?> 
    oder eventuell sowas

    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', 'Textzusammenfassen');
     
    class EfgCallbacks extends Backend
    {

        public function 
    Textzusammenfassen($arrSubmitted$arrFiles$intOldId, &$arrForm)
        {

    // Einschraenkung auf das Formular
            
    if ($arrSubmitted['FORM_SUBMIT'] == 'auto_form_3')
            {
                
     
    // Textzusammenfassen
          
        
    $arrSubmitted['text_1'] = $zftexteins ;
     
    $arrSubmitted['text_2'] = $zftextzwei ;
     
    $arrSubmitted['text'] = $zftexteins <br$zftextzwei ;

           
            }
                         
             return 
    $arrSubmitted;
            }
        }
    ?> 
    Geändert von Acta (13.10.2011 um 11:41 Uhr)

  3. #3
    Contao-Nutzer
    Registriert seit
    14.11.2010.
    Beiträge
    27

    Standard

    Hallo Acta,

    vielen Dank für den Code!!! Sorry, dass ich nochmal blöd nachfragen muss: Wo muss ich den Code reinsetzen?

    Grüße,
    Steff

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

    Standard

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

    Die Datei selbst in... system/modules/efg

  5. #5
    Contao-Nutzer
    Registriert seit
    14.11.2010.
    Beiträge
    27

    Standard

    Hallo Acta,

    leider bin ich blutiger PHP-Anfänger. Ich habe das jetzt mal eingebaut, es funktioniert aber noch nicht. Noch ein paar Fragen:
    - wie muss die Datei mit dem PHP-Code heißen?
    - ich nehme an, dass ich folgende Werte im Code anpasssen muss; ist das richtig?
    auto_form_3 -> Namen des Formulars
    text, text_1, text_2 -> DB-Felder, also text, textPart1, textPart2
    - wo und wie muss ich den Callback aufrufen?
    - muss ich sonst noch etwas beachten?

    Vielen Dank für die Hilfe und entschuldige bitte mein Unwissen.

    Steff

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

    Standard

    Die PHP Datei sollte sofern du meinen Code verwendest "Textzusammenfassen" heißen aber ohne "".

    Den Callback musst du wie bereits geschrieben in der dcaconfig registrieren. Dies tust du in dem du folgenden code hinterlegst:


    PHP-Code:
    $GLOBALS['TL_HOOKS']['processEfgFormData']['callback_01'] = array('EfgCallbacks''Textzusammenfassen'); 

    Ich würde sagen... du solltest eventuell mal folgendes Probieren:
    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', 'Textzusammenfassen');
     
    class EfgCallbacks extends Backend
    {

        public function 
    Textzusammenfassen($arrSubmitted$arrFiles$intOldId, &$arrForm)
        {

    // Einschraenkung auf das Formular
            
    if ($arrSubmitted['FORM_SUBMIT'] == 'auto_form_3')
            {
                
     
    // Textzusammenfassen
          
        
    $arrSubmitted['text_1'] = $zftexteins ;
     
    $arrSubmitted['text_2'] = $zftextzwei ;
     
    $arrSubmitted['text'] = $zftexteins <br$zftextzwei ;

           
            }
                         
             return 
    $arrSubmitted;
            }
        }
    ?>
    Dabei werden deine zwei einzelnen Felder in die Variablen gespeichert und dann in dem Hauptfeld wieder zusammen ausgegeben getrent durch ein <br> wobei ich aber nicht weiß ob das funktioniert ^^

    Bin selbst auch kein PHP - Programierer sondern intressierte Anwender.

    Ich hab den Callback bis jetzt dafür benutzt zwei Felder zu addieren und die SUmme auszugeben.

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

    Standard

    Zitat Zitat von steffz Beitrag anzeigen
    Hallo Acta,

    leider bin ich blutiger PHP-Anfänger. Ich habe das jetzt mal eingebaut, es funktioniert aber noch nicht. Noch ein paar Fragen:
    - wie muss die Datei mit dem PHP-Code heißen?
    - ich nehme an, dass ich folgende Werte im Code anpasssen muss; ist das richtig?
    auto_form_3 -> Namen des Formulars
    text, text_1, text_2 -> DB-Felder, also text, textPart1, textPart2
    - wo und wie muss ich den Callback aufrufen?
    - muss ich sonst noch etwas beachten?

    Vielen Dank für die Hilfe und entschuldige bitte mein Unwissen.

    Steff

    auto_form_3 -> ID deines Formulars eintragen: z.B. auto_form_10

    text, text_1, text_2 -> DB-Felder, also text, textPart1, textPart2
    -> RICHTIG im EFG sollten die Feldernamen die Bezeichnung der Datenbankfelder entsprechen.

    Das heißt wenn deine felder textPart1 und textPart2 heißen solltest du im PhpCode text_1 und text_2 umbenennen.

  8. #8
    Contao-Nutzer
    Registriert seit
    13.11.2011.
    Beiträge
    29

    Standard

    Hallo, habe versucht das nachzuvollziehen.
    In der dcaconfig habe ich den Hook registriert:
    PHP-Code:
    $GLOBALS['TL_HOOKS']['processEfgFormData']['callback_01'] = array('EfgCallbacks''exampleCalculate'); 
    das ist meine Datei EfgCallbacks.php in modules/efg/
    PHP-Code:
    class EfgCallbacks extends Backend
    {
        public function 
    exampleCalculate($arrSubmitted$intOldId, &$arrForm)
        {
              
    var_dump($arrSubmitted) ;
        }


    Wenn ich aber das Formular abschicke, wird nichts angezeigt.

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

    Standard

    Also Nochmal:

    Schritt 1: Callback registrieren in dca config über:
    PHP-Code:
    $GLOBALS['TL_HOOKS']['processEfgFormData']['callback_01'] = array('EfgCallbacks''exampleCalculate'); 
    2. Schritt eine Php - Datei erstellen mit dem Namen exampleCalculate

    3. Folgenden Code in der Datei hinterlegen:

    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', 'exampleCalculate');
     
    class EfgCallbacks extends Backend
    {

        public function 
    exampleCalculate($arrSubmitted$arrFiles$intOldId, &$arrForm)
        {

    // Einschraenkung auf das Formular
            
    if ($arrSubmitted['FORM_SUBMIT'] == 'auto_form_3')
            {
                
     
    // Textzusammenfassen
          
        
    $arrSubmitted['text_1'] = $zftexteins ;
     
    $arrSubmitted['text_2'] = $zftextzwei ;
     
    $arrSubmitted['text'] = $zftexteins <br$zftextzwei ;

           
            }
                         
             return 
    $arrSubmitted;
            }
        }
    ?>
    4. Deine Formular ID unter if ($arrSubmitted['FORM_SUBMIT'] == 'auto_form_3') (also statt der 3 am Ende ... deine ID von deinem Formular) eintragen

    5. Die Datei auf deinen Webspace unter system/modules/efg ablegen

    6. Ausprobieren.

    Was tut die Datei:

    Die Datei nimmt die Texte aus deinen 2 Einzelfeldern text_1 und text_2 und speichert diese jeweils in eine Variable ab.
    im Datenbank Feld text werden nun beide Inhalte untereinander getrennt durch eine Leerzeile eingetragen.


    Wenn es nicht funktioniert einfach nochmal melden... Bin kein Programmierer sondern Anwender.
    Geändert von Acta (15.11.2011 um 09:03 Uhr)

  10. #10
    AG CMS-Garden
    Contao-Urgestein
    Avatar von lindesbs
    Registriert seit
    05.06.2009.
    Ort
    Oer-Erkenschwick
    Beiträge
    4.154
    Partner-ID
    keine
    User beschenken
    Wunschliste

    Standard

    @Acta, kannst Du diese Info auch ins Wiki schreiben ?
    das waer wirklich klasse !
    von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


    Contao-Hosting: begeisterter Uberspace-Nutzer

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

    Standard

    Achtung habe den PHP Code gerade nochmal abgeändert damit es auch zum Beispiel mit exampleCalculate passt.

    @lindesbs ich hab noch nie meinem Leben was ins Wiki eingetragen... d.h. ich hab kein Plan wo und wie.. Einen kleinen Link dazu dann kann ich heute Abend oder Morgen mal schauen.

  12. #12
    Contao-Nutzer
    Registriert seit
    13.11.2011.
    Beiträge
    29

    Standard

    @Acta:
    Wo ist der Unterschied zwischen deinen und meinem Code? Wir haben beide in der dcacofic den Hook registriert und wir haben beide in der efg die php datei mit der Klasse. Liegt es nur an der return-Meldung?

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

    Standard

    Ich kann dir nicht ganz folgen.

    Deine Version war doch:

    PHP-Code:
    class EfgCallbacks extends Backend
    {
        public function 
    exampleCalculate($arrSubmitted$intOldId, &$arrForm)
        {
              
    var_dump($arrSubmitted) ;
        }


    Oder verstehe ich dein Anliegen nicht richitg?

    Funktioniert die Sache denn nach meiner Anleitung?

  14. #14
    Contao-Nutzer
    Registriert seit
    13.11.2011.
    Beiträge
    29

    Standard

    Wie Du beschrieben hast, habe ich die den hook in der dcaconfic gespeichert. Danach habe ich eine php-Datei erstellt, die EfgCallbacks.php heißt. In dieser habe ich das oben gezeigte Klasse geschrieben. Zudem habe ich auch die Variation mit return ausprobiert. Leider wird der Hook nicht ausgeführt. Das habe ich daran gesehen, das Fehler, die ich in die Klasse gemacht habe (; vergessen) nicht bemängelt wurden. Und da liegt der Hund begraben. Ich weiß nicht, warum der hook nicht ausgeführt wird.

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

    Standard

    Hm.. warum hast du eine Datei mit dem Namen EFG Callbacks erstellt... die Datei sollte eigentlich in deinem Fall den Namen exampleCalculate.php tragen und diesen code hier als INhalt haben:

    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', 'exampleCalculate');
     
    class EfgCallbacks extends Backend
    {

        public function 
    exampleCalculate($arrSubmitted$arrFiles$intOldId, &$arrForm)
        {

    // Einschraenkung auf das Formular
            
    if ($arrSubmitted['FORM_SUBMIT'] == 'auto_form_3')
            {
                
     
    // Textzusammenfassen
          
        
    $arrSubmitted['text_1'] = $zftexteins ;
     
    $arrSubmitted['text_2'] = $zftextzwei ;
     
    $arrSubmitted['text'] = $zftexteins <br$zftextzwei ;

           
            }
                         
             return 
    $arrSubmitted;
            }
        }
    ?>
    DIE EFG Callback Datei gibts doch glaube ich beim EFG automatisch?

  16. #16
    Contao-Nutzer
    Registriert seit
    13.11.2011.
    Beiträge
    29

    Standard

    Wenn ich aber hiernach gehe (http://www.tl-usphpertreffen.weitzel...com/efg-6.html) muss die Datei aber efgcallbacks.php. heißen. hab auch exampleCalculate.php probiert. Ohne Erfolg.

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

    Standard

    Gut jetzt verstehe ich wie und was du meinst...


    Gut...

    dann hier nun die hoffentlich optimale Version:

    die Datei entsprechend Beispiel: EfgCallbacks.php nennen. Folgenden Inhalt hinterlegen:

    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', 'exampleCalculate');
     
    class EfgCallbacks extends Backend
    {

        public function 
    exampleCalculate($arrSubmitted$arrFiles$intOldId, &$arrForm)
        {

    // Einschraenkung auf das Formular
            
    if ($arrSubmitted['FORM_SUBMIT'] == 'auto_form_3')
            {
                
     
    // Textzusammenfassen
          
        
    $arrSubmitted['textPart1'] = $zftexteins ;
     
    $arrSubmitted['textPart2'] = $zftextzwei ;
     
    $arrSubmitted['text'] = $zftexteins $zftextzwei ;

           
            }
                         
             return 
    $arrSubmitted;
            }
        }
    ?>
    und zum schluss registrieren in der dcaconfig
    PHP-Code:
    $GLOBALS['TL_HOOKS']['processEfgFormData']['callback_01'] = array('EfgCallbacks''exampleCalculate'); 
    Das Code Beispiel bezieht sich natürlich auf die von Steffz gestellte Frage entsprechend der Erweiterung newsentrymore

    Wichtig ist das du die EfG Felder auch entsprechend benennst also. textPart1 und textPart2. denn sonst funktioniert das Speichern in die Datenbank ja nicht.
    Geändert von Acta (17.11.2011 um 08:50 Uhr)

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

    Standard

    Also ... nun doch...

    Es werden die Felder textPart1 und textPart2 angelegt. Das Modul erstellt aus beiden dann den Fulltext über folgende Funktion


    PHP-Code:
    {

        
    /**
         * Generate full text from part 1 & part 2.
         */
        
    public function generateText($arrRow,DataContainer $dc)
        {

            
    $text $dc->activeRecord->textPart1 "\n" $arrRow;
            
            
    $this->Database->prepare('UPDATE tl_news SET text = ? WHERE id = ?')
                ->
    execute($text,$dc->id);

            return 
    $arrRow;
        
        }

    Geändert von Acta (17.11.2011 um 08:35 Uhr)

  19. #19
    Contao-Nutzer
    Registriert seit
    13.11.2011.
    Beiträge
    29

    Standard

    Dein Beispiel funktioniert nicht. Ich will aber auch keine texte einfügen oder ändern, sondern nur Daten in eine zweite Tabelle speichern

    in der PHP-Datei EfgCallbacks.php habe ich folgende Klasse:

    PHP-Code:
    class EfgCallbacks extends Backend
    {
        public function 
    exampleCalculate($arrRow)
        {
         
    $stmt->prepare("INSERT INTO `table` (`firstname`, `lastname`, `email`) VALUES (?, ?, ?)");
        }


    Erstmal habe ich zu der Klasse 2 Fragen.
    1. Was sagt dieses extends Backend aus? gilt die Klasse nur für BE-Module?
    2. müssen in der sql Anweisung die 3 Fragezeichen stehen oder sollte ich jeden durch das Arrayfeld definieren. Also so $arrRow['vorname']


    Wie gesagt. Ich habe ein Formular, wo ich Name, Anrede, Email-Adresse und Passwort eingebe und wenn ich auf den Absende-Button klicke, werden die Daten in die Tabelle vers_rp_regstudents. Aber wie gesagt. Sie sollen zusätzlich in die tl_member

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
  •