Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru Сниппеты PHP Сниппеты PHP Функция для установки правильного окончания слов

PHP Функция для установки правильного окончания слов


     01.09.2013    PHP Сниппеты    3935

Недавно понадобилась такая функция, после поисков выяснилось, что готовых решений не так уж и много.
В итоге Sander подсказал вот такую штуку:
/**
* Функция для установки правильного окончания слов
* @param int $n - число, для которого будет расчитано окончание
* @param string $words - варианты окончаний для (1 комментарий, 2 комментария, 100 комментариев)
* @return string - слово с правильным окончанием
*/
function wordsSpan($n = 0, $words) {
    $words    = explode('|', $words);
    $n        = intval($n);
    return  $n%10==1&&$n%100!=11?$words[0].$words[1]:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$words[0].$words[2]:$words[0].$words[3]);
}

// Пример работы
for ($total=0; $total < 102; $total++) {
    echo 'Всего: '.$total.' '.wordsSpan($total,'комментари|й|я|ев').'<br />';
}

// Вариант с подключением в DLE
// {include file="engine/modules/wordspan.php?n=7&words=комментари|й|я|ев"}

Комментарии пользователей (17)

User_3218
1

32 | 3

User_3218 - 30 июля 2014 22:41 - Юзер

Функция не работает!!!

vitnet
218

2174 | 930

vitnet - 30 июля 2014 22:55 - Эксперт

function wordsSpan($n = 0, $words) {
    $words    = explode('|', $words);
    $n        = intval($n);
    return $n%10==1 && $n%100!=11 ? $words[0] . $words[1] : ($n%10>=2 && $n%10<=4 && ($n%100<10 || $n%100>=20) ? $words[0] . $words[2] : $words[0] . $words[3]);
}

echo 'Всего: ' . $n . ' ' . wordsSpan($n, 'комментари|й|я|ев');

FastFud
50

1599 | 588

FastFud - 30 июля 2014 22:49 - Юзер


User_3218
1

32 | 3

User_3218 - 30 июля 2014 23:02 - Юзер

Fatal error: Cannot redeclare wordsspan() (previously declared in /public_html/engine/modules/wordspan.php:14) in /public_html/engine/modules/wordspan.php on line 18

vitnet
218

2174 | 930

vitnet - 30 июля 2014 23:13 - Эксперт

function wordsSpan(...
была объявлена ранее

User_3218
1

32 | 3

User_3218 - 30 июля 2014 23:27 - Юзер

Подскажите, пожалуйста, куда вставить эту строчку в index.php
"$tpl->result['main'] = preg_replace("#\[declination=(\d+)\](.+?)\[/declination\]#ies", "word_declination('\\1', '\\2')", $tpl->result['main']);"
На сайте написано найти "echo $tpl->result['main'];", но, к сожалению, этого нет в движке 9.8

vitnet
218

2174 | 930

vitnet - 30 июля 2014 23:39 - Эксперт

Как нету?

Смотрите внимательнее
echo $tpl->result['main']; // <-- 
$tpl->global_clear ();
$db->close ();

echo "\n<!-- Dat..... -->\r\n";

GzipOut();
?>

User_3218
1

32 | 3

User_3218 - 30 июля 2014 23:49 - Юзер

У меня нет такого, вот что есть "eval (' ?' . '>' . $tpl->result['main'] . '<' . '?php ');", значит, перед ней, я так понимаю вставить нужно)

User_3218
1

32 | 3

User_3218 - 31 июля 2014 00:05 - Юзер

????

ПафНутиЙ
1065

3396 | 2434

ПафНутиЙ - 31 июля 2014 00:09 - Админ


Каков вопрос - таков и ответ. Просто помните об этом.

User_3218
1

32 | 3

User_3218 - 31 июля 2014 00:17 - Юзер

Спасибо, Пафнутий) А по поводу php все же хотелось бы узнать! Правильно ли вставить перед этой строкой "eval (' ?' . '>' . $tpl->result['main'] . '<' . '?php ');"
--
Первая ссылка не работает( ***Sorry, but the page you are trying to view does not exist.***
За пример - спасибо)

D0Gmatist
225

794 | 281

D0Gmatist - 31 июля 2014 00:30 - Местный

function declination($num, $postfixes)
    {
    $num = $num % 100;
    if ($num > 19) {
        $num = $num % 10;
    }
    switch ($num) {
        case 1:
            return $postfixes[0];
        case 2:
        case 3:
        case 4:
            return $postfixes[1];
        default:
            return $postfixes[2];
    }
}

$question = "2";
$question_decl = declination( $question, array( 'вопрос', 'вопроса', 'вопросов' ) );

echo $question . " " . $question_decl; // 2 вопроса

Каждый программист знает - в правильном софте все должно быть прекрасно:
и пользовательский интерфейс, и программные решения, и гениальные ошибки!
Болтовня ничего не стоит. Покажите мне код.

D0Gmatist
225

794 | 281

D0Gmatist - 31 июля 2014 00:39 - Местный


Каждый программист знает - в правильном софте все должно быть прекрасно:
и пользовательский интерфейс, и программные решения, и гениальные ошибки!
Болтовня ничего не стоит. Покажите мне код.

User_3218
1

32 | 3

User_3218 - 31 июля 2014 00:59 - Юзер

Вопрос остается акуальным. Простите, я не разбираюсь в php, поэтому прошу помощи у знатоков..

Подскажите, пожалуйста, куда вставить эту строчку в index.php
"$tpl->result['main'] = preg_replace("#\[declination=(\d+)\](.+?)\[/declination\]#ies", "word_declination('\\1', '\\2')", $tpl->result['main']);"


Будет ли это решение правильным!?

$tpl->set ( '{AJAX}', $ajax );
$tpl->set ( '{headers}', $metatags."\n".$js_array );

$tpl->set ( '{content}', "<div id='dle-content'>" . $tpl->result['content'] . "</div>" );

$tpl->compile ( 'main' );
$tpl->result['main'] = str_ireplace( '{THEME}', $config['http_home_url'] . 'templates/' . $config['skin'], $tpl->result['main'] );
if ($replace_url) $tpl->result['main'] = str_replace ( $replace_url[0]."/", $replace_url[1]."/", $tpl->result['main'] );
$tpl->result['main'] = str_replace ( '<img src="http://'.$_SERVER['HTTP_HOST'].'/', '<img src="/', $tpl->result['main'] );


$tpl->result['main'] = preg_replace("#\[declination=(\d+)\](.+?)\[/declination\]#ies", "word_declination('\\1', '\\2')", $tpl->result['main']);

eval (' ?' . '>' . $tpl->result['main'] . '<' . '?php ');
$tpl->global_clear ();
$db->close ();

echo "\n\r\n";

GzipOut();
?>

User_3218
1

32 | 3

User_3218 - 31 июля 2014 01:00 - Юзер


D0Gmatist
225

794 | 281

D0Gmatist - 31 июля 2014 01:06 - Местный


Каждый программист знает - в правильном софте все должно быть прекрасно:
и пользовательский интерфейс, и программные решения, и гениальные ошибки!
Болтовня ничего не стоит. Покажите мне код.

User_3218
1

32 | 3

User_3218 - 31 июля 2014 01:22 - Юзер

D0Gmatist,
спасибо большое за помощь! Все работает прекрасно! ;)

Чтобы комментировать - войдите или зарегистрируйтесь на сайте