無料ブログ「rentafree.net」の管理人ブログ

テンプレート特殊構文

どの構文も、不要なスペースは入れられません。


if構文
&&if:条件;
間の文章。
&/if;
if文もどきです。
条件には変数名を入れて値の有無を判別するか、
「変数名=文字列」で変数と文字列の一致を判別できます。
変数の値の有無の判別は、完全な値なしかその他の判別です。数値の0は値ありとなります。
演算子は使えません。



&&if:NextUrl;
「次のページがあります!」
&/if;

変数の値が空の場合は表示されません。


AND
&&if:NextUrl&PrevUrl;
「次のページがあります。前のページもあります!」
&/if;

&で区切ると左辺が不一致なら不一致、左辺が一致なら右辺を確認します。


OR
&&if:NextUrl|PrevUrl;
「次のページ又は前のページがあります!」
&/if;

|で区切ると左辺が一致なら一致、左辺が不一致なら右辺を確認します。

ANDとORは複数連結できます。
その際はANDとORに優先順位はありません。
左から処理していきます。


NOT
&&if:NextUrl&!PrevUrl;
「次のページがあります。前のページはありません!」
&/if;

頭に!つけると逆になります。


文字列比較
&&if:EntryLoopCount=1;
「2番目の記事です!」
&/if;

変数名=文字列
で、一致が条件となります。
文字列には、「:」「;」「&」「|」は使えません。


&&if:!EntryLoopCount=1;
と式の前に「!」を付ければ結果は反転します。


if構文の条件式は最大200byteです。
日本語は基本的に1文字3byteです。


set構文
&&set:ユーザー変数=値;
ユーザー定義の変数に値を代入できます。
set構文は開始構文のみで終了構文は不要です。
ユーザー変数は、_(半角アンダーバー)から始まる半角英数字で、合計2文字から11文字までの文字列限定です。
値として代入できるのは正の整数のみで、
数値以外が代入されようとした場合は0が代入されます。
0から始まる数値が代入されようとした場合は数値として不要な0は省かれます。


&&set:_var=1;
ユーザー変数の値は&$_var;です。

&&set:ユーザー変数=演算式;
+ 加算
- 減算
* 乗算
/ 除算(少数切り捨て)
% 剰余算
の演算が可能です。

演算子に優先順位はなく、
演算子が複数の式の場合は全て左から演算されます。

=に数値が続く場合はまずユーザー変数にその値が代入され初期化されます。
=に変数名が続く場合はユーザー変数の初期値はその変数になります。(変数が数値以外の場合は0)
=に演算子が続く場合はユーザー変数は初期化されずに演算されます。(ユーザー変数が存在しない場合は0)

以降、
演算子+値
の組み合わせでユーザー変数に対して左から順に演算が行われていきます。
算数的には、
[ユーザー変数]=[ユーザー変数][演算子][値]
の様な感じで処理されます。
(=は算数的には等価ですが、等価ではなく代入です。)

値には変数名が利用できます。
値には正の整数しか使えません。

*数値以外の変数で演算しようとした場合。
*9999を超える値で演算しようとした場合。
*ユーザー変数が9999を超えた場合。
*ユーザー変数が0未満の場合。
*ゼロで割ろうとした場合。
は、その時点で演算は終了します。

割り算の結果、少数が発生する場合は切り捨てられます。

簡単な例
&&set:_var=1+1*3;
ユーザー変数の値は&$_var;です。
この場合、
=に続く1でユーザー変数の初期値が1となり、
続く+1でユーザー変数に1が加算され、
続く*3でユーザー変数が3倍されます。
ですので、答えは「6」です。
演算子に優先順位がなく、常に左からなので注意です。

実用例
記事ループにおいてループ偶数回目と奇数回目を判別したい場合に、
&&set:_var=EntryLoopCount%2;
&&if:_var=0;奇数&/if;
&&if:_var=1;偶数&/if;
とすれば、
奇数,偶数,奇数,偶数,奇数,偶数....
となります。
(EntryLoopCountは1回目が0です。)

常にユーザー変数に対して演算が行われ、変数の初期化も省略できるので、
&&set:_var=+1;
のようにすると加算代入のようなこともできます。
(一般的な加算代入とは演算子が逆になるので注意)
足し算以外もできます。


set構文の式は最大200byteです。


EntryLoop構文
&&EntryLoop;
間の文章。
&/EntryLoop;
そのページに表示すべき記事の分だけループします。

EntryLoop構文のネストは無効です。


CommentLoop構文
&&CommentLoop;
間の文章。
&/CommentLoop;
EntryLoop中で使います。
EntryLoop中の現在の記事へのコメントの分だけループします。

この構文は、同じ記事に対しては一度しか実行されません。


TrackbackLoop構文
&&TrackbackLoop;
間の文章。
&/TrackbackLoop;
EntryLoop中で使います。
EntryLoop中の現在の記事へのトラックバックの分だけループします。

この構文は、同じ記事に対しては一度しか実行されません。


TagLoop構文
&&TagLoop;
間の文章。
&/TagLoop;
EntryLoop中で使います。
EntryLoop中の現在の記事に設定されているタグの分だけループします。

TagLoop構文のネストは無効です。


PluginLoop構文
&&PluginLoop数字;
間の文章。
&/PluginLoop数字;
数字で指定されたIDのサイドバーに設定されたプラグインの分だけループします。

PluginLoop構文のネストは無効です。


特殊構文のネスト
&&if:条件;
  &&if:条件;
    間の文章。
  &/if;
&/if;
こんな感じはできません。

&&if:数値:条件;
  &&if:条件;
    間の文章。
  &/if;
&/if:数値;
こんな感じで:を一個はさんで数値を入れると、
構文IDを設定できます。
IDなし又は違うIDの終了文では終了しません。


&&if:1:NextUrl;
  「次のページがあります!」
  &&if:PrevUrl;
    「前のページもあります!」
  &/if;
&/if:1;

使い道はないと思いますが、if以外の構文でも指定できます。