【问题标题】:Smarty Modifier filesizeSmarty 修改器文件大小
【发布时间】:2012-01-01 10:02:11
【问题描述】:

我正在使用 Smarty,我的一个部分显示了文件名,包括日期、文件大小、上次访问等...

如果小于 1024,我想以 K 显示文件的大小,如果小于 1048576,我想以 Mb 显示文件大小等...

数据(文件信息)来自数据库(名称、文件大小、日期等...)

例如:

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

Smarty 中是否有任何修饰符可以做到这一点?

谢谢

【问题讨论】:

    标签: php size smarty


    【解决方案1】:

    在插件目录中创建一个名为: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}

    【讨论】:

      【解决方案2】:

      假设您提供的大小最初以字节为单位,

      试试这个:

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

      【讨论】:

      • $size 是否小于 1024 KB?
      • 为什么投反对票?这有效地解决了 op 的问题。鉴于,宙斯之书的答案更可取。但请解释一下。
      • {if $size lt 1024} 表示以字节为单位的大小而不是 kb,因此这是您提供的错误信息。请修复
      猜你喜欢
      • 1970-01-01
      • 2013-08-08
      • 1970-01-01
      • 2013-04-03
      • 2011-09-25
      • 2012-04-12
      • 2019-07-27
      • 2018-06-19
      • 2016-12-31
      相关资源
      最近更新 更多