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 🙂