Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Сумма заказа прописью


palcet

Recommended Posts

Ни кто не сталкивался с таким вопросом: "Как вывести общую сумму заказа прописью на последнем этапе оформления заказа?" Есть ли готовое решение или кто подскажет как это реализовать?

Надіслати
Поділитися на інших сайтах


Так ли я делаю? Добавил функцию в контроллер модуля

function num2str($inn, $stripkop=false) {
    $nol = 'ноль';
    $str[100]= array('','сто','двести','триста','четыреста','пятьсот','шестьсот', 'семьсот', 'восемьсот','девятьсот');
    $str[11] = array('','десять','одиннадцать','двенадцать','тринадцать', 'четырнадцать','пятнадцать','шестнадцать','семнадцать', 'восемнадцать','девятнадцать','двадцать');
    $str[10] = array('','десять','двадцать','тридцать','сорок','пятьдесят', 'шестьдесят','семьдесят','восемьдесят','девяносто');
    $sex = array(
        array('','один','два','три','четыре','пять','шесть','семь', 'восемь','девять'),// m
        array('','одна','две','три','четыре','пять','шесть','семь', 'восемь','девять') // f
    );
    $forms = array(
        array('копейка', 'копейки', 'копеек', 1), // 10^-2
        array('рубль', 'рубля', 'рублей',  0), // 10^ 0
        array('тысяча', 'тысячи', 'тысяч', 1), // 10^ 3
        array('миллион', 'миллиона', 'миллионов',  0), // 10^ 6
        array('миллиард', 'миллиарда', 'миллиардов',  0), // 10^ 9
        array('триллион', 'триллиона', 'триллионов',  0), // 10^12
    );
    $out = $tmp = array();
    // Поехали!
    $tmp = explode('.', str_replace(',','.', $inn));
    $rub = number_format($tmp[ 0], 0,'','-');
    if ($rub== 0) $out[] = $nol;
    // нормализация копеек
    $kop = isset($tmp[1]) ? substr(str_pad($tmp[1], 2, '0', STR_PAD_RIGHT), 0,2) : '00';
    $segments = explode('-', $rub);
    $offset = sizeof($segments);
    if ((int)$rub== 0) { // если 0 рублей
        $o[] = $nol;
        $o[] = morph( 0, $forms[1][ 0],$forms[1][1],$forms[1][2]);
    }
    else {
        foreach ($segments as $k=>$lev) {
            $sexi= (int) $forms[$offset][3]; // определяем род
            $ri = (int) $lev; // текущий сегмент
            if ($ri== 0 && $offset>1) {// если сегмент==0 & не последний уровень(там Units)
                $offset--;
                continue;
            }
            // нормализация
            $ri = str_pad($ri, 3, '0', STR_PAD_LEFT);
            // получаем циферки для анализа
            $r1 = (int)substr($ri, 0,1); //первая цифра
            $r2 = (int)substr($ri,1,1); //вторая
            $r3 = (int)substr($ri,2,1); //третья
            $r22= (int)$r2.$r3; //вторая и третья
            // разгребаем порядки
            if ($ri>99) $o[] = $str[100][$r1]; // Сотни
            if ($r22>20) {// >20
                $o[] = $str[10][$r2];
                $o[] = $sex[ $sexi ][$r3];
            }
            else { // <=20
                if ($r22>9) $o[] = $str[11][$r22-9]; // 10-20
                elseif($r22> 0) $o[] = $sex[ $sexi ][$r3]; // 1-9
            }
            // Рубли
            $o[] = morph($ri, $forms[$offset][ 0],$forms[$offset][1],$forms[$offset][2]);
            $offset--;
        }
    }
    // Копейки
    if (!$stripkop) {
        $o[] = $kop;
        $o[] = morph($kop,$forms[ 0][ 0],$forms[ 0][1],$forms[ 0][2]);
    }
    return preg_replace("/\s{2,}/",' ',implode(' ',$o));
}
 
/**
 * Склоняем словоформу
 */
function morph($n, $f1, $f2, $f5) {
    $n = abs($n) % 100;
    $n1= $n % 10;
    if ($n>10 && $n<20) return $f5;
    if ($n1>1 && $n1<5) return $f2;
    if ($n1==1) return $f1;
    return $f5;
}
А теперь как функцию
num2str
добавить в файл шаблона модуля, чтобы цена отображалась прописью?
Надіслати
Поділитися на інших сайтах


  • 2 years later...

 

а можно как-то сделать условие, чтоб первое значение всегда с большой буквы было? например Восемь тысяч двести рублей 00 копеек

Надіслати
Поділитися на інших сайтах


а можно как-то сделать условие, чтоб первое значение всегда с большой буквы было? например Восемь тысяч двести рублей 00 копеек

:first-letter в css не подходит ?

Надіслати
Поділитися на інших сайтах

а можно как-то сделать условие, чтоб первое значение всегда с большой буквы было? например Восемь тысяч двести рублей 00 копеек

в php есть отличная функция ucfirst

return ucfirst(trim(preg_replace('/ {2,}/', ' ', join(' ',$out))));
Надіслати
Поділитися на інших сайтах

 

в php есть отличная функция ucfirst

return ucfirst(trim(preg_replace('/ {2,}/', ' ', join(' ',$out))));

 

к сожалению, не помогло.. все равно с маленькой буквы пишется текст

Надіслати
Поділитися на інших сайтах


Конечно!!!!! UTF8

if(!function_exists('mb_ucfirst')) {
    function mb_ucfirst($str, $charset = 'utf-8') { 
    		return mb_strtoupper(mb_substr($str, 0, 1, $charset), $charset).mb_substr($str, 1, mb_strlen($str, $charset), $charset); 
    }
}
И положите ее в system/helper/utf8.php

заменив ucfirst на mb_ucfirst

Надіслати
Поділитися на інших сайтах

Конечно!!!!! UTF8

if(!function_exists('mb_ucfirst')) {
    function mb_ucfirst($str, $charset = 'utf-8') { 
    		return mb_strtoupper(mb_substr($str, 0, 1, $charset), $charset).mb_substr($str, 1, mb_strlen($str, $charset), $charset); 
    }
}

 

спасибо! вставила код в самом начале файла utf8.php... надеюсь правильно))) по крайней мере помогло

Надіслати
Поділитися на інших сайтах


  • 7 months later...

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.