Monday, January 27, 2014

Wie kann ich bei powermail 2.0 andere Templates/Layout/Partials verwenden? / Wie kann ich bei powermail 2.0 unterschiedliche Formulare unterschiedlich behandeln?

Zunaechst gibt es die Moeglichkeit per TypoScript den TemplatesRootPath etc. in TS-Setup zu veraendern:

plugin.tx_powermail {
    view {
        templateRootPath = {$plugin.tx_powermail.view.templateRootPath}
        partialRootPath = {$plugin.tx_powermail.view.partialRootPath}
        layoutRootPath = {$plugin.tx_powermail.view.layoutRootPath}
    }

}

Entsprechende TypoScript-Abfragen nach PIDInRootline, stdWrap.if, etc. nehmen die Unterscheidung vor.

Anschliessend koennen unter den neuen Pfaden die fluid-Templates separat bearbeitet werden.

Dies ist aber wenig elegant, da der komplette Satz an fluid-Templates kopiert, und in ggf. in wechselnden Verzeichnissen und Dateien bearbeitet werden muss.

Ein anderer, zunaechst umstaendlicherer, spaeter aber weit flexiblerer Weg, besteht darin ein TypoScript-Objekt zu erzeugen, und dieses dann direkt in den fluid-Templates abzufragen:

lib.powermail {
    # write back form-id from powermail hidden field to typoscript...
    formid = TEXT
    formid.data = GP:tx_powermail_pi1|form

    # some if's we need below:
    if_is_form_kontakt1 {
        value < lib.powermail.formid
        equals = {$uid.forms.kontaktform1}
    }
    if_is_form_kontakt2 {
        value < lib.powermail.formid
        equals = {$uid.forms.kontaktform2}
    }

    # ...then build some identifier from form-id and current language, for fluid-template selection:
    # (something like: main_kontakt2_de)
    fluidsectionidentifier = COA
    fluidsectionidentifier {
        # some prefix:
        100 = TEXT
        100.value = main

        # if... then... else... - a string for each type of form (compare if's above)
        200 = COA
        200 {
            1 = COA
            1 {
                if < lib.powermail.if_is_form_kontakt1
                10 = TEXT
                10.value = _kontakt1
            }
            2 = COA
            2 {
                if < lib.powermail.if_is_form_kontakt1
                if.negate = 1
                1 = COA
                1 {
                    if < lib.powermail.if_is_form_kontakt2
                    10 = TEXT
                    10.value = _kontakt2
                }
                2 = COA
                2 {
                    if < lib.powermail.if_is_form_kontakt2
                    if.negate = 1
                    10 = TEXT
                    10.value = _default
                }
                  10.value = _default
                }
            }
        }

        # ... add language suffix:
        500 = TEXT
        500.value = _
        600 = TEXT
        600.value < config.language
    }
}


Diese maechtige Konstruktion unterscheidet anhand der verschickten Formular-ID zwischen den Formularen "kontakt1" und "kontakt2" bzw. jedem anderen powermail-Formular ("default") auf der Website, und haengt das Kuerzel der eingestellten Frontend-Sprache an.

Das erzeugte Objekt kann nun im fluid-Template fuer Mails verwendet werden, um unterschiedliche fluid-Sections zu rendern:

in "Layouts/Mail.html":

<f:render section="{f:cObject(typoscriptObjectPath:'lib.powermail.fluidsectionidentifier')}" />

in "Templates/Mails/SenderMail.html" (z.b.):

<f:section name="main_default_de">
...
</f:section>
<f:section name="main_kontakt1_de">
...
</f:section>
<f:section name="main_kontakt2_de">
...
</f:section>



Frage:
Wie kann die Formular-ID in anderen fluid-Templates *VOR* dem Abschicken des Formulars ausgelesen und verwendet werden? Vgl. oben: Verwendung des GET-Parameters wohl nur *NACH* dem Verschicken moeglich.

Antwort:
In Templates/Forms/Form.html stehen die Formulardaten ({form.uid}, {form.css}, etc.) zur Verfuegung. Auch in anderen fluid-Templates (Partials?)

Frage:
Wie koennen die Formulardaten ({form.uid}, {form.css}, etc.) z.b. in
Templates/Mails/SenderMail.html verwendet werden? Vgl. oben, das waere eleganter als der GET-Parameter, man koennte z.b {form.css} verwenden


Friday, January 24, 2014

Wie gibt man ein Feld in der Standard-Sprache aus, waehrend die Seite in einer anderen Sprache angezeigt wird?


Hier ein Beispiel fuer den Titel der darueberliegenden Seite:

fuer TYPO3 v4.7 und hoeher (getestet mit v6.1):
 

10 = TEXT
10.data.orderedStdWrap {

    10.field = pid
    20.wrap = DB:pages:|:title
}



und evtl. auch in vorigen versionen von TYPO3 (nicht getestet, d.h. nur mit v6.1) :
 
10 = TEXT
10.data.stdWrap {

   cObject = TEXT
   cObject.field = pid
   cObject.wrap = DB:pages:|:title
}