[Frage] Powermail: Verschiedene HTML-Templates pro Plugin TYPO3-Version: 4.7.12


  • 1
  • jenses jenses
    Flash Gordon
    0 x
    3087 Beiträge
    106 Hilfreiche Beiträge
    05. 03. 2014, 08:48

    Wenn sich die Formulare jeweils auf verschiedenen Seiten befinden,
    machst du es wie im stackoverflow-Artikel beschrieben (das ist TYPO3-Grundwissen und -standardverfahren).

    Hast du zwei Powermailplugins auf einer Seite, wird es schwierig.
    Bei tt_news kann man direkt im Plugin-Flexform Typoscript einfügen, bei Powermail gibt es so etwas nicht.
    Du könntest dir mit einer TS-Condition userfunc behelfen, die beispielweise die Uid des ContentElements abfragt und davon abhängig TRUE oder FALSE zurückgibt.
    Dann schaltest du mit Hilfe dieser Conditions das/die Templates um.

  • spL spL
    Jedi-Meister
    0 x
    345 Beiträge
    3 Hilfreiche Beiträge
    05. 03. 2014, 10:37

    Vielen Dank schonmal.

    Wenn ich es richtig verstehe würde diese Condition dann quasi greifen wenn das CE mit der uid=xy gefunden wird. Also ist uid=xy verwende Template A, ansonsten B.
    Ich habe das mal ganz simpel zum Verständnis ausprobiert:

    1. function user_checkPowermailUid() {
    2. #$content_uid = $this->cObj->data['uid'];
    3. $content_uid = 46;
    4. if($content_uid == 46){
    5. return true;
    6. }
    7. }

    1. [userFunc = user_checkPowermailUid()]
    2. plugin.tx_powermail.view ...
    3. [end]

    Das würde mir auf der ganzen Seite Template A ausgeben, ich brauche Template A jedoch nur in diesem einen speziellen CE/LIST/PLUGIN.
    Müsste ich da nicht bei der Einbindung des Plugins bereits irgendwie eingreifen?
    Bisher:
    1. # Include form
    2. 20 = RECORDS
    3. 20{
    4. tables = tt_content
    5. source = 46
    6. }

  • jenses jenses
    Flash Gordon
    0 x
    3087 Beiträge
    106 Hilfreiche Beiträge
    06. 03. 2014, 10:07

    1. function user_checkPowermailUid($uid) {
    2. $content_uid = $this->cObj->data['uid'];
    3. if($content_uid == $uid){
    4. return true;
    5. }
    6. }

    1. [userFunc = user_checkPowermailUid(123)]
    2. plugin.tx_powermail.view ... --> Template A
    3.  
    4. [userFunc = user_checkPowermailUid(456)]
    5. plugin.tx_powermail.view ... --> Template B
    6.  
    7. [global]

  • spL spL
    Jedi-Meister
    0 x
    345 Beiträge
    3 Hilfreiche Beiträge
    06. 03. 2014, 12:53

    Vielen Dank- Den Code hatte ich ja bereits. Der taugt leider aber nichts in der localconf.php da dort mit $this->cObj->data['uid']; nichts anzufangen ist.
    Mir fehlt an der Stelle auch hauptsächlich das Verständnis wie das überhaupt funktionieren soll.
    Angenommen die Funktion function user_checkPowermailUid($uid) würde in der Form laufen. Was sollte denn heraus kommen wenn ich auf meiner Seite mit den beiden Formualren bin.
    Dort würden dann ja zwei Conditions greifen weil sowohl Formular X als auch Formular Y vorhanden ist.

    Ich gebe den Ansatz auf und halte fest; Powermail ist in Sachen HTML-Template-Zuweisung leider unbrauchbar.
    Man stelle sich vor ich habe eine Seite mit 3 unterschiedlichen Forumlaren, hier müsste ich entweder im PageTS der jeweiligen Formular-Seite oder über eine TSFE_ID Conditon ein Template zuweisen. Das Plugin bietet einfach keine Möglichkeit verschiedene Templates zu verwalten. Möglich ist nur eine Zuweisung unterschiedlicher CSS-Dateien basierend auf dem identischen HTML-Code.

    Mein spezieller Fall in dem auf der gesamten Seite ein Formular immer zu sehen ist und auf Unterseiten mit weiteren Formularen eben zwei Formulare auf einer Seite angzeigt werden ist nur mit ein und dem selben HTML zu realisieren -> unflexibel, unbrauchbar.

  • jenses jenses
    Flash Gordon
    0 x
    3087 Beiträge
    106 Hilfreiche Beiträge
    07. 03. 2014, 09:34

    Zitiert von: spL
    Vielen Dank- Den Code hatte ich ja bereits. Der taugt leider aber nichts in der localconf.php da dort mit $this->cObj->data['uid']; nichts anzufangen ist.

    $this->cObj->data['uid']; habe ich von dir so übernommmen, ich überprüfe nicht jede Zeile Code in irgendwelchen Snippets auf Tauglichkeit (jedenfalls nicht unbezahlt in meiner Freizeit).

    Ein bißchen TYPO3-API-Kenntnis sollte man schon haben, wenn man sich an so etwas herantraut.
    Letzendlich wird deiner userfunc eine uid übergeben,
    du brauchst also im einfachsten Fall nur eine SQL-Query absetzen,
    ob tt_content mit dieser Uid ein Powermail-Plugin ist - $GLOBALS['TYPO3_DB'] steht dir auf jeden Fall zur Verfügung.

    Achtung! - ist nur eine Beispielfunktion!

    1. function user_checkPowermailUid($uid) {
    2. list($row) = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
    3. 'COUNT(0) AS total_pages, pid',
    4. 'pages',
    5. 'pid > 1',
    6. 'pid',
    7. 'total_pages DESC',
    8. '10'
    9. );
    10. debug($row,'$row') ;
    11. die();
    12. }

    Zitiert von: spL
    Angenommen die Funktion function user_checkPowermailUid($uid) würde in der Form laufen. Was sollte denn heraus kommen wenn ich auf meiner Seite mit den beiden Formualren bin.
    Dort würden dann ja zwei Conditions greifen weil sowohl Formular X als auch Formular Y vorhanden ist.

    Der Funktion übergibts du doch nicht die Seiten-Uid, sondern jeweils die Uid des Content Elements,
    und die ist doch wohl eindeutig, oder?
    1. [wenn uid=123]
    2. lade Template A für dieses CE mit der Uid 123
    3. [wenn uid=456]
    4. lade Template B für dieses CE mit der Uid 456
    5. [global]

    "unflexibel, unbrauchbar." - wenn man nicht das nötige Wissen hat, ja, dann ist das so...

  • spL spL
    Jedi-Meister
    0 x
    345 Beiträge
    3 Hilfreiche Beiträge
    07. 03. 2014, 12:02

    Hallo jenses,

    tut mir leid, ich wollte keine negative Kritik an deiner löblichen Hilfestellung aussprechen, viel mehr aus dem Frust heraus an den mir fehlenden, logischen Funktionen dieser Extension.
    Ich bleibe aber dabei dass eben diese für meine doch garnicht so ungewöhnliche Anforderung nicht wirklich nützlich ist. "Flexibilität" ist hier, in anbetracht dessen dass man quasi eine eigene Extension für die Extension schreiben kann, eher relativ.

    Ich habe ungeachtet meines Grundbedenkens, eine Condtion zu verwenden die auf der selben Seite mehrmals greift, noch einen Versuch gewagt (Vielen Dank für's auf die Sprünge helfen).
    Funktion:

    1. function user_checkPowermailUid($uid) {
    2. $result = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
    3. 'uid', 'tt_content', 'uid = ' . $uid . ' AND list_type = "powermail_pi1"'
    4. );
    5.  
    6. if ($GLOBALS['TYPO3_DB']->sql_num_rows($result)) {
    7. //var_dump($uid);
    8. return true;
    9. }
    10. return false;
    11. }

    Condition:
    1. [userFunc = user_checkPowermailUid(X)]
    2. plugin.tx_powermail.view.... Template X
    3.  
    4. [userFunc = user_checkPowermailUid(Y)]
    5. plugin.tx_powermail.view.... Template Y

    Es tritt nun genau das auf was ich befürchtet hatte. Auf der Seite auf der sowohl Plugin X als auch Y vorhanden sind wirft die Funktion jeweils TRUE zurück, die Condtion greift. Als Template wird letzlich für beide Formulare Template Y verwendet. Vermutlich Weil diese Condtion zuletzet aufgerufen wird.

  • 1