Quantcast
Channel: Я безумен » PHP
Viewing all articles
Browse latest Browse all 2

Плагин для Smarty для склонения существительных с числительными

$
0
0

Тему склонения я уже как то поднимал в Новости на сайте посредством twitter’a, теперь же всплыла задача когда необходимо было реализовать данное склонение в качестве плагина для Smarty. И обертка готова, кому нужно может пользоваться.

Нужно сохранить код приведенный ниже в файл function.decliner.php в каталоге с плагинами Smarty

<?php
/**
 * Smarty {decliner} function plugin
 *
 * Type:     function<br>
 * Name:     decliner<br>
 * Purpose:  handle word declines based on quantity number<br>
 * @author   Dmitriy Soloduhin <darkomen86 at gmail dot com>(credits to http://mcaizer.habrahabr.ru/blog/11555/)
 * @param array $params
 * <pre>
 * Params:  qty: number of items to choose correct declining form
 *          word: declining forms of word. Ex: день, дня, дней.
 * </pre>
 * @param Smarty
 * @return string
 */
function smarty_function_decliner($params, &$smarty)
{
    // be sure equation parameter is present
    if (empty($params['qty']))
	$params['qty']=0;
    if (empty ($params['word'])) {
        $smarty->trigger_error("decliner: missing required parameter");
        return;
    }
    $forms=explode(',',$params['word']);
    $params['qty'] = abs($params['qty']) % 100;
    $n1 = $params['qty'] % 10;
    if ( $params['qty'] > 10 &&  $params['qty'] < 20) return $forms[2];
    else if ($n1 > 1 && $n1 < 5) return $forms[1];
    else if ($n1 == 1) return $forms[0];
    return $forms[2];

}

/* vim: set expandtab: */

?>

Затем в шаблонах можно использовать вот так.

{decliner qty=4 word='письма, письма, писем'}


Viewing all articles
Browse latest Browse all 2

Latest Images

Trending Articles





Latest Images