Динамическое изменение классов таблицы CGridView
Динамическое изменение классов таблицы CGridView
Для изменения класса строк таблицы в CGridview yii1 можно воспользоваться следующим шаблоном:
'rowCssClassExpression' => function($row, $data) {
// $row - номер строки
// $data - модель данных
if($data->amount > 0){
return 'success';
}
return 'none';
},
Данный обработчик возвращает название класса для тега < t r > таблицы.
X19 Ошибка 4 — неверная подпись. Возможное решение
X19 Ошибка 4 — неверная подпись. Возможное решение
Внезапно появилась проблема при отправке X19 запросов в Webmoney. Ответ выглядел как-то так:
Error step 4 — проверка подписи не прошла. Ошибка при проверке подписи ClientPlanStr
Далее кусок запроса.
Поискав возможные пути решения в интернете нашел в чем может быть дело — в неверной обработке функции hex2dec специальной математической библиотеки, которая формирует подпись к WMXI Webmoney интерфейсам.
Скрипт автоматизации FaucetBox
Скрипт автоматизации FaucetBox
FaucetBox — система микроплатежей биткойн. Позволяет в автоматическом режиме проводить выплаты биткойн и сатоши при помощи специального API.
Мною был разработан и внедрен специальный скрипт по выдаче сатоши бонусов через равные промежутки времени.
Скрипт позволяет задать таргетинг по странам и IP адресам стран + настроить количество сатоши, которое необходимо выплачивать через какой-то промежуток времени.
Анонимные функции в 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";
},
),
Функция IP to Сountry на PHP
Функция IP to Сountry на PHP
Достаточно часто требуется с входящего IP адреса клиента определить страну на лету.
Это требуется как для финансовых так и для простых новостных сервисов или порталов.
Самих сервисов IP2Country достаточно много, также в сети имеются базы данных стран и их диапазоны IP адресов.
Ниже представлена функция парсинга одного из сервисов. На вход поступает IP, на выходе английское наименование страны:
Форматирование денежной суммы PHP
Форматирование денежной суммы PHP
Удобная функция:
$amount = number_format($amount, 0, ',', ' ');
Вход: 100500
Выход: 100 500
Портфолио. Система управления квартирами
Портфолио. Система управления квартирами
Задача: разработать систему учета проданных, построенных квартир в строящихся домах одной компании. Необходимо иметь возможность добавлять новые квартиры, подъезды, этажи и количество квартир. На каждую квартиру сделать возможность прописать ее характеристики и статус покупки, сделать вывод карты подъездов и дать управление домами менеджерами. Система должна работать в интранете компании.
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 подгрузку данных.
Функция перевода в рукописную сумму 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;
}
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.