Zum Inhalt springen

Powermail 2.x, typoscriptObjectPath und eigene userFunc

Erstellt am 4. Dezember 2013 · 14 Antworten · letzte Antwort am 17. Dezember 2014

Tags: Extbase, Powermail, TYPO3 6.x, Frage

Bluespuke ·

Hallo zusammen,

ich hab ne kleine Extension in extbase/fluid geschrieben. Hat auch soweit super geklappt. Jetzt versuch ich das Ergebnis davon an Powermail zu übergeben bzw. in die Mails mit rein zu bekommen.

Die Doku hab ich bereits durch und auch Alex' Tutorial hier: #111899

Ich hab auch einen ersten Versuch unternommen, der von Erfolg gekrönt war:

lib.test = TEXT
lib.test.value = Typoscript cObject geglückt!
{f:cObject(typoscriptObjectPath: 'lib.test')}

Der angegebene Text wird in beiden Mails sowie der Antwortseite meines Formulars angezeigt.

Jetzt wollte ich das ganze umbauen, damit ich den URL-Parameter (bleibt bestehen via linkVars) mit Hilfe einer userFunc ersetzen. Diese funktioniert per TypoScript eingebunden wunderbar:

lib.irgendwas = COA_INT
lib.irgendwas.10 = USER
lib.irgendwas.10{ 
	userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
	pluginName = Xxx
	extensionName = Xxx
	controller = Xxx
	action = xxx
	vendorName = TYPO3
	switchableControllerActions {
		Menu {
			1 = xxx
		}
	}
}

Jetzt hab ich in die 3 RTE-Felder folgendes eingefügt:

{f:cObject(typoscriptObjectPath: 'lib.irgendwas')}

Fazit:

  • In der Antwortseite wird meine Ausgabe gerendert, alles wunderbar

  • In beiden Mails fehlt jede Ausgabe...

Ist das normal so? Ich denke mal, dass erst die Mails verarbeitet werden von Powermail und dann die eigentliche Seite gerendert wird... Oder liegt das an dem COA_INT?
Ich hab bisher auch keine nützlichen Google-Ergebnisse gefunden (oder ich hab mit den falschen Begriffen gesucht...).

Hat vlt. jemand ähnliche Erfahrungen gemacht oder einfach nur fundierteres Expertenwissen in dem Fall? Ich stocher da eher im Heuhaufen rum ;-)

Bluespuke ·

Hmmm, anscheinend ist mein Problem doch nicht so "logisch" wie ich mir das dachte...

Dann werd ich wohl die Anzeige ohne Template sondern direkt per PHP schreiben müssen. #brokenlove#

Bluespuke ·

Hi,

Ich hab endlich nochmal Zeit gefunden, mich um dieses Projekt zu kümmern. Wenn ich lib.irgendetwas auf COA stelle, wird die erste Mail versendet. Dort ist auch meine Ausgabe drin, wie es sein sollte.

Im Frontend taucht aber folgende Fehlermeldung auf:

Oops, an error occurred!

Template could not be found at "/home/www/projekt/html/neu/typo3conf/ext/meineext/Resources/Private/Templates/Forms/PowermailAll.html".

Ich schau mich mal ein bischen um. Falls ich was neues raus finde, meld ich mich wieder hier 😉

einpraegsam.​net ·

Hmmm, also ist das eigentliche Problem behoben.
Jetzt meldet Extbase, dass das Template nicht auffindbar ist - hier würde ich den Pfad genau überprüfen und auch die Leserechte der Datei checken...

dercin ·

Guten Abend

Ich habe aktuell das gleiche Problem. Ich möchte ebenfalls aus einer Extbase Extension eine Action (einen kleinen Warenkorb) direkt im Powermail rendern und erhalte immer den Fehler:

Core: Exception handler (WEB): Uncaught TYPO3 Exception: #1288087061: Template could not be found at "Forms/PowermailAll.html".

Wenn ich, wie Bluesspuke ein einfaches lib Objekt nur mit Text fülle funktioniert alles. Sobald ich folgendes übergebe kommt der Fehler:

lib.basket = COA_INT
lib.basket.10 = USER
lib.basket.10 {
userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
....

Gibt es hier mittlerweile eine Lösung?

einpraegsam.​net ·

Ich glaube, dass in dem Beitrag verschiedene Probleme miteinander vermischt werden.
Generell ist es natürlich kein Problem, einen Wert an Powermail zu übergeben.
Ich denke, dass ich mehr sehen müsste, um das jeweilige Problem besser verstehen zu können.

dercin ·

Hey,

also ich denke nicht dass die Fehler soweit voneinander abweichen:

Im TYPOSCRIPT: (rendert die Action listBasket aus meiner Extension)

lib.basket = USER
lib.basket {
   userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
   vendorName = MyVendor
   extensionName = MyExt
   pluginName = Basket

  controller = Basket 
  action= listBasket
  
  switchableControllerActions {
        Basket{   
             1 = listBasket           
        }
    }
}

Im MailTemplate von Powermail (ReceiverMail.html)

{f:cObject(typoscriptObjectPath:'lib.basket')}

Fehler beim absenden:
Core: Exception handler (WEB): Uncaught TYPO3 Exception: #1288087061: Template could not be found at "Forms/PowermailAll.html"

Wenn ich statt dessen in lib.basket keine Action sondern einen Wert ablege oder eine eigene Userfunc nutze, funktioniert alles:

includeLibs.myFunc= typo3conf/ext/myExt/Classes/Userfunc/basket.php
lib.basket = USER
lib.basket {
  userFunc =user_basket->main
}

Ich hoffe diese Informationen reichen aus.

Gruß und vielen Dank für deine Mühen

Nico

einpraegsam.​net ·

Ich kam bisher nicht auf die Idee Extbase Bootstrap als UserFunc in einer Extbase Extension aufzurufen. Aber wenn ich das so mache, erhalte ich kein Ergebnis in der Mail.

Ich lasse lib.basket an drei Stellen ausgeben:
- page.15 - funktioniert
- Submitseite von Powermail - funktioniert
- Mail an Empfänger (eingefügt über RTE) - funktioniert nicht, wird gar nicht gerendert (aber auch keine Fehlermeldung)

# mein test
config.tx_extbase.mvc.callDefaultActionIfActionCantBeResolved = 1

lib.basket = USER
lib.basket {
	userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
	vendorName = In2code
	extensionName = Powermail
	pluginName = Pi1
	
	controller = Basket
	action = xxx
     
	switchableControllerActions.Basket.1 = xxx
}

page.15 < lib.basket
dercin ·

Hi,

das kann ich jetzt auch so bestätigen. Nachdem ich das neueste Powermail Update gezogen habe, ist der Fehler verschwunden. Eine Ausgabe ist leider zunächst auch in der Mail nicht da. Ich habe das Ganze jetzt erstmal recht "unelegant" über eine Session gelöst.

Besten Dank
Nico

dercin ·

So, nach längerer Zeit nochmal zurück 🙂

Wenn man eine Userfunc nutzt und innerhalb der Userfunc per Bootstrap->run die eigene Action funktioniert es, zumindest halbwegs. Sobald man es zweimal ausführt, was bei mir der Fall ist, einmal für den Empfänger und einmal für den Sender, dann ist die zweite Mail völlig zerstört. Es fehlt der dynamische Inhalt und HTML wird nicht korrekt angezeigt. Bei einem Viewhelper ist es das gleiche.

Ich habe nun ein Plugin eingebaut, welches vor dem Submit von Powermail den Warenkorb in eine Session schreibt und Powermail dann per Userfunc auf diese Session zugreift, damit klappt es zumindest, auch wenn es nicht sonderlich schön ist 🙂

Gruß Nico

nerphunk ·

Hallo Zusammen,

vermutlich habe ich ein ähnliches Problem bei dem ich nicht mehr weiterkomme (TYPO3 6.2.9 powermail 2.1.9):

Ich versuche den Receiver eines Powermail Formulars dynamisch zuzuweisen:

lib.receiver = CONTENT
lib.receiver {
  table = tt_news

  select {
    pidInList = 326
    andWhere.dataWrap = uid={GP:tx_powermail_pi1|rmail}
    andWhere.insertData = 1
  }
 
    renderObj = TEXT
        renderObj {
                field = author_email
        }
  
}

Die lib funktioniert. Weise ich Sie einem powermail Feld zu, wird die richtige E-Mailadresse angezeigt.

Versuche ich allerdings die lib als Receiver bei Powermail einzutragen, dann wird keine E-Mail verschickt.

{f:cObject(typoscriptObjectPath:'lib.receiver')}

Ändere ich meine lib.receiver wie folgt, dann funktioniert alles:

lib.receiver = TEXT
lib.receiver.value = xxx@yyy.de

Das gleiche passiert, wenn ich eine userFunc verwende. Schreibe ich die E-Mailadresse direkt in die Ausgabe, funktioniert es. Hole ich mir die E-Mailadresse per SQL, dann wird keine Mail verschickt.

Ich freue mich über jeden Hinweis 😉

Vielen Dank und Grüße

Nepomuk

einpraegsam.​net ·

Hallo Nepomuk,

bist du sicher, dass der GET/POST-Parameter tx_powermail_pi1[rmail] nach dem Absenden des Formulares noch gefüllt ist?

einfach mal

page.20 = TEXT
page.20.data = tx_powermail_pi1|rmail
page.20.wrap = a|b

auf der Seite einfügen und Formular absenden - steht dann noch was da?

Hinweis: Ich denke, dass die Verwendung eines GET-Paramters für CONTENT abgesichert werden sollte. So hast du IMO eine SQL-Injection Lücke eröffnet (such mal nach "TypoScript CONTENT GP: intval")

nerphunk ·

Hallo Alex,

vielen Dank für die Antwort. Du hast Recht, der Parameter ist nicht mehr gefüllt. Jetzt weiß ich wo ich ansetzen muss.

Viele Grüße

Nepomuk