概要
スキン変数<%If(hasPlugin,pluginName,optionName=value)%>用のプラグインです。このプラグイン自体はオプション情報を保持するだけで何もしません。このプラグインとスキン変数の<%If%>を併用することで、スキンに変化をつけることを目的としています。
このプラグインはNP_VariableGetOption、NP_IfCategoryNameIs、NP_NoLinkNoDisplayの後継という位置にあります。
ダウンロード
NP_AdvancedVariableGetOption ver.0.0.1
注意
このプラグインに対するテストは十分ではありません。使用の際は十分に注意してください。
使い方
変数について
このプラグインは以下のような変数を使います。
<%AdvancedVariableGetOption(mode, scope, value)%>
各パラメータの情報は以下のとおりです。
- mode
- 動作モードです。この値で、この変数の動作を指定します。
- デフォルトでは"set"です。
- 各モードについては後述します。
- scope
- オプションの名前です。ここでは"スコープ"と呼ぶことにします。スコープを使い分けることで複数のオプションを同時に使用することができます。
- デフォルトでは"global"です。
- 予約されたスコープ名があります(後述)。
- value
- オプションの値です。
- デフォルトでは""です。
- 予約された値があります(後述)。
オプションを指定する
このプラグインはオプションの保存にDBを使用していません。なので、指定したオプションの値をページ間で持ち越すことはできません。ご注意ください。
オプションの指定には以下、4つの方法が存在します。
- 変数の引数で指定する
- 変数で挟むことで指定する
- GETのパラメータで指定する
- パスの一部として指定する (FancyURLモードのみ)
変数の引数で指定する
もっとも単純な方法です。
<%AdvancedVariableGetOption(set, testOption, This is test.)%>
modeの値を"set"とし、このように記述することで、オプションの値を設定することができます。
この例では"testOption"というオプションの値に"This is test"が指定されます。
変数で挟むことで指定する
やや複雑な方法ですが、長い文字列を指定することができます。
<%AdvancedVariableGetOption(startset, testOption)%>
This is test.
I love test forever!
<%AdvancedVariableGetOption(endset)%>
modeが"startset"である変数から、modeが"endset"である変数までがオプションの値にセットされます。この記述は表示に影響されません。(この例の場合でも、"This is test..."がスキン中に現れることはありません。)
この例では"testOption"というオプションの値に
This is test. I love test forever!
が指定されます。
指定のネスト
範囲による指定はネストさせることが可能です。
GETのパラメータで指定する
ページを表示しているURLの、クエリ部分が自動でセットされます。
http://example.com/?itemid=10
上のようなURLの場合は"itemid"というオプションの値に"10"がセットされます。
ただし、セットされる文字には制限があり、スコープ・値ともに使用できる文字は半角英数と、","、"."、"/"、"_"、"-"、"%"だけになります。
パスの一部として指定する (FancyURLモードのみ)
FancyURLモードを使用している場合は、パスの一部が自動でセットされます。
http://example.com/blog/3/category/2
上のようなURLの場合は"blog"というオプションの値に"3"、"3"というオプションの値に"category"... のように、順番にセットされ、パスの最後では"yes"がセットされます。
セットされる文字にはGETのパラメータで指定する場合と同様の制限があります。
その他の指定
乱数の指定
modeを"setrandom"にすると、1からvalueで指定した数値までの乱数が値としてセットされます。
指定の追記
"set"の代わりに"add"をmodeに指定することで、すでにセットされている値に、新しい値を追記することができます。
"startadd"、"endadd"、"addrandom"も同様に使用できます。
指定の反転
modeに"invert"を指定すると、すでにセットされている値が"no"や""の場合、またはまだ値がセットされていない場合に新しく"yes"がセットされ、それ以外の場合に"no"が指定されます。
オプションを利用する
オプションの値を出力する
modeを"output"にすることでセットされているオプションの値をそのまま出力することができます。
<!-- 例 -->
<%AdvancedVariableGetOption(set,testOption,This is test.)%>
<%AdvancedVariableGetOption(output,testOption)%><!-- ここで"This is test."と出力されます。 -->
if文での利用
Nucleus標準のスキン変数、<%if%>のパラメータとして使用することができます。
<!-- 例 -->
<%AdvancedVariableGetOption(set, testOption, true)%>
<%if(hasplugin, AdvancedVariableGetOption, testOption=true)%>
<!-- 表示されます -->
<%else%>
<!-- 表示されません -->
<%endif%>
擬似if文での利用
テンプレートでは利用できない<%if%>の代わりに、擬似的なif機能が搭載されています。
<!-- 例 -->
<%AdvancedVariableGetOption(set, testOption, true)%>
<%AdvancedVariableGetOption(if, testOption, true)%>
<!-- 表示されます -->
<%AdvancedVariableGetOption(else)%>
<!-- 表示されません -->
<%AdvancedVariableGetOption(endif)%>
modeの値として
- "if"
- "ifnot"
- "else"
- "elseif"
- "elseifnot"
- "endif"
が使用できます。長くなるのでそれぞれの説明は割愛します。
擬似if機能とNucleus標準のifとの違い
基本的にNucleus標準のif機能のほうがパフォーマンスがいいです。
Nucleusのif機能は式の結果で表示しなくなった部分の変数のパースを行いません。一方でこのプラグインの擬似if機能は一度全てパースした上でその部分を非表示にしているのみだからです。
特殊なscope
特殊なスコープは現在7つ存在します。
yes
常に"yes"がセットされています。
no
常に"no"がセットされています。
item-category
テンプレート変数とコメント・テンプレート変数の擬似if文などで使用できます。値にはアイテムのカテゴリー名が入ります。
item-author
テンプレート変数とコメント・テンプレート変数の擬似if文などで使用できます。値にはアイテムの作者名(shortname)が入ります。
comment-author
コメント・テンプレート変数の擬似if文などで使用できます。値にはコメントの投稿者の名前が入ります。
comment-memberid
コメント・テンプレート変数の擬似if文などで使用できます。値にはコメント投稿者のメンバーIDが入ります。メンバーからでないコメントの場合には0が入ります。
current
擬似If文でのみ使用可能です。対応する擬似ifの範囲そのものが値になります。
特殊なvalue
特殊なvalueには2種類存在します。
scope-......
"scope-"のあとにスコープを書くと、そのスコープの値を参照します。
<%AdvancedVariableGetOption(set,testOption,true)%>
<%AdvancedVariableGetOption(set,testOptionB,scope-testOption)%>
special-withlink
擬似if文でのみ使用可能です。
オプションの値にHTMLのa要素が含まれていると結果が真になります。
更新履歴
ver.0.0.1 (2006/10/16)
- ゴミファイルが混入していたのを削除 (バージョン変わらず)
ver.0.0.1 (2006/10/07)
- バグフィックス (special-withlinkが有効ではなかった)
- 仕様変更 (valueのデフォルトを""に)
ver.0.0.0 (2006/10/06)
- 最初の公開