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

Das könnte dich auch interessieren …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert