2013-03-07 35 views
5

ile okunabilir dosya boyutları Twig şablon sistemi ile okunabilir dosya boyutlarının çıktısını almak için yerleşik bir yol olup olmadığını merak ediyorum.Twig şablon sistemi

<p>This limit is currently set to {{ maxBytes }}</p> 

Nasıl biçimlendirebilirdiniz maxBytes30 GB gibi bir şey görüntülemek için: Şablonumdaki böyle bir şey var ki?

1) sizin için idare edecek bir Twig uzantısını almak:

+1

Bildiğim kadarıyla bunu yapmak için hiçbir tanımlanmış fonksiyon/filtre vardır. Tek çözümünüz [dalmayı uzatmaktır] (http://twig.sensiolabs.org/doc/advanced.html). – cheesemacfly

cevap

18

bunu yerine getirmeye hakkında gidebilir birkaç yol vardır. Bir tek böyle:

https://github.com/BrazilianFriendsOfSymfony/BFOSTwigExtensionsBundle kez yapacağınız etkin sadece yapın:

{{ maxBytes|bfos_format_bytes }} 

Ve bu istediğini verecektir.

2) Tüm bir uzantıyı eklemek istemiyorsanız bunu yapacak bir makro oluşturabilirsiniz. Yani böyle bir şey görünecektir:

{% macro bytesToSize(bytes) %} 
{% spaceless %} 
    {% set kilobyte = 1024 %} 
    {% set megabyte = kilobyte * 1024 %} 
    {% set gigabyte = megabyte * 1024 %} 
    {% set terabyte = gigabyte * 1024 %} 

    {% if bytes < kilobyte %} 
     {{ bytes ~ ' B' }} 
    {% elseif bytes < megabyte %} 
     {{ (bytes/kilobyte)|number_format(2, '.') ~ ' KB' }} 
    {% elseif bytes < gigabyte %} 
     {{ (bytes/megabyte)|number_format(2, '.') ~ ' MB' }} 
    {% elseif bytes < terabyte %} 
     {{ (bytes/gigabyte)|number_format(2, '.') ~ ' GB' }} 
    {% else %} 
     {{ (bytes/terabyte)|number_format(2, '.') ~ ' TB' }} 
    {% endif %} 
{% endspaceless %} 
{% endmacro %} 

Sen koymak ve nasıl burada makro kullanımını nerede hakkında daha fazla bilgi edinebilirsiniz: http://twig.sensiolabs.org/doc/tags/macro.html

9

Ya da, sadece dal uzantısı oluşturmak:

ByteConversionTwigExtension. php

<?php 
// src/AppBundle/Twig/Extension 

namespace AppBundle\Twig\Extension; 


class ByteConversionTwigExtension extends \Twig_Extension 
{ 


    /** 
    * Gets filters 
    * 
    * @return array 
    */ 
    public function getFilters() 
    { 
     return array(
      new \Twig_SimpleFilter('format_bytes', array($this, 'formatBytes')), 
     ); 
    }  

    public function getName() 
    { 
     return 'format_bytes'; 
    } 

    function formatBytes($bytes, $precision = 2) 
    { 
     $units = array('B', 'KB', 'MB', 'GB', 'TB'); 
     $bytes = max($bytes, 0); 
     $pow = floor(($bytes ? log($bytes) : 0)/log(1024)); 
     $pow = min($pow, count($units) - 1); 

     // Uncomment one of the following alternatives 
     $bytes /= pow(1024, $pow); 

     return round($bytes, $precision) . ' ' . $units[$pow]; 
    } 

} 

services.yml

parameters: 
    app.byte_conversion_twig_extension.twig.extension.class: AppBundle\Twig\Extension\ByteConversionTwigExtension 

services: 
    app.byte_conversion.twig.extension: 
     class: %app.byte_conversion_twig_extension.twig.extension.class% 
     tags: 
      - { name: twig.extension } 

Twigh şablonu:

{{ variable | format_bytes }} 
+0

OS olarak okumak için 1024 yerine 1000 (KiB MiB GiB TiB) kullanıldı – Cassiano

+0

KiB'nin KibiByte 1 KiB = 1024 B'ye atıfta bulunduğunu ve KB'nin KiloByte'yi 1KB = 1000 Byte olarak tanımladığını unutmayın. Kilo daima uluslararası sistem biriminde "bin bin" anlamına gelmektedir. Öte yandan, birçok yazılım geliştiricisi (iyi knonw OS'de bile), kabul edilen tanımın herhangi bir hususu olmaksızın tüm üniteleri bir araya getirmektedir. –