Ergebnis 1 bis 9 von 9

Thema: Newsletter Formular erweitern

  1. #1
    Contao-Nutzer
    Registriert seit
    08.03.2010.
    Beiträge
    105

    Standard Newsletter Formular erweitern

    Hi!

    Ist mein erster Versuch etwas zu erweitern in TL, ausserhalb der Standardfuntionen.

    Möchte dem Newsletter abonnieren Formular einige Felder hinzufügen welche dann im Backend angezeigt und editierbar sind.

    Soweit bin ich:
    https://contao.org/eigene-felder-hin....html#database

    Datenbank-, DCA-Einträge, eigener Unterordner mit Struktur analog zum Standard Newsletter Modul unter system/modules.
    Dazu hab ich ein eigenes Formular (Formulargenerator) erstellt, welche die Daten in die DB-Tabelle tl_newsletter_recipients schreibt. Die Daten werden auch in die dafür vorgesehenen Tabellen geschrieben, jedoch nach Aufruf der Abonnenten Liste werden die Daten wieder gelöscht.
    Auch werden im TL-Backend die neuen Felder nicht angezeigt.

    Kenne auch schon diesen Beitrag:
    https://community.contao.org/de/show...lar-aktivieren

    Hier steht zb:
    Die function processFormData($arrPost, $arrForm, $arrFiles) wird ausgeführt.
    Wo müsste ich das hinein schreiben um es zu starten bzw. ist das notwendig?

    Bitte um Info oder einen Ansatz was noch fehlt. Muss ich die Felder noch irgenwo eintragen?

    Danke!

    cheche
    Geändert von cheche (04.05.2010 um 08:01 Uhr)

  2. #2
    Contao-Nutzer
    Registriert seit
    08.03.2010.
    Beiträge
    105

    Standard

    Aha, keiner sagt was ... wie darf ich das werten???
    Könnte mir bitte irgendwer kurz feedback geben ob ich auf dem Holzweg bin oder die Frage einfach zu banal ist oder einfach noch Schritte fehlen? Könnte es ein lokales Problem sein?

    Wäre sehr dankbar!!!

    Lg
    Cheche

  3. #3
    Contao-Nutzer
    Registriert seit
    21.01.2010.
    Ort
    Luzern, Schweiz
    Beiträge
    16

    Standard

    Guten Abend,
    Bin seit heute Abend auch an einer Newsletter-Erweiterung mit dem selben Ziel wie Du
    Könntest Du vielleicht mal ein wenig mehr Infos zu Deinem Code geben?

    //Edit: Sind die "recipients" bereits aktiviert bevor sie gelöscht werden?
    Grüsse,
    Produktivzone

  4. #4
    Contao-Nutzer
    Registriert seit
    08.03.2010.
    Beiträge
    105

    Standard

    Nein die Abonnenten bekommen keine Mail und sind noch nicht aktiviert. Wie gesagt nur kurz sichtbar in der DB. Dann nachdem man die Abonnentenliste aufruft im Backend werden die neuen Daten entfernt.

    Hier für alle Fälle mal meine Schritte:

    1. Ordner erstellen unter system/modules (Benennung bei mir: "newsletter-Felderweiterung")
    2. Unterodner "config", "dca" und "language" erstellen
    3. Folgende Dateien aus dem standard Newsletter-Modul kopiert:
    system/modules/newsletter-Felderweiterung/config/database.sql
    system/modules/newsletter-Felderweiterung/config/config.php
    system/modules/newsletter-Felderweiterung/dca/tl_newsletter_recipients.php
    system/modules/newsletter-Felderweiterung/languages/de/tl_newsletter_recipients.php
    4. Formular erstellen

    Und hier der Code der einzelnen Dateien:
    database.sql
    Code:
    -- --------------------------------------------------------
    
    -- 
    -- Table `tl_newsletter_recipients`
    -- 
    
    CREATE TABLE `tl_newsletter_recipients` (
      `channels` varchar(128) NOT NULL default '',
      `anrede` varchar(128) NOT NULL default '',
      `name` varchar(128) NOT NULL default '',
      `vorname` varchar(128) NOT NULL default '',
      `adresse` varchar(128) NOT NULL default '',
      `plz` varchar(128) NOT NULL default '',
      `ort` varchar(128) NOT NULL default '',
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    
    
    -- --------------------------------------------------------

    config.php
    PHP-Code:
    /**
     * Back end modules
     */
    array_insert($GLOBALS['BE_MOD']['content'], 4, array
    (
        
    'newsletter' => array
        (
            
    'tables'     => array('tl_newsletter_channel''tl_newsletter''tl_newsletter_recipients'),
            
    'send'       => array('Newsletter''send'),
            
    'import'     => array('Newsletter''importRecipients'),
            
    'icon'       => 'system/modules/newsletter/html/icon.gif',
            
    'stylesheet' => 'system/modules/newsletter/html/style.css'
        
    )
    ));


    /**
     * Front end modules
     */
    array_insert($GLOBALS['FE_MOD'], 4, array
    (
        
    'newsletter' => array
        (
            
    'subscribe'   => 'ModuleSubscribe',
            
    'unsubscribe' => 'ModuleUnsubscribe',
            
    'nl_list'     => 'ModuleNewsletterList',
            
    'nl_reader'   => 'ModuleNewsletterReader'
        
    )
    ));


    /**
     * Register hooks
     */
    $GLOBALS['TL_HOOKS']['createNewUser'][] = array('Newsletter''createNewUser');
    $GLOBALS['TL_HOOKS']['activateAccount'][] = array('Newsletter''activateAccount');
    $GLOBALS['TL_HOOKS']['getSearchablePages'][] = array('Newsletter''getSearchablePages'); 

    tl_newsletter_recipients.php
    PHP-Code:
    /**
     * Extend default palette
     */
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['palettes']['default'] = str_replace
    (
        
    'contact',
        
    'contact,anrede',
        
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['palettes']['default']
    );
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['palettes']['default'] = str_replace
    (
        
    'contact',
        
    'contact,name',
        
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['palettes']['default']
    );
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['palettes']['default'] = str_replace
    (
        
    'contact',
        
    'contact,vorname',
        
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['palettes']['default']
    );
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['palettes']['default'] = str_replace
    (
        
    'contact',
        
    'contact,adresse',
        
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['palettes']['default']
    );
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['palettes']['default'] = str_replace
    (
        
    'contact',
        
    'contact,plz',
        
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['palettes']['default']
    );
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['palettes']['default'] = str_replace
    (
        
    'contact',
        
    'contact,ort',
        
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['palettes']['default']
    );


    /**
     * Add field to tl_newsletter_recipients
     */
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['fields']['anrede'] = array
    (
        
    'label'     => &$GLOBALS['TL_LANG']['tl_newsletter_recipients']['anrede'],
        
    'exclude'   => true,
        
    'inputType' => 'text',
        
    'eval'      => array('mandatory'=>true'rgxp'=>'digit''maxlength'=>8'tl_class'=>'w50')
    );
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['fields']['name'] = array
    (
        
    'label'     => &$GLOBALS['TL_LANG']['tl_newsletter_recipients']['name'],
        
    'exclude'   => true,
        
    'inputType' => 'text',
        
    'eval'      => array('mandatory'=>true'rgxp'=>'digit''maxlength'=>8'tl_class'=>'w50')
    );
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['fields']['vorname'] = array
    (
        
    'label'     => &$GLOBALS['TL_LANG']['tl_newsletter_recipients']['vorname'],
        
    'exclude'   => true,
        
    'inputType' => 'text',
        
    'eval'      => array('mandatory'=>true'rgxp'=>'digit''maxlength'=>8'tl_class'=>'w50')
    );
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['fields']['adresse'] = array
    (
        
    'label'     => &$GLOBALS['TL_LANG']['tl_newsletter_recipients']['adresse'],
        
    'exclude'   => true,
        
    'inputType' => 'text',
        
    'eval'      => array('mandatory'=>true'rgxp'=>'digit''maxlength'=>8'tl_class'=>'w50')
    );
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['fields']['plz'] = array
    (
        
    'label'     => &$GLOBALS['TL_LANG']['tl_newsletter_recipients']['plz'],
        
    'exclude'   => true,
        
    'inputType' => 'text',
        
    'eval'      => array('mandatory'=>true'rgxp'=>'digit''maxlength'=>8'tl_class'=>'w50')
    );
    $GLOBALS['TL_DCA']['tl_newsletter_recipients']['fields']['ort'] = array
    (
        
    'label'     => &$GLOBALS['TL_LANG']['tl_newsletter_recipients']['ort'],
        
    'exclude'   => true,
        
    'inputType' => 'text',
        
    'eval'      => array('mandatory'=>true'rgxp'=>'digit''maxlength'=>8'tl_class'=>'w50')
    ); 


    Die Sprachdatei ist nicht so wichtig denke ich.


    Hier noch mein Formular:
    HTML-Code:
    <form action="newsletter-abonnieren.html" id="f1" method="post" enctype="application/x-www-form-urlencoded">
    <div class="formbody">
    <input type="hidden" name="FORM_SUBMIT" value="auto_form_1" />
    <input type="hidden" name="MAX_FILE_SIZE" value="2048000" />
    <input type="hidden" name="channels" value="1" /> 
       
      <div id="ctrl_1" class="radio_container"><span><input type="radio" name="anrede" id="opt_1_0" class="radio" value="f" /> <label id="lbl_1_0" for="opt_1_0">Frau</label></span><span><input type="radio" name="anrede" id="opt_1_1" class="radio" value="h" /> <label id="lbl_1_1" for="opt_1_1">Herr</label></span></div><br />
      <label for="ctrl_2" class="mandatory"><span class="invisible">Pflichtfeld</span> E-Mail<span class="mandatory">*</span></label> 
      <textarea name="email" id="ctrl_2" class="textarea mandatory" rows="1" cols="1"></textarea><br />
    
      <label for="ctrl_3" class="mandatory"><span class="invisible">Pflichtfeld</span> Name<span class="mandatory">*</span></label> 
      <input type="text" name="name" id="ctrl_3" class="text mandatory" value="" /><br />
      <label for="ctrl_5" class="mandatory"><span class="invisible">Pflichtfeld</span> Vorname<span class="mandatory">*</span></label> 
      <input type="text" name="vorname" id="ctrl_5" class="text mandatory" value="" /><br />
      <label for="ctrl_6">Straße + Hausnummer</label> 
      <input type="text" name="adresse" id="ctrl_6" class="text" value="" /><br />
    
      <label for="ctrl_7">PLZ</label> 
      <input type="text" name="plz" id="ctrl_7" class="text" value="" /><br />
      <label for="ctrl_8">Ort</label> 
      <input type="text" name="ort" id="ctrl_8" class="text" value="" /><br />
      <div class="row_7 odd explanation">
        <p>Ja, ich möchte den Newsletter per mail zugesendet bekommen.</p> 
      </div>
      <div class="submit_container">
        <input type="submit" id="ctrl_11" class="submit" value="Newsletter bestellen" /> 
      </div>
    
    </div>
    </form>
    Ich hoffe du kannst damit etwas anfangen. Vielleicht lösen wir das Problem ja gemeinsam ;-).

    gruß
    cheche

  5. #5
    Contao-Nutzer
    Registriert seit
    21.01.2010.
    Ort
    Luzern, Schweiz
    Beiträge
    16

    Standard

    Die Datei "Newsletter.php" muss auch angepasst werden. Ich frage mich, wie man die Importier-Funktion am besten erweitern könnte. Das ganze ist wirklich "hardcoded"..
    Grüsse,
    Produktivzone

  6. #6
    Contao-Nutzer
    Registriert seit
    08.03.2010.
    Beiträge
    105

    Standard

    ok danke!
    Das heisst du hast dein Formular schon erweitert, es funktioniert das abonnieren und die Daten sind im BE sichtbar und editierbar!?

    Kannst du mir vielleicht sagen wo oder was genau noch fehlt in der newsletter.php.

    danke!
    cheche

  7. #7
    Contao-Nutzer
    Registriert seit
    21.01.2010.
    Ort
    Luzern, Schweiz
    Beiträge
    16

    Standard

    Habe es noch nicht zum Laufen gekriegt. Bei mir motzt er im BE, wenn ich einen neuen Recipient anlegen will, dass eine SQL-Syntax nicht stimmt Da das Projekt bald online sein muss, habe ich mich jetzt für eine externe Newsletter-Lösung entschieden...

    Ich bleibe an diesem Problem dran und gebe weitere Infos, wenn's dann klappt.
    Grüsse,
    Produktivzone

  8. #8
    Contao-Nutzer
    Registriert seit
    08.03.2010.
    Beiträge
    105

    Standard

    Hab das Formulare jetzt erweitert, auch wenn ich es nicht ganz Updatesicher hinbekommen hab, funtioniert jetzt fast alles wie gewünscht. ;-)

    Eine kleine aber wichtige Sache quält mich noch: Da ich es nicht mit einem generierten Formular gemacht hab sondern ein eigenes Formular-template erstellt hab müsste ich mich der Validierung herumschlagen. Soweit ok, aber werden in die Formular-Textfelder Umlaute wie ü, ö oder ä eingegeben, werden komische Zeichen in die Datenbank gespeichert.
    Meine (sehr lange) Suche hat mich vorbei an der utf8 Kodierung an diesen Ort gebracht:

    ModuleSubscribe.php:
    PHP-Code:
    // Add new subscriptions
            
    $this->Database->prepare("INSERT INTO tl_newsletter_recipients (pid, tstamp, email, anrede, name, vorname, adresse, plz, ort, active, addedOn, ip, token) VALUES " implode(', '$arrCondition))   ->execute($arrValues); 
    Dort hab ich die neuen Felder eingetragen, jedoch kommen in der Datenbank zb. diese Zeichen an: "xn--4ca0bs"

    Kann mir bitte jemand helfen dabei, wie ich Umlaute richtig in die Datenbank schreiben kann.

  9. #9
    Contao-Nutzer
    Registriert seit
    08.03.2010.
    Beiträge
    105

    Standard

    haahhh! Hab es soeben gelöst, zuerst Stunden probieren, dann doch ins Forum posten - mehr oder weniger aus Verzweiflung ;-) - und auf einmal machts KLICK :-)

    "specialchars" hat hier gefehlt:

    PHP-Code:
    $varInput3 specialchars($this->Input->post('name'true)); 
    ciao
    cheche

Aktive Benutzer

Aktive Benutzer

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

Ähnliche Themen

  1. Formular select-menü erweitern
    Von internaix im Forum Formulare
    Antworten: 1
    Letzter Beitrag: 15.01.2011, 18:17
  2. Antworten: 0
    Letzter Beitrag: 20.07.2010, 00:29
  3. Newsletter Modul erweitern - Platzhalter in E-Mail
    Von hjansen im Forum Entwickler-Fragen
    Antworten: 2
    Letzter Beitrag: 04.05.2010, 13:25
  4. Newsletter um Feld erweitern
    Von tdoescher im Forum Newsletter
    Antworten: 0
    Letzter Beitrag: 06.10.2009, 09:14
  5. BE Formular erweitern und Wert auslesen?
    Von juju im Forum Sonstiges zu Contao
    Antworten: 6
    Letzter Beitrag: 03.09.2009, 14:46

Lesezeichen

Lesezeichen

Berechtigungen

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