Suggest-Wizard mit PAGE_TSCONFIG_*-Werten

Wird bei Relationen die Auswahl (zu) groß, ist oftmals die Einschränkung via TCA und PAGE_TSCONFIG_*-Werten in den addWhere-Klauseln sinnvoll. Zusammen mit dem Suggest-Wizard wäre damit die Datenmenge für den Redakteur handhabbar. Leider stoßen wir hier aber auf ein Problem, wie Frank im Kommentar zu Steffen Blogartikel „Using the new TCA wizard „suggest“ for autocompletion in BE fields of TYPO3 4.3“ schon anmerkt:

Just found out, that suggest doesn’t work with „foreign_table_where“-conditions with markers like „###PAGE_TSCONFIG_IDLIST###“. Only the explicit csv-list works in that case.

Aber warum? Schaut man sich die Klasse t3lib_TCEforms_Suggest an, so sieht man, dass lediglich zwei Marker ersetzt werden: THIS_UID, CURRENT_PID. Mit einer einfachen Änderung ließe sich dies ergänzen um die PAGE_TSCONFIG_*-Werte. Gibt es einen Grund, weshalb das seit TYPO3 4.3 noch niemand gemacht hat?

Workaround

Ersetzen dieser Codezeilen der Klasse t3lib_TCEforms_Suggest

if (isset($config['addWhere'])) {
	$config['addWhere'] = strtr(
		' ' . $config['addWhere'],
		array(
			'###THIS_UID###' => intval($uid),
			'###CURRENT_PID###' => intval($pageId),
		)
	);
}

durch

if (isset($config['addWhere'])) {
	$config['addWhere'] = strtr(' ' . $config['addWhere'], 
		array(
			'###THIS_UID###' => intval($uid),
			'###CURRENT_PID###' => intval($pageId),
			'###PAGE_TSCONFIG_ID###' => intval($TSconfig['TCEFORM.'][$table . '.'][$field . '.']['PAGE_TSCONFIG_ID']),
			'###PAGE_TSCONFIG_IDLIST###' => $GLOBALS['TYPO3_DB']->cleanIntList($TSconfig['TCEFORM.'][$table . '.'][$field . '.']['PAGE_TSCONFIG_IDLIST']),
			'###PAGE_TSCONFIG_STR###' => $GLOBALS['TYPO3_DB']->quoteStr($TSconfig['TCEFORM.'][$table . '.'][$field . '.']['PAGE_TSCONFIG_STR'], $fieldConfig['foreign_table']), 
		)
	);
}

Update

Ein Feature-Request wurde inzwischen erstellt und ein Patch eingereicht. Dieser darf gerne einem Review unterzogen werden 🙂

Links

tipafriend und TYPO3 4.6

Leider gibt es hier einige Probleme durch das Aufräumen des Cores von TYPO3 (Stichwort: deprecated methods).

Da sich bis jetzt noch nichts getan hat bei den Entwicklern der Extension (http://forge.typo3.org/issues/33216#change-100254; http://forge.typo3.org/issues/33385 und http://forge.typo3.org/issues/33386) haben wir folgende Lösung getestet und auch eingesetzt.

Bug #33386 no auto-register with CSC:
im setup.ts die folgenden Zeilen einbinden

tt_content.list {
    20 {
        11 = CASE
        11.key.field = layout
        11.0 =< plugin.tipafriend
    }
}

Bug #33385 Tip-A-Friend is using deprecated/unavailable functions:

in der class.tx_tipafriend.php folgende Zeile:

        $cls=t3lib_div::makeInstanceClassName('t3lib_htmlmail');

durch

         $cls=t3lib_div::makeInstance('t3lib_htmlmail');

ersetzen.

Da die Funktion schon seit 4.3 deprecated ist und mit der 4.6 engültig gestrichen wurde kommt es bei älteren Extension zu Problemen. Weitere Infos sind auf der API Seite von TYPO3 oder in folgendem Post von Tolleiv  zu finden.

Anmerkung für TYPO3 4.7:

Nachdem auch die ganze Klasse t3lib_htmlmail bereits seit Längerem als deprecated deklariert war, wurde diese in TYPO3 4.7 rausgeworfen. Demnach ist tipafriend nicht mehr so leicht lauffähig zu bekommen. Es müsste der gesamte Mailversand an die neue Mail-API (Stichwort: Swiftmailer) angepasst werden.

 

tt_news: Defaultwert für Archivierungsdatum

Newsmeldungen werden mit tt_news wunderbar kategorisiert, verwaltet,… – aber auch archiviert??? Meine Antwort ist: Jain. Eine Archivierungsfunktion hat die Extension, doch so ganz wunderbar ist diese leider nicht. So wird das gesetzte Archivierungsdatum ignoriert, falls es größer als das aus datetimeDaysToArchive errechnete Datum ist. Für eine Verkürzung der Archivierungszeit funktioniert es hingegen. Eine Lösung lässt sich jedoch über das User TSconfg bauen.

Weiterlesen»

sr_feuser_register: Sicherheitstoken dieses Formulars ist leer!

Bei der Extension „Front End User Registration“ (sr_feuser_register) bekamen wir Kunden-Feedback, dass der Link zur Freischaltung durch den Administration eine Fehlermeldung „sr_feuser_register: Der Sicherheitstoken dieses Formulars ist leer!“ auslöst. Mit der weitergeleiteten Mail ließ sich der Fehler in Safari und IE reproduzieren, Firefox zeigte zwar keinen Fehler, aber auch nicht den erwarteten Inhalt. Bei Neuregistrierungen war der Fehler für uns nicht reproduzierbar. Im Internet stößt man zwar auf ein paar Blog-/Forenbeiträge, aber keiner war für unseren Fall hilfreich.

Die Lösung brachte dann ein genaueres Betrachten der weitergeleiteten Mail:
Der User hatte sich vor rund 1,5 Monaten registriert, die Fehlermeldung fiel erst jetzt auf bzw. wurde erst jetzt an uns gemeldet. Letztlich lag es an der Konfigurationseinstellung „shortUrlLife“

Short URL cache lifespan. This is the number of days that short URL’s will be kept in the DB. After this delay, the short URL’s will be removed. Confirmation URL’s included in email messages older than this number of days will not work.

Diese hat als Default-Wert 30 Tage und war in unserem Fall (rund 50 Tage) überschritten.

 

SMTP via SwiftMailer in Direct Mail nutzen

Direct Mail hatten wir nie so 100%ig sauber mit SMTP zum Laufen bekommen bzw. blieb stets doch noch irgendwo ein übler Beigeschmack. Daher fieberten wir mit großer Hoffnung der Integration des Swiftmailers als Mail-API in TYPO3 4.5 entgegen, um einen umfangreichen SMTP-Connector im CMS zu haben, auf den dann (hoffentlich) Direct Mail auch aufsetzt, statt auf PEAR odgl.

Nach einigen Tests und Codeinspektionen stand fest, dass Direct Mail derzeit noch nicht auf die neue Mail-API eingestellt ist 🙁 Ein Feature-Request am gestrigen Tage brachte das Ergebnis, dass dies für Version 3.0.0 geplant ist. Um die Wartezeit zu überbrücken, und bereits jetzt mit einfachen Boardmitteln Newsletter via Direct Mail und SMTP versenden zu können, wurde ein kleiner Patch geschrieben. Dieser ergänzt – falls TYPO3 >= 4.5.0 – für die Mail-Queue die Versendeoptionen um  eine Abfrage, ob $GLOBALS[‚TYPO3_CONF_VARS‘][‚MAIL‘][‚transport‘] gesetzt ist. Ist dies der Fall, wird die neue Mail-API zum Versand herangezogen. (Der Test-Versand in Schritt 4 bleibt unberührt.)

Details und Patch:

Weiterlesen»