2011-11-18 3 views
15

내가 멋지 내 섹션 중 하나가 등 날짜, 파일 크기, 마지막 액세스를 포함하여 파일 이름을 보여줍니다를 사용하고 ... 나는 미만 1,024 경우 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

'{if $ size lt 1024}'는 kb가 아닌 바이트 단위의 크기를 의미하므로 거짓 정보입니다. 수정하시기 바랍니다 –