PowerCMS X ブログ

2026-01-07

グローバル・モディファイア format_size の単位を固定したい

PowerCMS X のグローバル・モディファイア「format_size」では、渡された数値を元に適切な単位でファイルサイズを表示できます。

format_size

数字をGB(ギガバイト)、MB(メガバイト)、KB(キロバイト)、Byteいずれかの形式で出力します。

テンプレート・タグ (コア・タグ)

グローバル・モディファイア:format_size

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 の単位を固定したい

確認した通りグローバル・モディファイア「format_size」を利用することで自動で適切な単位が表示されますが、自動ではなく特定の単位、例えば全て「MB ( メガバイト )」に表示することはできるでしょうか。

結論としては、現在のところ[1] format_size では単位を固定する事はできません。

そこで format_size を利用せずに単位を固定するアプローチを2つ考えました。

  1. テンプレート・タグで計算する
  2. 独自のグローバル・モディファイアをプラグインで実装する

1. テンプレート・タグで計算する

グローバル・モディファイア 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

2. 独自のグローバル・モディファイアをプラグインで実装する

サンプルプラグインを作成しましたので、ダウンロードして動作を確認してみてください。

ダウンロード:ModifierFormatSizeMB.zip (1.1KB)

利用方法は設置してプラググインを有効化するだけです。

  1. ModifierFormatSizeMB.zip をダウンロード
  2. 解凍した ModifierFormatSizeMB プラグインをサーバーに設置
  3. プラグイン管理画面で ModifierFormatSizeMB プラグインを有効化

プラグインを有効化するとグローバル・モディファイア「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 メソッドです。

独自のプラグインを作成される際に参考としていただけましたら幸いです。

脚注

  1. 記事執筆時点で最新バージョンは PowerCMS X ver.4.04 です。[^1]

カテゴリー:テンプレート作成Tips | 技術情報

投稿者:たはかし

ブログ内検索

アーカイブ


日本語
ふりがな付き
English
简体中文
繁體中文
한국어