2011-11-18 22 views
15

Tôi đang sử dụng Smarty và một phần của tôi hiển thị tên tệp, bao gồm ngày, kích thước tệp, truy cập lần cuối, v.v ...Smarty Modifier filesize

Tôi muốn hiển thị kích thước của tệp trong K nếu ít hơn 1024 , trong Mb nếu ít hơn 1048576 vv ...

các dữ liệu (thông tin tập tin) xuất phát từ cơ sở dữ liệu (tên, kích thước tập tin, ngày vv ...)

ví dụ:

File    Mime  Size  Date 
Filename1.jpg mime/jpg 14.1Kb  2011/12/12 

Có bất kỳ công cụ sửa đổi nào trong Smarty thực hiện việc này không?

Cảm ơn

Trả lời

29

tạo ra một tập tin trong thư mục plugin gọi là: modifier.filesize.php

sau đó thêm mã này:

<?php 
/** 
* Smarty plugin 
* @package Smarty 
* @subpackage PluginsModifier 
*/ 

/** 
* Smarty replace modifier plugin 
* 
* Type:  modifier<br> 
* Name:  filesize<br> 
* Purpose: show the filesize of a file in kb, mb, gb etc... 
* 
* @param string $ 
* @return string 
*/ 
function smarty_modifier_filesize($size) 
{ 
    $size = max(0, (int)$size); 
    $units = array('b', 'Kb', 'Mb', 'Gb', 'Tb', 'Pb', 'Eb', 'Zb', 'Yb'); 
    $power = $size > 0 ? floor(log($size, 1024)) : 0; 
    return number_format($size/pow(1024, $power), 2, '.', ',') . $units[$power]; 
} 
?> 

thì bạn có thể sử dụng: {$filename.size|filesize}

+3

+1 mã đẹp và gọn gàng –

2

giả định kích thước bạn đang đưa ra là ban đầu bằng byte,

thử điều này:

{if $size lt 1024} 
    {$size} bytes 
{elseif $size lt 1048576} 
    {$size/1024}Kb 
{else} 
... 
{/if} 
+2

có kích thước nhỏ hơn 1024 kilobyte? –

+0

lý do tại sao các downvote? điều này giải quyết một cách hiệu quả câu hỏi của op. đưa ra, cuốn sách của câu trả lời của zeus 'là thích hợp hơn nhiều. nhưng xin hãy giải thích. – KyleP

+0

'{if $ size lt 1024}' có nghĩa là kích thước tính theo byte chứ không phải kb, do đó, đây là thông tin sai lệch mà bạn cung cấp. vui lòng sửa số –

Các vấn đề liên quan