Latest Posts

Динамическое изменение классов таблицы CGridView

Динамическое изменение классов таблицы CGridView

Для изменения класса строк таблицы в CGridview yii1 можно воспользоваться следующим шаблоном:

'rowCssClassExpression' => function($row, $data) {
                             // $row - номер строки
                             // $data - модель данных
                             if($data->amount > 0){
                                 return 'success';
                             }
                            return 'none';
 },

Данный обработчик возвращает название класса для тега < t r > таблицы.

Read more

X19 Ошибка 4 &#8212; неверная подпись. Возможное решение

X19 Ошибка 4 — неверная подпись. Возможное решение

Внезапно появилась проблема при отправке X19 запросов в Webmoney. Ответ выглядел как-то так:

Error step 4 — проверка подписи не прошла. Ошибка при проверке подписи ClientPlanStr

Далее кусок запроса.

Поискав возможные пути решения в интернете нашел в чем может быть дело — в неверной обработке функции hex2dec специальной математической библиотеки, которая формирует подпись к WMXI Webmoney интерфейсам.

Read more

Скрипт автоматизации FaucetBox

Скрипт автоматизации FaucetBox

FaucetBox — система микроплатежей биткойн. Позволяет в автоматическом режиме проводить выплаты биткойн и сатоши при помощи специального API.
Мною был разработан и внедрен специальный скрипт по выдаче сатоши бонусов через равные промежутки времени.

Скрипт позволяет задать таргетинг по странам и IP адресам стран + настроить количество сатоши, которое необходимо выплачивать через какой-то промежуток времени.

Read more

Анонимные функции в CGridView Yii1

Анонимные функции в CGridView Yii1

Использование анонимной функции позволяет легко работать с ячейками CGridView в Yii1:

Сначала присвоим $this в переменную $controller:

$controller = $this;

Теперь можно писать свою логику в виде анонимной функции прямо при объявлении ячейки в CGridView:

array(
            'name' => 'login',
            'type' => 'raw',
            'value' => function($data, $row) use ($controller) {
                return "Your some function";
            },
        ),

 

Read more

Функция IP to Сountry на PHP

Функция IP to Сountry на PHP

Достаточно часто требуется с входящего IP адреса клиента определить страну на лету.
Это требуется как для финансовых так и для простых новостных сервисов или порталов.

Самих сервисов IP2Country достаточно много, также в сети имеются базы данных стран и их диапазоны IP адресов.

Ниже представлена функция парсинга одного из сервисов. На вход поступает IP, на выходе английское наименование страны:

Read more

Форматирование денежной суммы PHP

Форматирование денежной суммы PHP

Удобная функция:

$amount = number_format($amount, 0, ',', ' ');

Вход: 100500

Выход: 100 500

 

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Read more

Портфолио. Система управления квартирами

Портфолио. Система управления квартирами

Задача: разработать систему учета проданных, построенных квартир в строящихся домах одной компании. Необходимо иметь возможность добавлять новые квартиры, подъезды, этажи и количество квартир. На каждую квартиру сделать возможность прописать ее характеристики и статус покупки, сделать вывод карты подъездов и дать управление домами менеджерами. Система должна работать в интранете компании.

Read more

CJuiAutoComplete пример использования в Yii

CJuiAutoComplete пример использования в Yii

Простой пример использования виджета автоподстановки выражения в зависимости от ввода:

$this->widget('zii.widgets.jui.CJuiAutoComplete',array(

                                    'model' => $model,
                                    'attribute'=>'login',
                                    'source'=>MyModel::getArray(),
                                    'options'=>array(
                                        'minLength'=>'1',
                                    ),
                                    'htmlOptions'=>array(
                                        'style'=>'width:300px;',
                                    ),
                                ));

В качестве модели нужно задать атрибут model, также указать название атрибута в attribute.
Массивом возможных значений нужно заполнить атрибут source — данный атрибут виджета может принимать как заранее подготовленный массив вида array() либо ajax подгрузку данных.

Read more

Функция перевода в рукописную сумму PHP

Функция перевода в рукописную сумму PHP

Еще очень давно нашел классную функцию для перевода суммы товара в пропись. Актуально для бухгалтерии и заключении договоров.

Как пример, на вход функции отдаете num2str(7.38), получаете: семь целых 38 сотых.

Код функции ниже:

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^-2
            array('целых',    'целых',     'целых',     0), // 10^ 0
            //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;
    }

 

Read more

AjaxLink и jQuery параметр

AjaxLink и jQuery параметр

Код ниже может поставить динамические параметры значения одного из элемента в ajax post,get через метод AjaxLink для последующей передачи обработчику:

echo CHtml::ajaxLink('Получить SMS',CController::createUrl('default/action'),
array(
  'type' => 'POST',
  'data'=> 'js:{ "data": $("#some_input_id").val() }',
  'update' => '#results',
));

Тем самым данные из #some_input_id.val() отправятся как имя data методом POST на обработчик default/action.

Read more