PowerCMS X ブログ
2026-01-07
PowerCMS X のグローバル・モディファイア「format_size」では、渡された数値を元に適切な単位でファイルサイズを表示できます。
format_size
数字をGB(ギガバイト)、MB(メガバイト)、KB(キロバイト)、Byteいずれかの形式で出力します。
テンプレート・タグ (コア・タグ)
format_size の動作を確認しましょう。
キロバイトはバイトの 1024 倍、メガバイトはキロバイトの 1024 倍、ギガバイトはメガバイトの 1024 倍です。
例えば、204800 バイトは 200 キロバイト、209715200 バイトは 200 メガバイト、214748364800 バイトは 200 ギガバイトとなります。さて、実際に確認してみましょう。
<mt:setvar name="size" value="204800">
<mt:var name="size"> Byte = <mt:var name="size" format_size>
<mt:setvar name="size" value="209715200">
<mt:var name="size"> Byte = <mt:var name="size" format_size>
<mt:setvar name="size" value="214748364800">
<mt:var name="size"> Byte = <mt:var name="size" format_size>
出力はどうなったでしょうか。
204800 Byte = 200KB
209715200 Byte = 200MB
214748364800 Byte = 200GB
期待通りに適切な単位に変換されていますね。
確認した通りグローバル・モディファイア「format_size」を利用することで自動で適切な単位が表示されますが、自動ではなく特定の単位、例えば全て「MB ( メガバイト )」に表示することはできるでしょうか。
結論としては、現在のところ[1] format_size では単位を固定する事はできません。
そこで format_size を利用せずに単位を固定するアプローチを2つ考えました。
グローバル・モディファイア format_size を利用せず、op モディファイアを利用することでテンプレート・タグで計算するアプロ―チです。
メガバイトで計算する場合は次の様なテンプレートとなります。
<mt:setvar name="size" value="20971520">
<mt:setvar name="size_byte" value="$size">
<mt:var name="size" op="/" value="1048576">
<mt:var name="size_byte"> Byte = <mt:var name="size">MB
出力は次の通りです。
20971520 Byte = 20MB
op モディファイアの他にも、mt:math タグを利用して桁を丸めることもできます。
小数点第3位まで表示する場合のサンプルは以下の通りです。
<mt:setvar name="size" value="20971520">
<mt:setvar name="byte_size" value="$size">
<mt:var name="byte_size"> Byte = <mt:math eq="round( x / 1048576, 10 )" x="$size" sprintf="%.3f">MB
出力は次の通りで、小数点第3位までの表示されています。
2097,520 Byte = 20.000MB
サンプルプラグインを作成しましたので、ダウンロードして動作を確認してみてください。
ダウンロード:ModifierFormatSizeMB.zip (1.1KB)
利用方法は設置してプラググインを有効化するだけです。
プラグインを有効化するとグローバル・モディファイア「format_size_mb」が利用できるようになります。
format_size_mb は『単位が「MB ( メガバイト )」になる』こと以外は format_size と同じですので、以下の様に利用できます。
なお、format_size と同様に値に数値を指定すると表示する小数桁を指定できます。
<mt:setvar name="size" value="204800">
<mt:var name="size"> Byte = <mt:var name="size" format_size_mb="3">
<mt:setvar name="size" value="209715200">
<mt:var name="size"> Byte = <mt:var name="size" format_size_mb="3">
<mt:setvar name="size" value="214748364800">
<mt:var name="size"> Byte = <mt:var name="size" format_size_mb="3">
出力は次の通りで、全て MB に統一された表記となりました。
204800 Byte = 0.195MB
209715200 Byte = 200.000MB
214748364800 Byte = 204800.000MB
グローバル・モディファイア「format_size_mb」の実態は ModifierFormatSizeMB.php 内の filter_format_size_mb メソッドです。
独自のプラグインを作成される際に参考としていただけましたら幸いです。
カテゴリー:テンプレート作成Tips | 技術情報
投稿者:たはかし