Hallo habuky,
du hast vollkommen Recht, ich habe übersehen, dass du mit dem Script, immer die E-Mail Adresses des Backend-Benutzers bekommen würdest, dem die Formular-Seite gehört. Aber durch ein paar kleine Änderungen funktioniert alles so, wie gewollt.
Aber zuerst eine kurze Erklärung der Code-Beispiele aus meinem letzten Post:
@ PHP:
(Zeile | Beschreibung)
-------------------------------
02: Beginn der Klasse "user_pageUser"
05: Beginn der Methode "getEmail". Diese wird später im TS aufgerufen
06: Holen der globalen Variable "$TSFE" in die lokale Methode
09: Ausführen des folgenden SQL-Statements über die TYPO3-Methode "exec_SELECTquery". [1]
10: Das Feld "email" von der Tabelle "be_users" ausgelesen werden (entspricht SELECT)
11: Das Feld soll von der Tabelle "pages" gelesen werden. Durch das "INNER JOIN" kombiniere ich die Anfrage mit der Tabelle "be_users" auf Grundlage der Bedingung, dass der Wert des Feldes "perms_userid" aus der Tabelle "pages" mit dem Wert des Feldes "uid" aus der Tabelle "be_users" übereinstimmt (entspricht FROM)
12: Hier wird festgelegt, dass die Abfrage nur aus dem Datensatz der Tabelle "pages" auslesen soll, wenn der Wert des Feldes "uid" mit der aktuellen Seiten-ID übereinstimmt (entspricht WHERE) [2]
13: Keine Gruppierung der Ergebnisse (entspricht GROUP BY)
14: Keine Sortierung der Ergebnisse (entspricht ORDER BY)
15: Limitierung auf ein Ergebnis (entspricht LIMIT)
19: Auslesen des Ergebnisses über die Methode "sql_fetch_assoc".
21: Wenn das Ergebnis vom Typ Array ist, in diese Bedingung laufen.
22: Den ersten Wert des Arrays auslesen (entspricht $result[0]).
23: Wenn die Variable "$email" nicht leer ist, in die nächste Bedingung laufen.
24: Als Ergebnis der Methode "getEmail" den Wert der Variable "$email" zurück liefern.
30: Wenn bisher kein Ergebnis der Methode zurück geliefert wurde und der Wert der, im TS definierten Variable "ifEmpty" nicht leer ist, in diese Bedingung laufen. (Der Parameter "$conf" wird automatisch übergeben, wenn die Methode "getEmail" von TYPO3 aufgerufen wird. Sie enthält die TypoScript-Konfiguration für die userFunc.)
31: Ausgeben des Wertes von "$conf['ifEmpty']".
35: Wenn bis hier hin kein Wert zurück geliefert wurde, wird ein leerer Wert als Ergebnis der Methode geliefert.
@ TS:
(Zeile | Beschreibung)
-------------------------------
02: Hier wird die PHP-Datei als Funktionsbibliothek zugewiesen.
10: Hier wird jede vorhergehende Konfiguration für die Variable "email_to" deaktiviert.
11: Anschließend wird der Variable zugewiesen, dass sie vom Typ "USER" sein soll.
13: Hier wird nun die Methode "getEmail" der Klasse "user_pageUser" aus der neu eingebundenen PHP-Datei aufgerufen. [3]
14: Die Variable "ifEmpty" wird von der PHP ausgelesen, wenn keine E-Mail Adresse aus der Datenbankabfrage geliefert wurde.
[1] Eine sehr gutes Wiki zu TYPO3-Datenbankabfragen: http://www.lisardo.biz/wiki/Datenbankabfragen/
[2] Mehr zum Thema "$TSFE": http://web13.netzwerteserver.de/1421+M5e34df5a01a.0.html?&no_cache=1&show=TSFE
[3] Mehr zur userFunc: http://www.typo3wizard.com/de/snippets/allgemeine-probleme-und-loesungen/einfache-userfunc.html[/list]
-------------------------------
So, und nun, wie Oben erwähnt, die Anpassungen am Code, damit die E-Mail Adresse des Backend-Benutzers angesprochen wird, die zur zuletzt besuchten Seite gehört.
<?php
class user_pageUser {
var $cObj;
function getEmail($content,$conf) {
global $TSFE;
// Return if no last page-id was found
if (!isset($conf['lastID']) || empty($conf['lastID'])) {
return '';
}
// Get SQL ressource
$ressource = $GLOBALS['TYPO3_DB']->exec_SELECTquery (
'be_users.email',
'pages INNER JOIN be_users ON (pages.perms_userid = be_users.uid)',
'pages.uid='.(int) $conf['lastID'],
'',
'',
'1'
);
// Get result
$result = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($ressource);
// Check result and return email address
if (is_array($result)) {
$email = reset($result);
if (!empty($email)) {
return $email;
}
}
// Return default if no email address was found
if (isset($conf['ifEmpty']) && !empty($conf['ifEmpty'])) {
return $conf['ifEmpty'];
}
// Return en empty string
return '';
}
}
?>
Nun wird über "$conf['lastID']" auf den Wert der Variable "lastID" aus dem übergeben Konfigurationsarray (TypoScript-Konfiguration) ausgelesen und statt der aktuellen Seiten-ID (vorher: $TSFE->id) als Bedingung für Datenbankabfrage genutzt.
Als nächstes muss das TypoScript umgestellt werden:
## Include the userFunc file
includeLibs.pageUser = fileadmin/user_pageUser.php
plugin.tx_thmailformplus_pi1 {
freecapFieldname = captchafield
fieldConf.captchafield = required
## Set recipients email address automatically via userFunc
default {
email_to >
email_to = USER
email_to {
userFunc = user_pageUser->getEmail
lastID = GPvar:last_id
ifEmpty = email@domain.com
}
}
markers {
LASTURL = TEXT
LASTURL {
data = getenv : HTTP_REFERER
wrap = <p>Letzte besuchte URL: | .</p>
}
}
}
Hier wird nun eine weitere Variable "lastID" an die userFunc (den PHP-Code) übergeben.
Und zum Schluss noch eine kleine Anpassung in der Definition des Links, auf das Formular:
seite = PAGE
seite {
typeNum = 0
stylesheet = fileadmin/shared/style/style.css
10 = TEMPLATE
10 {
template = FILE
template.file = fileadmin/shared/style/vorlage.html
marks {
FEHLER-MELDEN = TEXT
FEHLER-MELDEN {
value = Fehler melden
typolink {
parameter = <UID der Seite Schadensmeldung>
additionalParams {
field = uid
wrap = &last_id=|
}
}
}
}
}
}
Hier wird nun an die URL des Links ein weiterer Parameter angehängt (unter Umständen musst du hier die Konfiguration von RealURL ein wenig erweitern).
Zur Erklärung:
-------------------------------
1. Übergabe der aktuellen Seiten-ID als neuer Parameter "last_id" des Links auf das Formular.
2. Auslesen des neuen Parameters aus der URL aus dem GET-POST-Array "GPvar".
3. Übergabe des ausgelesenen Parameters an die userFunc.
4. Setzen des übergebenen Parameters als Bedingung für das SQL-Statement. Somit wird von der PHP-Methode "getEmail" die E-Mail Adresse desjenigen Backend-Benutzers zurück geliefert, welche zu der übergebenen Seiten-ID gehört...
5. Anschließend wird die E-Mail Adresse als Administrator-E-Mail von mailformplus zugewiesen.
Hoffe das ist einigermaßen verständlich...