Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

ST_RU ты пишешь сам для себя, это так забавно наблюдать

 

мне в среду привезли пакет бухашки http://i1069.photobucket.com/albums/u478/L0ckedmem0ries/blackandwhite/898B3066306D_m5_zpse6094723.gif 

а так я по полгода молчу.

 

ps я вон корсу в ЛС скинул задание... он меня посредником обозвал.

что плохого в том, что есть куча работы и часть отдать на сторону. причем за деньги.

Изменено пользователем ST_RU
Ссылка на сообщение
Поделиться на другие сайты

В итоге у меня получилось так в 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}

Ссылка на сообщение
Поделиться на другие сайты

В итоге у меня получилось так в 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 и не вызывается отдельно нигде.

Ссылка на сообщение
Поделиться на другие сайты

По другому у меня почему то не работает, еще вот эту штуку удалил print_r($o); хотя в посте выше вы  уже исправили)

 

это тестовый вывод был, но и с ним должно работать.

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

Кому нужна украинская версия и вломы переводить (хотя там 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
	    ); 

ЗЫ Автору огромное спасибо и респект. То, что нужно)))

Изменено пользователем filth
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...