Danke für dein Feedback.
Etwas spät, aber die Zeit rennt ja nur so... mein Feedback...
/typo3/class.db_list.inc -> makeSearchString() habe ich nun auf die Schnelle bearbeitet und den Integer-Part deaktiviert:
ca. Zeile 560:
// original: if (t3lib_utility_Math::canBeInterpretedAsInteger($this->searchString))
if (false && t3lib_utility_Math::canBeInterpretedAsInteger($this->searchString)) {
Damit dennoch nach einer UID gesucht werden kann, habe ich den wherePart im Else definiert:
ca. Zeile 578:
//original: $whereParts = array();
$whereParts = array(
'uid=' . $this->searchString
);
Nun wäre es so, dass Integer-Felder garnicht mehr berücksichtig werden. Dazu habe ich etwas weiter unten die Bedingung geändert:
ca. Zeile 602:
//original: ($fieldConfig['type'] == 'input' && (!$fieldConfig['eval'] || !preg_match('/date|time|int/',$fieldConfig['eval'])))) {
($fieldConfig['type'] == 'input' && (!$fieldConfig['eval'] || !preg_match('/date|time/',$fieldConfig['eval'])))) {
Hier die komplette geänderte Methode (/typo3/class.db_list.inc -> recordList -> makeSearchString()):
/**
* Creates part of query for searching after a word ($this->searchString)
* fields in input table.
*
* @param string $table Table, in which the fields are being searched.
* @param integer $currentPid Page id for the possible search limit. -1 only if called from an old XCLASS.
* @return string Returns part of WHERE-clause for searching, if applicable.
*/
function makeSearchString($table, $currentPid = -1) {
$result = '';
$currentPid = intval($currentPid);
$tablePidField = ($table == 'pages' ? 'uid' : 'pid');
// Make query, only if table is valid and a search string is actually defined:
if ($this->searchString) {
$result = ' AND 0=1';
$searchableFields = $this->getSearchFields($table);
if (count($searchableFields) > 0) {
// Loading full table description - we need to traverse fields:
t3lib_div::loadTCA($table);
// original: if (t3lib_utility_Math::canBeInterpretedAsInteger($this->searchString) ) {
if (false && t3lib_utility_Math::canBeInterpretedAsInteger($this->searchString) ) {
$whereParts = array(
'uid=' . $this->searchString
);
foreach($searchableFields as $fieldName) {
if (isset($GLOBALS['TCA'][$table]['columns'][$fieldName])) {
$fieldConfig = &$GLOBALS['TCA'][$table]['columns'][$fieldName]['config'];
if ($fieldConfig['type'] == 'input' && $fieldConfig['eval'] && t3lib_div::inList($fieldConfig['eval'], 'int')) {
$condition = $fieldName . '=' . $this->searchString;
if (is_array($fieldConfig['search']) && in_array('pidonly', $fieldConfig['search']) && $currentPid > 0) {
$condition = '(' . $condition . ' AND ' . $tablePidField . '=' . $currentPid . ')';
}
$whereParts[] = $condition;
}
}
}
} else {
// original: $whereParts = array();
$whereParts = array(
'uid=' . $this->searchString
);
$like = '\'%' .
$GLOBALS['TYPO3_DB']->quoteStr($GLOBALS['TYPO3_DB']->escapeStrForLike($this->searchString, $table), $table) .
'%\'';
foreach($searchableFields as $fieldName) {
if (isset($GLOBALS['TCA'][$table]['columns'][$fieldName])) {
$fieldConfig = &$GLOBALS['TCA'][$table]['columns'][$fieldName]['config'];
$format = 'LCASE(%s) LIKE LCASE(%s)';
if (is_array($fieldConfig['search'])) {
if (in_array('case', $fieldConfig['search'])) {
$format = '%s LIKE %s';
}
if (in_array('pidonly', $fieldConfig['search']) && $currentPid > 0) {
$format = '(' . $format . ' AND ' . $tablePidField . '=' . $currentPid . ')';
}
if ($fieldConfig['search']['andWhere']) {
$format = '((' . $fieldConfig['search']['andWhere'] . ') AND (' . $format . '))';
}
}
if ($fieldConfig['type'] == 'text' ||
$fieldConfig['type'] == 'flex' ||
// original: ($fieldConfig['type'] == 'input' && (!$fieldConfig['eval'] || !preg_match('/date|time|int/',$fieldConfig['eval'])))) {
($fieldConfig['type'] == 'input' && (!$fieldConfig['eval'] || !preg_match('/date|time/',$fieldConfig['eval'])))) {
$whereParts[] = sprintf($format, $fieldName, $like);
}
}
}
}
// If search-fields were defined (and there always are) we create the query:
if (count($whereParts)) {
$result = ' AND (' . implode(' OR ', $whereParts) . ')';
}
}
}
return $result;
}
Quick and dirty - bei nem Update wieder alles weg und keiner denkt daran - die Verbesserung der Entwickler einfach über den Haufen geworfen... aber es funktioniert erstmal.
LG Sun