1. Мы продолжаем публиковать интересные статьи на тему SocialEngine 4. Одна из статей посвящена правильному выбору сервера для вашей социальной сети, а другая содержит советы по увеличению производительности платформы. Также мы добавили большую статью о пользовательских уровнях. Ознакомиться со статьями вы можете в разделе Вопросы и Ответы SocialEngine 4.
  2. Вам кажется, что ваша версия SocialEngine 4, работает медленно?

    Голосуйте. Пишите свою версию системы, железо на чем работает и количество пользователей. Будем увеличивать производительность :-) Подробнее

  3. В связи с участившимися случаями попыток продажи пользователями форума различных "сборок" коммерческих социальных платформ, обычно основанных на SocialEngine 3, вводится новое правило для форума. Запрещается создание тем или размещение в уже созданных предложений о продаже или размещение ссылок на сайты, где происходит продажа "сборок". Пользователи, которые продолжат свою коммерческую деятельность в данном направлении, будут заблокированы. Подробнее.

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

Discussion in 'Free' started by badboy, Jan 4, 2011.

  1. badboy Thread starter User


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

    PHP:
    function numberEnd($number$titles) {
        
    $cases = array (201112);
           return 
    $titles[ ($number%100>&& $number%100<20)? $cases[min($number%105)] ];
    }
    Использование:

    PHP:
    $a 11;
    echo 
    $a.' Альбо'.numberEnd($a, array('м','ма','мов'));
    Выведет:
    11 Альбомов

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

    PHP:
    $a 1;
    echo 
    $a.' Альбо'.numberEnd($a, array('м','ма','мов'));
    Выведет:
    1 Альбом

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

    [IMG]

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

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


    И перед ставим:
    PHP:
    // Функция Склонения
    function numberEnd($number$titles) {
        
    $cases = array (201112);
           return 
    $titles[ ($number%100>&& $number%100<20)? $cases[min($number%105)] ];
    }
    // Функция Склонения

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

    HTML:
    INSERT INTO `se_languagevars` (`languagevar_id`, `languagevar_language_id`, `languagevar_value`, `languagevar_default`) VALUES
    (69639935, '2', 'Дру', ''),
    (69639936, '2', 'г', ''),
    (69639937, '2', 'га', ''),
    (69639938, '2', 'зей', '');
    
    Сохраняем и смотрим что получилось::confused:
    [IMG] [IMG] [IMG]

    Теперь слово "Друг" само изменяется в зависимости от числа перед ним.;)
    Давайте разберем сам код.
    PHP:
    function numberEnd($number$titles) {
        
    $cases = array (201112);
           return 
    $titles[ ($number%100>&& $number%100<20)? $cases[min($number%105)] ];
    }
    Как я понял это обработчик его трогать не надо.:cool:

    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:
    $total_friends
    Это число друзей
    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
    Alpert108 likes this.
  2. Prado Challenge Everything


    Offline
    • Admin
    Message Count:
    3,191
    Likes Received:
    785
    My version of phpFox:
    3.0.0
  3. lem1x Active member


    Offline
    Message Count:
    166
    Likes Received:
    68
    А про меня значит забыл ? :) а я значит ничего не говорил ? :)
  4. Prado Challenge Everything


    Offline
    • Admin
    Message Count:
    3,191
    Likes Received:
    785
    My version of phpFox:
    3.0.0
    А можно без этого. Пожалуйста.
  5. Red Rabbit Tough member


    Offline
    Message Count:
    898
    Likes Received:
    193
    Просто, складно. Однако хотелось бы добавить - всё-таки не комильфо ставить такие чересчур лаконичные переменные типа "а". Лучше оставить friends, или total_friends. Потом же проще разбираться будет, особенно если планируется склонять остальные модули, а то и получится в конце весь алфавит переменных, сами же и запутаетесь.

    upd. И, кстати, поправьте если ошибаюсь - будучи втиснутой в profile.php эту функцию будет невозможно вызвать из других модулей, если вдруг ещё что-нибудь придется "просклонять", придется её клонировать, что не очень хорошо. Поэтому её лучше засунуть куда-нибудь в файл с глобальными функциями (function.global...или что-то в этом роде, сейчас под рукой ничего нет, поэтому по памяти).
  6. badboy Thread starter User


    Offline
    Message Count:
    116
    Likes Received:
    116
    Прости) щас поправлю)

    ---------- Сообщение добавлено в 18:17 ---------- Предыдущее сообщение было в 18:13 ----------

    Хочу добавить что данный мод предоставлен в рабочем виде, как пример. Вы можете править переменные как хотите.
    Чтобы вызвать данную функцию в других модулях, стоит просто добавить ее в header.php.

    ---------- Сообщение добавлено в 18:18 ---------- Предыдущее сообщение было в 18:17 ----------

    Я не могу там новости добавлять. Добавьте вы пожалуйста.
  7. Maddyson Novice member


    Offline
    Message Count:
    21
    Likes Received:
    0
    Я вот с этим некогда не сталкивался)) У меня название блока "Друзья" потом идет подБЛОК с названием " всегод друзЕЙ (и тут число)" !!
    И всё =) Ну это для тех кто голову ломать не хочет!))
  8. badboy Thread starter User


    Offline
    Message Count:
    116
    Likes Received:
    116
    Кому как больше нравится
  9. Maddyson Novice member


    Offline
    Message Count:
    21
    Likes Received:
    0
    Я вообщето добавил
    =)
  10. djvergon Novice member


    Offline
    Message Count:
    2
    Likes Received:
    0
    круть круть хоть я от SE ненадолго отстранился использую у себя спс

Share This Page

All rights reserved SocEngine.ru ©