2011-11-18 12 views
15

estoy usando Smarty y uno de mi sección muestra los nombres de archivo, incluyendo fechas, tamaño de archivo, último acceso, etc ...modificador de Smarty tamaño del archivo

Quiero mostrar el tamaño del archivo en K si menos de 1024 , en MB si es inferior a 1048576 etc ...

los datos (información de archivo) proviene de la base de datos (nombre, tamaño de archivo, fecha, etc ...)

ejemplo:

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

¿Hay algún modificador en Smarty que haga esto?

Gracias

Respuesta

29

crear un archivo en el directorio plugin llamado: modifier.filesize.php

a continuación, añadir este código:

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

entonces puede usar: {$filename.size|filesize}

+3

+1 código agradable y ordenado –

2

Suponiendo que el tamaño le está dando es originalmente en bytes,

intente esto:

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

¿es $ size menos de 1024 kilobytes? –

+0

¿por qué el voto a favor? esto resuelve efectivamente la pregunta de Op. Sys. dado, el libro de la respuesta de zeus es mucho más preferible. pero por favor explique – KyleP

+0

'{if $ size lt 1024}' significa tamaño en bytes no kb, por lo tanto, esta es información falsa que usted proporciona. por favor, corregir –