Всем Привет.
Наверно всем вам интересно, что же означает тема «Склонение чисел»?
Если да то вам по адресу. Все знают, что в SE есть примерно такие фразы:
Роман Друзья (47)
Или
Альбомы (11)
И таких фраз в SE много. Согласитесь так, тупо не красиво.
Хочется, что бы выглядело примерно так:
У Романа 47 Друзей
Или
11 Альбомов
Как владелец сайта, я этого просто не замечал, пока моя девушка :sweet_kiss: и мой Друг lem1x не открыла мне глаза. Когда я осознал всю проблему, я начал искать решение.
2 часа дали хороший результат. Нашол замечательную функцию:
PHP:
function numberEnd($number, $titles) {
$cases = array (2, 0, 1, 1, 1, 2);
return $titles[ ($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)] ];
}
Использование:
PHP:
$a = 11;
echo $a.' Альбо'.numberEnd($a, array('м','ма','мов'));
Выведет:
11 Альбомов
Если изменим значение:
PHP:
$a = 1;
echo $a.' Альбо'.numberEnd($a, array('м','ма','мов'));
Выведет:
1 Альбом
Так как же использовать данный мод в SE? Я буду показывать на примере своего сайта.
В профиле у меня есть замечательный блок "Друзья".
HTML:
{lang_print id=653} ({$total_friends})
Данный Код выводит количество друзей.
Теперь давайте сделаем из того человеческий вид.
Идем в profile.php и ищем // ASSIGN VARIABLES AND INCLUDE FOOTER
И перед ставим:
PHP:
// Функция Склонения
function numberEnd($number, $titles) {
$cases = array (2, 0, 1, 1, 1, 2);
return $titles[ ($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)] ];
}
// Функция Склонения
//Склонения
$a = $total_friends.' '.SE_Language::_get(69639935).numberEnd($total_friends, array(SE_Language::_get(69639936),SE_Language::_get(69639937),SE_Language::_get(69639938)));
$smarty->assign('a', $a);
//Склонения
Теперь в просто
HTML:
{lang_print id=653} ({$total_friends})
меняем на
И делаем запрос в Mysql
HTML:
INSERT INTO `se_languagevars` (`languagevar_id`, `languagevar_language_id`, `languagevar_value`, `languagevar_default`) VALUES
(69639935, '2', 'Дру', ''),
(69639936, '2', 'г', ''),
(69639937, '2', 'га', ''),
(69639938, '2', 'зей', '');
Сохраняем и смотрим что получилось:
Теперь слово "Друг" само изменяется в зависимости от числа перед ним.
Давайте разберем сам код.
PHP:
function numberEnd($number, $titles) {
$cases = array (2, 0, 1, 1, 1, 2);
return $titles[ ($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)] ];
}
Как я понял это обработчик его трогать не надо.
PHP:
//Склонения
$a = $total_friends.' '.SE_Language::_get(69639935).numberEnd($total_friends, array(SE_Language::_get(69639936),SE_Language::_get(69639937),SE_Language::_get(69639938)));
$smarty->assign('a', $a);
//Склонения
С этим кусочком будет интересней.
Это число друзей
PHP:
SE_Language::_get(69639935)
это получение фразы из БД средствами php. Если быть точнее 69639935 номер фразы, в нашем случае 69639935 = Дру.
PHP:
numberEnd($total_friends, array(SE_Language::_get(69639936),SE_Language::_get(69639937),SE_Language::_get(69639938)));
Тут $total_friends надо будет менять на нужное число, допустим на $total_albums и тд. SE_Language::_get(69639936) это меняем на нужную фразу, 69639936 = г,
69639937 = га, 69639938 = зей.
Вроде все. На основе данного мода, можно сделать нормальный вид фраз в SE.
Если Помог Жми "Спасибо".
По всем вопросам писать в этой теме.
или
ICQ 424703006
Skype kadetzp