plugins:variablegen

NP_VariableGen.php

NP_VariableGenはNucleus変数<%if%>のために用意されたプラグインです。

NP_VariableGetOption, NP_AdvancedVariableGetOptionの後継に当たる(予定の)プラグインです。

:!: このプラグインには不具合が潜在している可能性があります :!:

:!: このプラグインは十分なテストが行われていません。 :!:

General Plugin info
作者NKJG
最新のバージョン0.1.1
入手先http://niku.suku.name/item/524
セキュリティチェック未了

NP_AdvancedVariableGetOptionとの相違点

  • Nucleus 3.3から追加された機能、doIfとdoItemVarに対応しました。
  • プラグインが自動でセットする変数が分離されました。
  • 変数にスタック機能が付加されました

その他、細部も異なります。

インストール方法

  1. zipファイルを展開して、中身をサーバーのプラグインディレクトリにアップロードする
  2. 管理画面からプラグインをインストールする

このプラグインの使い方

このプラグインは内部に変数情報を持ち、それを管理します。表示以外には影響を及ぼしません。

変数は名前である"キー"と、その値で構成されています。変数は表示されておるページでのみ有効で、それを持ち越すことはできません。

このプラグインでできることはおおきく分けて以下のとおりです。

  • 変数のセット・操作
  • 内部の変数を使った擬似的なIf構文
  • Nucleusのスキン変数<%if%>から使用することで内部の変数を使った分岐の実現

これらについてはスキン・テンプレート・アイテムへの記述で記述します。

スキン・テンプレート・アイテムへの記述

構成要素

このプラグインのパラメータは、以下の要素で構成されます。

  • アクション
  • アクションの引数

アクションは動作の内容です。変数を新たにセットする"set"、擬似if文を実現する"if"などが含まれます。

アクションはそれぞれ引数を取ります(引数を必要としないものもあります)。引数は以下のいずれかの形です。

  • 0個以上のプレフィックス + 値または特殊な値
  • 特殊な判断条件

値は文字列で、文字列そのものを表します。

特殊な値とは、プラグインで提供されるもので、対応する文字列に置き換えられます。特殊な値を使用する際はその前に"!"を付けて指定します。

例) "!url"は、表示しているURLに置き換えられます。

プレフィックスは、値の前に付けることで、値を変化させることができます。プレフィックスの後には":"を付けます。

例) "int:100yen"は文字列"100yen"を整数としてみなし、結果として"100"が使用されます。

プレフィックスが複数指定されている場合、それらはあとに付けられたもの(右にあるもの)から順に処理されます。

例) "random:int:100yen"は、まず"100yen"を整数としてみなし、その結果の100を用いて、1から100までの乱数を返します。

特殊な分岐条件はIf構文、擬似If構文でのみ有効な引数です。先頭に"?"を付けて記述します。

通常の記述

変数のセット・操作/擬似If構文を使用する場合、記述は以下のような体裁になります。

<%VariableGen(アクション, 引数1, 引数2)%>
<%Plugin(VariableGen, アクション, 引数1, 引数2)%>

実行される内容はアクションによって異なります。

If文での記述

Nucleusで実装されているIf構文で使用する際は、引数のみの指定になります。

引数が1つの場合

<%If(VariableGen, 引数)%>

引数を1つ指定した場合、その引数が真とみなされる場合、条件式も真になります。

引数の真偽値

引数は以下の条件をすべて満たす場合、真とみなされます。

  • PHPで偽とみなされる値でない
  • 文字列"no"でない

引数が2つの場合

<%If(VariableGen, 引数1, 引数2)%>

引数が2つ指定されている場合、以下の条件のいずれかを満たすとき、条件式が真になります。

  • 片方の引数に特殊な判断条件が指定されていて、もう片方の引数がそれを満たす
  • 両方の引数の値が等しい
  • 両方とも引数の値が偽とみなされる
  • 片方の引数の値が"yes"で、もう片方の引数の値が真とみなされる

hasPluginを使用するIf文

<%If(hasPlugin, VariableGen, 引数)%> // ... A
<%If(hasPlugin, VariableGen, 引数=値)%> // ... B

NucleusではhasPluginを用いてIf文を書くことができます。

値を指定せずに記述した場合(A)、引数の値を変数の名前とみなし、対応する変数の値が真であれば条件式も真になります。

値を指定して記述した場合(B)、引数の値を変数の名前とみなし、対応する変数の値が指定された値と等しければ条件式が真になります。

Nucleus 3.24以前の場合、If文はhasPluginを用いたもののみが使用できます。

アクション

基本的な操作

アクション : set

アクションにsetを指定した場合、引数1の値をキーとし、引数2の値をそのキーに対応した値として保存します。

<%VariableGen(set, foo, bar)%> // 変数fooにbarという値が代入される。
<%VariableGen(set, foo, baz)%> // 変数fooにbazという値が代入される。
// この段階で変数fooの値はbaz。
アクション : add

アクションにaddを指定した場合、引数1の値で指定された変数に、引数2の値を追記します。

<%VariableGen(set, foo, bar)%> // 変数fooにbarという値が代入される。
<%VariableGen(add, foo, baz)%> // 変数fooにbazという値を追記する。
// この段階で変数fooの値はbarbaz。

引数1の値で指定された変数が存在しない場合、このアクションの動作はsetと同じです。

スタック的な操作

以下の2つの操作は、変数を配列として扱います。

アクション : push

アクションにaddを指定した場合、引数1の値で指定された変数を配列とみなし、引数2の値をpushします。

<%VariableGen(set, foo, bar)%> // 変数fooにbarという値が代入される。
<%VariableGen(push, foo, baz)%> // 変数fooにbazという値をpushする。
// この段階で変数fooの値は配列で、最初の値はbar, 2番目の値はbazです。

引数1の値で指定された変数が存在しない場合、このアクションの動作はsetと同じです。

アクション : unshift

アクションにaddを指定した場合、引数1の値で指定された変数を配列とみなし、引数2の値をunshiftします。

<%VariableGen(set, foo, bar)%> // 変数fooにbarという値が代入される。
<%VariableGen(unshift, foo, baz)%> // 変数fooにbazという値をunshiftする。
// この段階で変数fooの値は配列で、最初の値はbaz, 2番目の値はbarです。

引数1の値で指定された変数が存在しない場合、このアクションの動作はsetと同じです。

範囲を指定して操作する

以上の操作、つまり

  • set
  • add
  • push
  • unshift

は範囲を指定して実行することができます。

各アクション名の後に":start"をつけたものが範囲の開始地点に、":end"をつけたものが範囲の終了地点になります。

以下に例を示します。

<%VariableGen(set:start, foo)%>bar<%VariableGen(set:end)%>
// この段階で変数fooの中身はbarです。

これを用いて、任意のNucleus変数を用いた操作が可能です。

<%VariableGen(set:start, foo)%><%itemtitle(xml)%><%VariableGen(set:end)%>

数学的な操作

アクションmath:plusは、引数1の値で指定された変数の値を整数とみなし、引数2の値を整数とみなして加算します。

<%VariableGetOption(set, foo, 4100)%>
<%VariableGetOption(math:plus, foo, 26)%>
// この段階でfooの値は4126です。

同様に、math:subは減算、math:multipleは乗算、math:divideは除算を行います。

すべての計算結果は整数で返されます。

その他の操作

アクション : unset

アクションunsetは引数1の値で指定された変数を削除します。

<%VariableGen(set, foo, bar)%>
<%VariableGen(unset, foo)%>
// この段階で変数fooは存在しない
アクション : invert

アクションinvertは引数1の値で指定された変数の値を逆転させます。

変数の値はPHP上で偽とみなされるとき、および'no'であるときに偽とみなされ、それ以外で真とみなされます。

アクションinvertは変数の値が偽であるときに、新たに'yes'を代入し、それ以外のときに'no'を代入します。

<%VariableGen(set, foo, bar)%>
// この段階で変数fooの値はbarであり、真とみなされる
<%VariableGen(invert, foo)%>
// この段階で変数fooの値のnoであり、偽とみなされる
アクション : output

アクションoutputは引数1の値を出力します。引数1で指定された変数の値でないことに注意してください。

<%VariableGen(output, foo)%>
// 出力結果はfooです。

擬似的なIf構文

NP_VariableGenは擬似的なIf構文をサポートしています。

コアで実装されているIf構文とはいくつかの大きな違いがあります。

実行の有無

Nucleusのコアで実装されているIf構文は、条件式の結果が偽だった場合、対応する範囲のNucleus変数はパースされることなくスキップされます。

<%If(偽である文)%>
<!-- この部分は実行すらされない -->
<%endif%>

NP_VariableGenで実装されている擬似If構文は、条件式の結果に依らず、常に実行されます。

<%VariableGen(if, foo, bar)%><!-- この式の値は偽 -->
<!-- この部分は実行されているが表示されない -->
<%VariableGen(endif)%>

式の判定のタイミング

NP_VariableGenの擬似If構文は、対応する範囲の終了時に条件式の判定を行っています。

<%VariableGen(set, foo, bar)%>
<!-- この段階で変数fooの値はbar -->
<%VariableGen(if, var:foo, baz)%>
  <!-- 条件式『変数fooの値がbazと等しければ真』 -->
  <!-- この段階では条件式は偽だが…… -->
  <%VariableGen(set, foo, baz)%>
  <!-- ここで変数fooにbazを代入 -->
<%VariableGen(endif)%>
<!-- 判定のタイミングはここ -->
<!-- このときfooの値はbazであり、条件式の結果が真になるので、囲まれた範囲が表示される -->

使用可能な場所

Nucleus 3.3現在、スキン変数の<%if%>はスキンでのみ使用可能ですが、擬似if構文は、スキン、テンプレート、コメント・テンプレート、アイテム中で有効です。

擬似If構文関連のアクション

以下のアクションが実装されています。

  • if
  • ifnot
  • else
  • elseif
  • elseifnot
  • endif

特殊な判断条件

特殊な判断条件は、If文、擬似If文で使用できます。先頭に"?"をつけて表現します。

withlinkは、判断対象にHTMLのA要素が含まれる場合に真になります。

<%VariableGen(set:start, html)%>
  <a href="http://google.com">Google</a>
<%VariableGen(set:end)%>
<%If(VariableGen, var:html, ?withlink)%>
  // この条件文は真
<%EndIf%>

preg

pregは正規表現での判定を行います。

?pregの後に続けて正規表現を記述します。

<%VariableGen(set:start, html)%>
  <a href="http://google.com">Google</a>
<%VariableGen(set:end)%>
<%If(VariableGen, var:html, ?preg/google/i)%>
  // この条件文は真
<%EndIf%>

over

overは、判断対象を整数値とみなし、その値がある値以上であれば真になります。

<%VariableGen(set, age, 45)%>
<%If(VariableGen, var:age, ?over20)%>
  // この条件文は真
<%EndIf%>

under

underは、判断対象を整数値とみなし、その値がある値以下であれば真になります。

<%VariableGen(set, age, 18)%>
<%If(VariableGen, var:age, ?under20)%>
  // この条件文は真
<%EndIf%>

プレフィックス

プレフィックスをつけることによって、値の扱い方を指定することができます。現在実装されているプレフィックスは15種類です。

複数のプレフィックスを付けた場合、後(右)に付けられたプレフィックスが先に処理されます。

それぞれのプレフィックスの後には":"を付けます。

プレフィックス : var

プレフィックスvarは、値を変数名とみなし、対応する変数の値を返します。

<%VariableGen(set, foo, bar)%>
<%VariableGen(set, hoge, var:foo)%>
// 変数hogeの値にはこのときfooの値だったbarが入ります。

プレフィックス : first

プレフィックスfirstは、値を変数名とみなし、さらにその変数を配列とみなし、その最初の値を返します。

<%VariableGen(set, foo, bar)%>
<%VariableGen(push, foo, baz)%>
<%VariableGen(first, hoge, first:foo)%>
// 変数hogeの値にはこのときfooの最初の値だったbarが入ります。

プレフィックス : last

プレフィックスlastは、値を変数名とみなし、さらにその変数を配列とみなし、その最後の値を返します。

<%VariableGen(set, foo, bar)%>
<%VariableGen(push, foo, baz)%>
<%VariableGen(last, hoge, first:foo)%>
// 変数hogeの値にはこのときfooの最後の値だったbazが入ります。

プレフィックス : pop

プレフィックスpopは、基本的にlastと同様ですが、取り出した値が配列から削除されます。

プレフィックス : shift

プレフィックスpopは、基本的にfirstと同様ですが、取り出した値が配列から削除されます。

プレフィックス : cookie

プレフィックスcookieは、値をcookie名とみなし、対応する値を取得します。一部の文字は削除されます。

プレフィックス : get

プレフィックスgetは、値をGETのクエリの名前とみなし、対応する文字列を取得します。一部の文字は削除されます。

プレフィックス : post

プレフィックスgetは、値をPOSTのクエリの名前とみなし、対応する文字列を取得します。一部の文字は削除されます。

プレフィックス : request

プレフィックスrequestは、値をクエリの名前とみなし、対応する文字列を取得します。一部の文字は削除されます。

プレフィックス : path

プレフィックスpathは、PATH_INFOの情報を取得することができます。

以下に例を示します。

PATH_INFOがblog/1/category/4の場合、
path:blogの値は1になり、path:categoryの値は4になります。

プレフィックス : random

プレフィックスrandomは、値を整数とみなし、1からその整数までの乱数を返します。

プレフィックス : int

プレフィックスintは、値を整数とみなし、その整数を返します。

プレフィックス : length

プレフィックスlengthは、値を文字列とみなし、その長さを返します。

プレフィックス : yesno

プレフィックスyesnoは、値の真偽値を判定し、真なら'yes'を、偽なら'no'を返します。

プレフィックス : count

プレフィックスcountは、値を配列とみなし、その要素数を返します。

特殊な値

特殊な値はプラグインが自動でセットする値です。先頭に"!"を付けて表現します。

一覧

アクション一覧

名前動作
set変数に値を代入する
add変数に値を追記する
push変数に値をpushする
unshift変数に値をunshiftする
set:start範囲を指定して、変数に値を代入する(開始地点)
add:start範囲を指定して、変数に値を追記する(開始地点)
push:start範囲を指定して、変数に値をpushする(開始地点)
unshift:start範囲を指定して、変数に値をunshiftする(開始地点)
set:end範囲を指定して、変数に値を代入する(終了地点)
add:end範囲を指定して、変数に値を追記する(終了地点)
push:end範囲を指定して、変数に値をpushする(終了地点)
unshift:end範囲を指定して、変数に値をunshiftする(終了地点)
math:plus値で変数を加算する
math:sub値で変数を減算する
math:multiple値で変数を乗算する
math:divide値で変数を除算する
invert変数の値を逆転させる
output値を出力する
unset変数を削除する
if(擬似if構文)
ifnot(擬似if構文)
else(擬似if構文)
elseif(擬似if構文)
elseifnot(擬似if構文)
endif(擬似if構文)

プレフィックス一覧

名前返り値
var変数の値
first変数(配列)の最初の値
last変数(配列)の最後の値
pop変数(配列)の最後の値(配列の要素はひとつ減る)
shift変数(配列)の最初の値(配列の要素はひとつ減る)
cookie対応するcookieの値
get対応するGETクエリの値
post対応するPOSTクエリの値
request対応するGETクエリまたはPOSTクエリの値
pathPATH_INFOで対応する値
random乱数
int整数
length文字列の長さ
yesno真偽値('yes'または'no')
count配列の長さ

特殊な値一覧

名前説明有効な状況
url表示しているURLすべて
uri表示しているURIすべて
skintypeスキン・タイプすべて
skinnameスキンの名前すべて
skinidスキンIDすべて
blog選択されているブログの名前ブログが選択されているとき
blogid選択されているブログのIDブログが選択されているとき
category選択されているカテゴリーの名前カテゴリーが選択されているとき
categoryid選択されているカテゴリーのIDカテゴリーが選択されているとき
itemidアイテム・ページで表示しているアイテムのIDアイテム・ページ
memberメンバー・ページで表示しているメンバーの名前メンバー・ページ
memberidメンバー・ページで表示しているメンバーのIDメンバー・ページ
archive-yearアーカイヴ・ページで表示している年アーカイヴ・ページ
archive-monthアーカイヴ・ページで表示している月アーカイヴ・ページ
archive-dateアーカイヴ・ページで表示している日アーカイヴ・ページ
imagepopup-collection画像のポップアップ・ページで、表示している画像のコレクション画像のポップアップ・ページ
visitor-member閲覧者がメンバーである場合、その名前閲覧者がメンバーである場合
visitor-memberid閲覧者がメンバーである場合、そのID閲覧者がメンバーである場合
item-title表示しているアイテムのタイトルテンプレート内/コメント・テンプレート内/アイテム内
item-itemid表示しているアイテムのIDテンプレート内/コメント・テンプレート内/アイテム内
item-category表示しているアイテムのカテゴリーの名前テンプレート内/コメント・テンプレート内/アイテム内
item-categoryid表示しているアイテムのカテゴリーIDテンプレート内/コメント・テンプレート内/アイテム内
item-author表示しているアイテムの作者の名前テンプレート内/コメント・テンプレート内/アイテム内
item-authorid表示しているアイテムの作者のIDテンプレート内/コメント・テンプレート内/アイテム内
comment-author表示しているコメントの作者の名前コメント・テンプレート内
comment-authorid表示しているコメントの作者のIDコメント・テンプレート内
current対応する範囲擬似If構文の条件式
yes常に'yes'すべて
no常に'no'すべて

特殊な判断条件一覧

名前説明
withlinkHTMLのリンクが含まれる場合真?withlink
preg指定した表現にマッチした場合真?preg/Nucleus$/i
over指定した数以上の場合真?over20
under指定した数以下の場合真?under17

例文

アイテム・ページで、指定されたアイテムを表示している場合のみスキン中のある範囲を表示する

スキン変数<%if%>が使用できます。

<%if(VariableGen, !itemid, 4126)%>
<!-- なにか -->
<%endif%>

指定された範囲にHTMLリンクが存在しない場合、その範囲を表示しない

擬似If構文を使用します。

NP_NoLinkNoDisplay(公開停止)の機能に相当します。

<%VariableGen(if, !current, ?withlink)%>
<!-- なにか -->
<%VariableGen(endif)%>

アイテムのカテゴリーが指定されたものと一致する場合にのみ、テンプレートのある範囲を表示する。

NP_IfCategoryNameIs(公開停止)の機能に相当します。

テンプレート中で、擬似If構文を使用します。

<%VariableGen(if, !item-category, Weblog)%>
<!-- なにか -->
<%VariableGen(endif)%>

テンプレート中のある範囲について、表示、非表示を交互に切り替える

テンプレート中で、擬似If構文とアクションinvertを使用します。

<%VariableGen(invert, toggle)%>
<%VariableGen(if, var:toggle)%>
<!-- なにか -->
<%VariableGen(endif)%>
 
plugins/variablegen.txt · 最終更新: 2011/03/23 21:28 (外部編集)