2011-11-18 4 views
15

私はSmartyのを使用していますし、私のセクションの一つは、日付を含むファイル名、ファイルサイズ、最終アクセスなどを示しています...Smartyの修飾ファイルサイズ

私は少ないし、1024あればK内のファイルのサイズを表示したいです、MB単位未満の場合1048576等...

データ(ファイル情報)がデータベースから来ている(名、ファイルサイズ、日付など)

例:

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

Smartyにこれを行う修飾語がありますか?

おかげ

答えて

29

と呼ばれるプラグインディレクトリにファイルを作成このコード:

<?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

あなたが与えているサイズはもともとバイトであると仮定すると、

これは試してみてください。その後、追加modifier.filesize.php

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

は1024キロバイト未満ですか? –

+0

なぜdownvote? opの質問を効果的に解決します。与えられた、ゼウスの答えの本ははるかに望ましいです。説明してください。 – KyleP

+0

'{$ size lt 1024}'はkbでないバイト単位のサイズを意味します。したがって、これは間違った情報です。 –