Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community |
06.04.2006, 16:43 | #1 |
Продвинутый
Регистрация: 13.02.2006
Сообщений: 49
|
склонять русские слова после чисел
Задача, наверно, всем знакома:
"1 крокодил, 2 крокодила, ... 15 крокодилов" Алгоритм тривиальный. Вопрос - куда народ это подключает через TypoScript? А конкретнее - в stdWrap? Ну не вижу я там подходящих мест, чтобы вставить, не меняя саму ф-цию stdWrap. Если бы .wrap/.noTrimWrap были типа stdWrap - можно было бы туда засунуть, а приходится в собственной ф-ции и noTrimWrap реализовывать. Пока родилось что-то вроде. Предложите что-нибудь покрасивее TS: includeLibs.user_declension = media/scripts/user_declension.php page = PAGE page.10 = TEXT page.10 { value = 555 preUserFunc = user_declension_cyr preUserFunc.words = #| ответ#| ответа#| ответов# PHP: <?php function declension_cyr($number, $words) { $number=abs($number); if($number > 20) $number%=10; if($number == 1) return ($words[0]); if($number >= 2 && $number <= 4 ) return ($words[1]); return $words[2]; } function user_declension_cyr($val, $conf) { $variant = declension_cyr(intval($val), array_slice(explode($conf['splitChar'] ? $conf['splitChar'] : '#', $conf['words']), 1, 3)); $wrapArr = explode($conf['wrapChar'] ? $conf['wrapChar'] : '|', $variant); return $wrapArr[0] . $val . $wrapArr[1]; } ?> |