» » » РЕШЕНО! Склонение Чисел

РЕШЕНО! Склонение Чисел

Всем Привет.:)
Наверно всем вам интересно, что же означает тема «Склонение чисел»?
Если да то вам по адресу. Все знают, что в SE есть примерно такие фразы:
Роман Друзья (47)
Или
Альбомы (11)
И таких фраз в SE много. Согласитесь так, тупо не красиво.
Хочется, что бы выглядело примерно так:
У Романа 47 Друзей
Или
11 Альбомов
Как владелец сайта, я этого просто не замечал, пока моя девушка :sweet_kiss: и мой Друг lem1x не открыла мне глаза. Когда я осознал всю проблему, я начал искать решение.
2 часа дали хороший результат.facepalm Нашол замечательную функцию:

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 = 11;
echo $a.' Альбо'.numberEnd($a, array('м','ма','мов'));

Выведет:
11 Альбомов

Если изменим значение:

$a = 1;
echo $a.' Альбо'.numberEnd($a, array('м','ма','мов'));

Выведет:
1 Альбом

Так как же использовать данный мод в SE? Я буду показывать на примере своего сайта.
В профиле у меня есть замечательный блок "Друзья".

РЕШЕНО! Склонение Чисел

{lang_print id=653} ({$total_friends})
Данный Код выводит количество друзей.

Теперь давайте сделаем из того человеческий вид.
Идем в profile.php и ищем // ASSIGN VARIABLES AND INCLUDE FOOTER


И перед ставим:
// Функция Склонения
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})[/HTML] меняем на [HTML]{$a} [/HTML]
И делаем запрос в Mysql

INSERT INTO `se_languagevars` (`languagevar_id`, `languagevar_language_id`, `languagevar_value`, `languagevar_default`) VALUES
(69639935, '2', 'Дру', ''),
(69639936, '2', 'г', ''),
(69639937, '2', 'га', ''),
(69639938, '2', 'зей', '');


Сохраняем и смотрим что получилось::brr:
РЕШЕНО! Склонение Чисел РЕШЕНО! Склонение Чисел РЕШЕНО! Склонение Чисел

Теперь слово "Друг" само изменяется в зависимости от числа перед ним.;)
Давайте разберем сам код.
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)] ];
}

Как я понял это обработчик его трогать не надо.cool

//Склонения
$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);
//Склонения
С этим кусочком будет интересней.

$total_friends
Это число друзей
SE_Language::_get(69639935)
это получение фразы из БД средствами php. Если быть точнее 69639935 номер фразы, в нашем случае 69639935 = Дру.

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

Другие публикации по теме:

Комментарии