Pull to refresh

Comments 13

Еще можно размер определять более красиво (вычитано в комментариях на php.net):

$units = array(' B', ' KB', ' MB', ' GB', ' TB');
for ($i = 0; $size > 1024; $i++) $size /= 1024;
return round($size, 2).$units[$i];
или вот так

function print_traf($input, $dec=2) {
$prefix_arr = array(« b», « Kb», « Mb», « Gb», « Tb»);
$value = round($input, $dec);
$i=0;
while ($value>1000) { $value /= 1000; $i++; }
$return_str = round($value, $dec).$prefix_arr[$i];
return $return_str;
}
Всё-таки лучше делить на 1024 ;)
1000 или 1024 — это обычно зависит от условий.
некоторые ISP считают, что 1 Mb = 1000 b, а некоторые 1024.
вот и в каждом частном случае приходится устанавливать свою константу.
мальчики, не ссорьтесь:

public static function GetPrettyBytes($bytes, $precision = 1) {
static $suffix = array ('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB');
$index = floor(log($bytes + 1, 1024)); // + 1 to prevent -INF
return sprintf ("%0.{$precision}f %s", $bytes / pow (1024, $index), $suffix[$index]);
}
Возникла необходимость перевести один проект с обычного блочного шаблонизатора на smarty для удобства верстальщика, и возник ряд проблем. Задача проста — вынести полностью весь html и оформление в шаблоны.

Проект крупный и имеет много типов данных для вывода, например очки игрока, их нужно оформлять красным цветом если они отрицательные, зеленым если положительные и серым если равны нулю. Сейчас это реализует php функция, которая возращает название соответствующего стиля. Эта функция используется так же для оформления и других типов данных.

Я начал переписывать на смарти конструктор таблиц(списков), чтобы верстальщик сам мог управлять логикой представления, но столкнулся с проблемой, что в smarty не предусмотрено описание пользовательских функций на самом же smarty-языке, т.о. выходит, что повторяющуюся логику оформления(как в случае с цветами) для каждого типа данных описывать каждый раз нужно заново, либо жестко описывать её на PHP, что недопустимо, т.к. лишает верстальщика возможности управлять логикой вывода.

Сопсно вопрос — как это можно решить? можно как нибудь внедрить в smarty возможность использования описанных на smarty-языке функций?

P.S. одно решение этой проблемы я нашел, но оно мне совсем не по душе.
Насколько помню — в smarty можно передавать не только данные, но и объекты.
Передайте объект и в шаблоне вызывайте его метод.
У меня вывод размера файла вот так нарисован =)

function smarty_modifier_fsize($s) {
$fn = array(«байт», «Кб», «Мб», «Гб»);
return round($s/pow(1024, ($a = floor(log($s, 1024)))), 2)." ".$fn[$a];
}

проще уже, имхо, некуда… Стоит ли говорить, что языковой массив можно сделать внешним, если уж так хочется?
Неплохо. Спасибо.
Продолжайте, пожалуйста =)
Все почти работает, но вот когда комментариев от 5 и дальше, все равно пишет «комментария»!!! почему??
даже переставляю местами слова, третья форма в упор не работает! выводит «комментария» и все...(
Sign up to leave a comment.

Articles

Change theme settings