【freo】【freo講座】【初心者の為のfreoテンプレート編集講座】【基本編(06)】演算子を使った条件式(発展)
前回の続きです。
条件式の書き方を引き続き解説します。
演算子を使った条件式(発展)
前回は、ある変数に値が入っているかどうか、つまり、変数の値の存在自体を判断する条件式の書き方でしたが、今回は、その変数の値の内容がどうなのかを判断するときに利用する条件の書き方を解説します。
テンプレートを編集する際、私はよくこっちを使います。
多分、前回解説した基本的な条件式は、freoのそもそもの機能を使うときには不可欠なもので、既にテンプレート中によくある書き方なのですが、今回解説する発展的な条件式は、freoを自分らしく使いこなしたい人、自分だけの条件式を書きたい人などが良く使うことになる条件式である気がします。
変数の値の内容を、他のなにかと比べてどう違うのかを判断しようという条件式なので、
<!--{if $ある変数 演算子 他のなにか}-->
こんな書き方になります。
実際に見てみたほうがわかりやすいと思うので、さっさと説明に移ります。
(4)ある変数の値が他のなにかと等しくない場合を示す条件式の書き方
<!--{if $ある変数 != 他のなにか}-->
と書くと、ある変数の値が他のなにかと等しくない場合を示すことができます。
他のなにかが変数である場合は、単純に「$他の変数」のように記述してください。
他のなにかが文字列である場合は、「'他のなにか'」として他のなにかを''(シングルクォーテーション)で囲んでください。
具体的に解説しますので、[freo/templates/internals/pages/default.html]の95行目を見てください。
と書かれています。
まずは、練習もかねて、$page.trackbackの変数の意味を調べます。
freo公式サイト→各種説明→データベース構成の解説→本体のテーブル構成ページを開き、ページ格納テーブルを見てみてください。
「trackback」というフィールドがあって、その格納データの項目を見ると、「トラックバックの受付」と書かれています。
また、補足の項目には、「open」「closed」「view」という3つのステータスが書かれています。
では今度は、freoの管理画面にログインし、ページ登録画面を開いてください。
登録フォームの下の部分に、「トラックバックの受付」という項目があり、「受け付ける」「受け付けない」「表示のみ」という3つの中から選択することができるようになっています。
つまり、$page.trackbackとは、そのページがトラックバックを受け付けているかどうかが記録されているフィールドで、その値としては、「受け付けるつまりopen」「受け付けないつまりclosed」「表示のみつまりview」のいずれかが登録されているということがわかりました。
ワンポイント
ちなみに、このフィールドは必須項目です。
空欄であることはありません。
どこを見ればわかるかっていうと、freo公式サイト→各種説明→データベース構成の解説→本体のテーブル構成ページ→ページ格納テーブルのヌルの項目です。
初心者のためのテンプレート編集講座(1)で、この表の見方を説明していますが、ヌルという項目はそのフィールドが必須かそうでないかを表しています。
ヌルがYESでなく空欄なので、$page.trackbackの値が空欄であることはなく、必ず「open」「closed」「view」のいずれかの値が入っていることがわかります。
また、管理画面のシステム→設定管理→ページの設定画面で、ページにトラックバックを受け付けるかどうかの初期値を設定することができるので、ページ登録時に個別にトラックバックを受け付けるかどうかの設定を変えていなければ、$page.trackbackには初期値が登録されているはずです。
さて、改めて先刻の条件式を見てみます。
これだけ見ると、なんとなく、<!--{もしトラックバックの受付状況が「受け付けない」 だったら}-->に見えます。
そこで重要なのが、演算子の部分です。
条件式の意味を理解するのには、演算子をよく確認しなければなりません。
今回は、「!=」という演算子が使われています。
前回、「~でない」という意味の演算子として、「!(またはnot)」という演算子があるということを解説しました。
今回のイコールの前に「!」がついていることに着目してください。
「!」は「not」という意味なので、「!=」はノットイコール、つまり、左辺と右辺が等しくないという意味になります。
よって、この条件式の意味は、
となります。
(5)ある変数の値が他のなにかと等しい場合を示す条件式の書き方
<!--{if $ある変数 == 他のなにか}-->
と書くと、ある変数の値が他のなにかと等しい場合を示すことができます。
他のなにかが変数である場合は、単純に「$他の変数」のように記述してください。
他のなにかが文字列である場合は、「'他のなにか'」として他のなにかを''(シングルクォーテーション)で囲んでください。
今度は、[freo/templates/internals/pages/default.html]の109行目を見てください。
さて、今回も$freo.user.authorityがなにを意味している変数なのかを調べてみましょう。
freo公式サイト→各種説明→データベース構成の解説→本体のテーブル構成ページを開き、ユーザー格納テーブルを見てみてください。
「authority」というフィールドがあって、格納データの項目を見ると、「権限」と書かれています。
また、補足の項目には、「root」「author」「guest」という3つのステータスが書かれています。
では今度は、freo公式→各種説明→各機能の解説→ユーザー管理と閲覧制限についてのページを見てみてください。
そこの説明にあるとおり、freoにログインできるユーザーには、管理者、投稿者、ゲストの3種類があります。
つまり、$freo.user.authorityとは、freoにログインしたユーザーがどの権限を持っているのかが記録されているフィールドで、その値としては、「管理者つまりroot」「投稿者つまりauthor」「ゲストつまりguest」のいずれかが登録されているということがわかりました。
さて、今回の条件式は、複数条件になっています。
分解すると、「$freo.user.authority == 'root'」と「$freo.user.authority == 'author'」の2つの条件で構成されています。
それぞれの変数と値を結ぶ演算子は「==」(イコールが2回繰り返されている)です。
これは、(4)の「!=」とは逆に、今度こそ単純にイコールという意味、つまり、左辺と右辺が等しいという意味で使用してOKです。
よって、この条件式の意味は、
となります。
比較演算子について
とりあえずここまで理解しておけば充分ですが、プラスアルファで覚えておいていただくとよさそうなおまけです。
今回使用した「==」と「!=」は、「and」「or」「not」とは違う種類の演算子です。
条件式の左辺と右辺を比較する演算子なので、比較演算子と呼ばれています。
比較演算子には、他にもいろいろな種類があります。
「~より大きい」を表すものや、「~より小さい」を表すものです。
freoなら基本的に「==」と「!=」だけでも充分ですが、もっと色んな演算子を使いたいなら、他のサイトも参考にしてみてください。
PHPBook:比較演算子と論理演算子
あと、実は比較演算子にも論理演算子と同様に別表記があるので、そちらも念のため表にしておきます。
演算子 | 別表記 | 演算子の意味 |
== | eq | ~と…は等しい |
!= | ne,neq |
~と…は等しくない |
条件の表現の仕方によって演算子を使い分けよう
条件式の書き方として、理解しておくとよさそうなことを参考までに書いておきます。
条件分岐の考え方自体に慣れている方はすっとばしていただいて構いません。
例題として、「太郎君が男の子であったとき、"boy"と表示したい」とします。
これを条件分岐として書いたときに、
太郎君が男の子なら"boy"と表示する
太郎君が女の子でなかったなら"boy"と表示する
のように、何通りかの書き方が考えられます。
どのように書いても構いませんし、ここは書く人の個性が出るところのように思います。
さて、ある結果を得るためには何通りかの条件分岐の書き方があるということを念頭に置いて、改めて(4)と(5)を見てみます。
(4)の例だと、「!=」を使っていますが、「==」を使って、トラックバックの受付状況が「受け付けない」に等しくないという条件を表現することができます。
<!--{if $page.trackback == 'open' or $page.trackback == 'view'}-->
と書けばOKです。
$page.trackbackには、「open」「closed」「view」の3つのうちのどれかが必ず格納されているので、$page.trackbackの値が「close」でないということは、つまりは、$page.trackbackの値が「open」または「view」であるという意味になるわけです。
ただ、<!--{if $page.trackback == 'open' or $page.trackback == 'view'}-->だと無駄に長いので、どうせ同じ意味なら<!--{if $page.trackback != 'closed'}-->でいい気がします。
このように、条件式には複数の表現があるわけですが、キーになるのは演算子です。
演算子を使い分けることができれば、色んな書き方が試せるようになるでしょうし、読めないテンプレートはありません。
テンプレートは誰に見せるわけでもないですし、どのような条件を書いても構わないとは思いますが、ゴチャゴチャしていると後で見直したときに分かりにくくなってしまうので、最終的には自分が分かりやすいように書けばいいと思います。