Standard-Mailform

Minimales Setup für Standard-Mailformular sollte mitbringen:

  • Reply-To an Websitebesucher
  • fester From-Name…
  • …und From-Email (sonst ggf. falsch automatisiert ermittelt)

Konfiguration könnte somit etwa aussehen wie folgt:

 Name | *replyto_name=input
 E-Mail | *replyto_email=input
 Nachricht | *Nachricht=textarea
 
 | from_name=hidden | example.com
 | from_email=hidden | info@example.com
 | formtype_mail=submit | Absenden
 | html_enabled=hidden
 | subject=hidden | example.com Mailformular

Mit getText in generischen Markern auf tt_content zugreifen

Heute benötigte ich innerhalb eines generischen Markers von tt_news Zugriff auf das Content-Element, in dem die Meldung angezeigt wird (also die Plugin-Einbindung). Warum man sowas braucht? Naja, Projekte entwickeln sich manchmal kreativ… 😉

Generische Marker werden im Zuge des Renderings der einzelnen Newsmeldungen ausgewertet, d.h. der Zugriff über field etc. ist jeweils auf den tt_news-Datensatz, nicht auf das Inhaltselement. Der Datensatz selbst hat auch keine Verknüpfung zum Inhaltselement. 🙁

Die Kollegen der marit.ag haben vor Längerem den Artikel „Datenbankfelder dynamisch per stdWrap.data auslesen“ verfasst. Damit ließe sich (via „getText“) auf beliebige Datensätze dynamisch zugreifen wie folgt:

genericmarkers {
        ceheader >
        ceheader = TEXT
        ceheader {
            // @see http://blog.marit.ag/2009/12/15/datenbankfelder-stdwrap-data/
            dataWrap = DB:tt_content:{field:pid}:header
            wrap3 = {|}
            insertData=1
        }
}

Es bleibt aber die Problematik, dass wir die uid des tt_content-Datensatzes dennoch nicht kennen. Hilfe bringt aber der Inhalt von TSFE: dort gibt es einen Wert currentRecord:

This is set to the [table]:[uid] of the record delivered in the $data-array

Somit lässt sich der Ansatz erweitern, indem im dataWrap der Teilstring „[table]:[uid]“ dynamisch ersetzt wird:

genericmarkers {
        ceheader >
        ceheader = TEXT
        ceheader {
            // @see http://blog.marit.ag/2009/12/15/datenbankfelder-stdwrap-data/
            //dataWrap = DB:tt_content:{cObj:TSFE:parentRecordNumber}:header
            // {TSFE:currentRecord} liefert etwas in der Art "tt_content:1234"
            dataWrap = DB:{TSFE:currentRecord}:header
            wrap3 = {|}
            insertData=1
        }
}

Quellen

Imagesize und Crop abhängig von der colPos

Um Bilder nicht nur eine feste Breite in Abhängigkeit von der colPos zuzuweisen, sondern auch noch zu croppen, bentötigt man folgendes Snippet:

temp.tt_content.image < tt_content.image
tt_content.image = CASE
tt_content.image {
  key.field=colPos

  0 < temp.tt_content.image
  1 < temp.tt_content.image
  2 < temp.tt_content.image  

  1.20.1.file.width >
  1.20.1.file.height >
  1.20.1.file {
    width = 698c
    height = 400c
  }

  2.20.1.file.width >
  2.20.1.file.height >
  2.20.1.file {
    width = 200c
    height= 150c
  }
}

TypoLinks auch in HTML-Elementen parsen

Um Links in HTML-Elementen zu parsen benötigt man folgende Zeilen im setup:

# Syntax:
# ausgelassene Parameter können hinten weggelassen oder durch "-" freigehalten werden
# <link PID/URL/Mail TARGET/WIDTHxHEIGHT CLASS "TITLE">LINKTEXT</link>
#
# Beispiele:
# <link 2>Zur Seite</link>
# <link 7 - a-link "zur Information">hier</link>
# <link http://www.google.de 300x400 myPopup-class "in neuem Fenster">Google</link>
# <link info@abc.de - myMail "E-Mail senden">Kontakt</link>
#
tt_content.html.parseFunc.tags.link < lib.parseFunc.tags.link

Das target kann dann noch über das setup folgendermaßen ändern:

tt_content.html.parseFunc.tags.link.typolink {
    extTarget >
    extTarget = _self
    target >
    target = _self
}

Hintergrundbild und Fallback auf Defaultsprache

Auf welche Weise die Sprachbehandlung und Fallbacks erfolgen sollen bzw. ob die Regelung auch für Bilder greifen soll, ist von Projekt zu Projekt verschieden.

Eine öfters anzutreffende Variante ist: Falls kein Bild in der Übersetzung der Seite vorhanden ist (pages_overlay), nimm das aus der Default-Sprache, falls dort auch keines ist, dann schau in der Rootline nach oben bis eines gefunden wird.

 

// 1. Idealerweise das Bild aus dem media-Feld der Sprache nehmen (override)
// 2. Falls leer, dann das aus der Default-Sprache (override.ifEmpty)
// 3. Falls da auch nix drin steht, dann levelmedia bis Root hochgucken
 
temp.dynamicImage = IMG_RESOURCE
temp.dynamicImage {
    file.import = uploads/media/
    file.import.data = levelmedia: -1,slide
    file.import.override.listNum = 0
    file.import.override.field = media
    file.import.override.ifEmpty.cObject = TEXT
    file.import.override.ifEmpty.cObject {
        data.dataWrap = DB:pages:{field:uid}:media
        insertData = 1
        if.isTrue.data = TSFE:sys_language_uid
    }
}