ST_RU Опубликовано 16 июля, 2015 Жалоба Поделиться Опубликовано 16 июля, 2015 (изменено) ST_RU ты пишешь сам для себя, это так забавно наблюдать мне в среду привезли пакет бухашки http://i1069.photobucket.com/albums/u478/L0ckedmem0ries/blackandwhite/898B3066306D_m5_zpse6094723.gif а так я по полгода молчу. ps я вон корсу в ЛС скинул задание... он меня посредником обозвал.что плохого в том, что есть куча работы и часть отдать на сторону. причем за деньги. Изменено 16 июля, 2015 пользователем ST_RU Цитата Ссылка на сообщение Поделиться на другие сайты
kuvila1 Опубликовано 16 июля, 2015 Жалоба Поделиться Опубликовано 16 июля, 2015 В итоге у меня получилось так в api/disign.php добавляем две функции перез дакрытием последней скобки public 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[] = $this->morph($ri, $forms[$offset][ 0],$forms[$offset][1],$forms[$offset][2]); $offset--; } } // Копейки if (!$stripkop) { $o[] = $kop; $o[] = $this->morph($kop,$forms[0][0],$forms[0][1],$forms[0][2]); } return preg_replace("/\s{2,}/",' ',implode(' ',$o)); } public 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; } Затем добавляем строки по аналогии $this->smarty->registerPlugin('modifier', 'num2str', array($this, 'num2str')); $this->smarty->registerPlugin('modifier', 'morph', array($this, 'morph')); затем в order_print.tpl прописываем {$order->total_price|num2str} Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 16 июля, 2015 Жалоба Поделиться Опубликовано 16 июля, 2015 Это же копипаст из статьи мишани, автор ты вообще не адекватен, абсолютный ноль... Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 17 июля, 2015 Автор Жалоба Поделиться Опубликовано 17 июля, 2015 В итоге у меня получилось так в api/disign.php добавляем две функции перез дакрытием последней скобки Затем добавляем строки по аналогии $this->smarty->registerPlugin('modifier', 'num2str', array($this, 'num2str')); $this->smarty->registerPlugin('modifier', 'morph', array($this, 'morph')); затем в order_print.tpl прописываем {$order->total_price|num2str} во-первых я не очень понял зачем вы скопировали полностью ф-ю из первого поста, только подняли вверх строки и написали давайте сделаем так. также не понятно зачем регистрировать еще модификатор для функции morph, которая используется для изменения словоформы только внутри api/Design.php и не вызывается отдельно нигде. Цитата Ссылка на сообщение Поделиться на другие сайты
kuvila1 Опубликовано 17 июля, 2015 Жалоба Поделиться Опубликовано 17 июля, 2015 По другому у меня почему то не работает, еще вот эту штуку удалил print_r($o); хотя в посте выше вы уже исправили) Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 17 июля, 2015 Автор Жалоба Поделиться Опубликовано 17 июля, 2015 По другому у меня почему то не работает, еще вот эту штуку удалил print_r($o); хотя в посте выше вы уже исправили) это тестовый вывод был, но и с ним должно работать. Цитата Ссылка на сообщение Поделиться на другие сайты
filth Опубликовано 17 августа, 2015 Жалоба Поделиться Опубликовано 17 августа, 2015 (изменено) Кому нужна украинская версия и вломы переводить (хотя там 3 мин. работы но все же) public 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('гривня', 'гривні', 'гривень', 1), // 10^ 0 array('тисяча', 'тисячі', 'тисяч', 1), // 10^ 3 array('мільйон', 'мільйона', 'мільйонів', 0), // 10^ 6 array('мільярд', 'мільярда', 'мільярдів', 0), // 10^ 9 array('трильйон', 'трильйона', 'трильйонів', 0), // 10^12 ); ЗЫ Автору огромное спасибо и респект. То, что нужно))) Изменено 17 августа, 2015 пользователем filth Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.