2011-11-18 49 views
15

我使用Smarty的和我的部分的一個顯示文件名,包括日期,文件大小,上次訪問等等Smarty的修改文件大小

我想如果小於1024,顯示以K文件的大小在MB如果小於1048576等等

數據(文件信息)來自數據庫(名稱,文件大小,日期等)

例如:

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

Smarty中是否有修改器可以做到這一點?

感謝

回答

29

創建的插件目錄中的文件名爲:modifier.filesize.php

再加入此代碼:

<?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]; 
} 
?> 

那麼你可以使用:{$filename.size|filesize}

+3

+1不錯的代碼 –

2

假設你是給大小爲原先以字節爲單位,

試試這個:

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

是$大小小於1024千字節? –

+0

爲什麼downvote?這有效解決了op的問題。給予,宙斯的答案書是更可取的。但請解釋一下。 – KyleP

+0

'{if $ size lt 1024}'表示字節大小不是kb,因此這是您提供的虛假信息。請修復 –