TYPO3 - Powermail

Aus Wikizone
Wechseln zu: Navigation, Suche

Powermail Extension


Snippets

E-Mail Empfänger abhängig von Feldwerten

Quellen

http://blog.marmalade.de/2010/06/powermail-e-mailempfanger-mit-case-unterscheidung-uber-typoscript-zuweisen/ (3/2012)

http://typo3blogger.de/powermail-empfanger-im-frontend-wahlen/ (3/2012) Verschiedene Möglichkeiten:

  • Direkt (schlecht)
  • Über dynamisches TypoScript
  • Angepasste Datenbankabfrage

Direkt

Im Empfänger Feld kann man direkt einen Feldmarker angeben z.B.: ###UID234###, dann wird direkt der Wert des Feldes benutzt. Schlecht, weil einfach zu manipulieren (potentielle Spamschleuder)

E-Mail über dynamisches TypoScript

TS

// Case Objekt das den Wert eines Powermail Feldes auswertet. 
emailan = CASE
emailan {
    ### Unterschiedung anhand Feld mit der UID 34 (Form hat id 25)
    key.data = TSFE:fe_user|sesData|powermail_25|uid34
    ### Standardwert
    default = TEXT
    default.value = info@indihar.de
    ### Wert bei Auswahl "empf2"
    empf2 = TEXT
    empf2.value = schlegel@geo-bit.de
}

// neuen dynamischen Powermailmarker (###POWERMAIL_TYPOSCRIPT_EMPFAENGER###)
// dieser kann im Formular im Empfängerfeld eingetragen werden.
plugin.tx_powermail_pi1.dynamicTyposcript {
    empfaenger < emailan
}

Angepasste Datenbankabfrage

http://typo3blogger.de/powermail-empfanger-im-frontend-wahlen/

http://www.typo3.net/forum/list/list_post//76461/?howto=1&page=1

http://typo3.org/documentation/document-library/extension-manuals/powermail/1.4.15/view/1/11/#id4334579

Die Extension Powermail bietet eine komfortable Möglichkeit Formulare zusammenzuklicken – übrigens auch für Redakteure. Selbstverständlich ist Skalierbarkeit und Flexibilität ein großes Thema. So ist es auch einfach möglich, den Empfänger im Frontend auszuwählen.

Im Netz gibt es schon ein paar Erklärungen zu diesem Thema, aber ich möchte es dennoch noch einmal aufgreifen, da ich oft auf Empfängerwahl angesprochen werde.

Mail-Adressen direkt in der Select Box Technisch wäre es natürlich kein Problem eine Selectbox mit E-Mail Adressen im Frontend anzeigen zu lassen und im Flexform im Empfängerfeld dieses Feld durch einen Marker wieder aufzugreifen (z.B. ###UID234###). Der Nachteil liegt aber auf der Hand: - Mail Adressen können im Frontend aus dem Quelltext ausgelesen werden - Mail Adressen können einfach manipuliert werden (im schlimmsten Fall stellt ihr so eine Spamschleuder ins Netz) Diese Methode ist also allenfalls im Intranet nutzbar.

Umweg über Datenbank-UID Eine andere Idee ist es, Datankbankeinträge (z.B. tt_address oder fe_user) mit E-Mail Adressen vorzunehmen und in einer (z.B.) Selectbox die UID des Datensatzes wieder aufzugreifen. Beispiel Eintrag im Flexform In diesem Beispiel hat man die Wahl zwischen UID 1 und 2. Verwendeter Marker ist ###UID42###. SQL Query Beispiel Damit Powermail den Umweg über die Datenbank geht, bietet sich der Einsatz des Feldes “Alternative SQL-Query” an.

Weitere Infos Natürlich kann man auch an ganze Usergroups schicken:

SELECT email FROM fe_users WHERE find_in_set(###UID43###,usergroup) > 0 AND hidden = 0 AND deleted = 0

Beispiel mit fester Usergroup UID44:

SELECT email FROM fe_users WHERE find_in_set(44,usergroup) > 0 AND hidden = 0 AND deleted = 0

Hier ein Beispiel mit Checkboxen (mehrere Empfänger auswählen):

SELECT email FROM fe_users WHERE uid IN(###UID43###)

Eine ganz andere Möglichkeit ist der Einsatz von Dynamictyposcript im Empfängerfeld – auch hier lassen sich einige Anforderungen flexibel umsetzen. Dynamictyposcript in Powermail

Formular in Datenbank speichern

plugin.tx_powermail_pi1{
    dbEntry {

        # Speicherung für Tabelle ermöglichen
        tt_address._enable = TEXT
        tt_address._enable.value = 1

        #  "tt_address.name" mit dem Wert des Powermail felds ausfüllen
        tt_content uid 88, field uid18 (###uid18###)
        tt_address.name = TEXT
        tt_address.name.data = TSFE:fe_user|sesData|powermail_88|uid18

    }
}

Ausführliches Beispiel

Constants

plugin.powermail.js.alwaysInclude = 1
plugin.powermail.js.includeJquery = 0
plugin.powermail.js.includeJqueryTools = 0
plugin.powermail.js.includeJqueryToolsTabs = 0
plugin.powermail.allow.email2sender = 0
plugin.powermail.PID.dblog = 0
plugin.powermail.markerALL.hideLabel = 1
plugin.powermail.format.datetime = %d.%m.%Y% %H:%M
plugin.powermail.format.date = %d.%m.%Y
plugin.powermail.debug.output = 

Setup

// CSS Pfad ändern (oder gar nicht erst statisch einbinden ;-)  )
page.includeCSS.powermail_frontend_basic = fileadmin/templates/onlineboerse/powermail.css

Datenbank Speicherung mit verschiedenen Optionen

Setup

// Powermail DB Storage
// Extra userfunc to convert date to unix timestamp
includeLibs.powermailTimestamp = fileadmin/templates/scripts/user_powermailTimestamp.php

plugin.tx_powermail_pi1.dbEntry{  
  tx_gbbulletin_bulletin {

    _enable = TEXT
    _enable.value = 1
     
    hidden = TEXT
    hidden.value = 1
     
    pid = TEXT
    pid.value = 102
        
    tstamp = TEXT
    tstamp.data = date:U
         
    crdate = TEXT
    crdate.data = date:U

    title = TEXT
    title.data = TSFE:fe_user|sesData|powermail_214|uid1

    author = TEXT
    author.data = TSFE:fe_user|sesData|powermail_214|uid2

    place = TEXT
    place.data = TSFE:fe_user|sesData|powermail_214|uid3
    
    description = TEXT
    description.data = TSFE:fe_user|sesData|powermail_214|uid4

    contact = TEXT
    contact.data = TSFE:fe_user|sesData|powermail_214|uid5

    qualification = TEXT
    qualification.data = TSFE:fe_user|sesData|powermail_214|uid6
    
    date = USER
    date.userFunc = user_powermailTimestamp->preflight
    date.userFunc.field = uid7
    date.userFunc.formuid = 214
    
    period = TEXT
    period.data = TSFE:fe_user|sesData|powermail_214|uid29

    end_date = USER
    end_date.userFunc = user_powermailTimestamp->preflight
    end_date.userFunc.field = uid14
    end_date.userFunc.formuid = 214
    
    url = TEXT
    url.data = TSFE:fe_user|sesData|powermail_214|uid8

    text1 = TEXT
    text1.data = TSFE:fe_user|sesData|powermail_214|uid9
    
    cluster = TEXT
    cluster.data = TSFE:fe_user|sesData|powermail_214|uid11
    
    # add mm relation to uid 2 of tx_gbbulletin_cluster (via mm table)
    _mm = COA
    _mm.10 = COA
    # 1 is always the mm table
    _mm.10.1 = TEXT
    _mm.10.1.value = tx_gbbulletin_cluster_mm
    # 2 is always the other table
    _mm.10.2 = TEXT
    _mm.10.2.value = tx_gbbulletin_cluster
    # 3 is always the uid of the other table to get a relation to this
    # (in this case uid1 of tx_gbbulletin_cluster)
    _mm.10.3 = TEXT
    _mm.10.3.value = 1
    
    tag = TEXT
    tag.data = TSFE:fe_user|sesData|powermail_214|uid12

  }

}

Userfunktion zum umwandeln von Datum in Timestamp

Diese Funktion wird im obigen Beispiel zu Datenbankspeicherung verwendet

<?php 

    class user_powermailTimestamp { 
     
     
        // Function preflight() will be used from typoscript 
        function preflight($content='', $conf=array()) { 
            $value = $GLOBALS['TSFE']->fe_user->sesData['powermail_'.$conf['userFunc.']['formuid']][$conf['userFunc.']['field']]; 
            return $this->getDate($value); 
        } 
         
         
        // Main getDate() changes a date in any format to an unix timestamp 
        function getDate($string, $default = 'now', $timestamp = 1) { 
            $error = 0; // no error at the beginning 
            $string = str_replace(array('-', '_', ':', '+', ',', ' '), '.', $string); // change 23-12-2009 -> 23.12.2009 AND "05:00 23.01.2009" -> 05.00.23.01.2009 
            if (method_exists('t3lib_div', 'trimExplode')) $dateParts = t3lib_div::trimExplode('.', $string, 1); else $dateParts = explode('.', $string); // split at . 
         
            if (count($dateParts) === 3) { // only if there are three parts like "23.12.2009" 
                if (strlen($dateParts[0]) <= 2 && strlen($dateParts[1]) <= 2 && strlen($dateParts[2]) <= 2) { // xx.xx.xx 
                    $string = strtotime($dateParts[2].'-'.$dateParts[1].'-'.$dateParts[0]); // change to timestamp 
                } 
                elseif (strlen($dateParts[0]) == 4 && strlen($dateParts[1]) <= 2 && strlen($dateParts[2]) <= 2) { // xxxx.xx.xx 
                    $string = strtotime($dateParts[0].'-'.$dateParts[1].'-'.$dateParts[2]); // change to timestamp 
                } 
                elseif (strlen($dateParts[0]) <= 2 && strlen($dateParts[1]) <= 2 && strlen($dateParts[2]) == 4) { // xx.xx.xxxx 
                    $string = strtotime($dateParts[2].'-'.$dateParts[1].'-'.$dateParts[0]); // change to timestamp 
                } 
                else { // error 
                    $error = 1; // error 
                } 
            } elseif (count($dateParts) === 5) { // only if there are five parts like "05.00.23.01.2009" 
                $string = strtotime($dateParts[4].'-'.$dateParts[3].'-'.$dateParts[2].' '.$dateParts[0].':'.$dateParts[1].':00'); // change to timestamp 
            } else { // more than 3 parts - so error 
                $error = 1; // error 
            } 
            $string = date('Y-m-d', $string); // For default: change 1234567 -> 1.1.1979 
            if ($timestamp) $string = strtotime($string); // Change back 1.1.1979 -> 1234567 
            if ($error) $string = ($default == 'now' ? time() : $default); // show default value 
         
            return $string; 
        } 
    } 

?>

Dropdownfeld mit Werten aus der Datenbank

Quelle: http://www.typo3.net/forum/thematik/zeige/thema/77259/?show=1 Zugriff: 2013-10

1. Neues Powermail Feld anlegen (typoscript) mit lib.object:


2. Eine Selectabfrage in TS (Hole name, uid von tt_address der Seite 5):

TS

lib.object {
  10 = TEXT
  10.value = <label for="uid33">Select:</label>
  20 = CONTENT
  20.wrap = <select id="uid33" name="tx_powermail_pi1[uid33]" size="1">|</select>
  20 {
    table = tt_address
    select {
      pidInList = 5
      orderBy = name
    }
    renderObj = COA
    renderObj {
      10 = COA
      10 {
        10 = TEXT
        10 {
          field = uid
          wrap = <option value="|">
        }
        20 = TEXT
        20 {
          field = name
          wrap = |</option>
        }
      }
    }
  }
}


Ergebnis:

Dynamische Selecterbox, mit dem HTML Code:

<label for="uid33">Select:</label>
<select id="uid33" name="tx_powermail_pi1[uid33]" size="1">
<option value="23">Name1</option>
<option value="24">Name2</option>
</select>