• 虹色ミツバチ
  • freoカスタマイズメモ、テンプレート・プラグイン配布/officeTIPS
検索プラグイン
虹色ミツバチ

> Entry >freo>freo講座>初心者の為のfreoテンプレート編集講座> 【基本編(08)】配列について

【freo】【freo講座】【初心者の為のfreoテンプレート編集講座】【基本編(08)】配列について

freoのテンプレートを編集をする上で、条件分岐と同じくらいよく使うのが、配列です。
まずは、配列とはなんぞや?というざっくりとした解説から始めたいと思います。

尚、このサイトではfreoで使う配列と連想配列を想定しているので、この解説も、smartyを利用したPHPでの配列・連想配列を想定しています。
本当にざっくりと説明しているので、もっと配列への理解を深めたい場合は、他のサイトさんを参考にしてみてください。

参考になりそうな解説はこちら↓

PHPLabo:配列
PHPLabo:連想配列

PHPBook:配列
PHPBook:連想配列

配列と連想配列

まずはバババッと説明してしまうので、読み流してください。

変数配列も、を入れるイレモノです。
ただ、変数には、1つの変数につき1つの値しか格納できませんが、配列では複数の値を一つの配列として管理することができます
$配列」という変数に、「要素A」「要素B」「要素C」…など、複数の値を格納でき、それぞれの要素を分別するのには、キーを使います。
通常の配列では、キーには要素の順番(つまりインデックス)が自動で振られます。
連想配列では、キーにインデックスではなく名前をつけることもできます。

配列とは

では、配列の解説です。

ここに、お皿に乗った果物があったとします。
良く見たら、その果物はリンゴでした。
今回は、果物が乗っているお皿を「{$fruit}」という変数で表すことにします。
変数で表すということはどういうことかっていうと、↓のような表を使うと判りやすいと思います。

説明  変数名
 値     

この表に、変数と値を入れてみます。

果物 $fruit
 値 リンゴ

こうすると、「{$fruit}」としたときに、「リンゴ」という値が表示されます。

では、果物が乗ったお皿が複数あった場合はどうするかを考えてみます。
「$fruit1」「$fruit2」「$fruit3」…と、変数を無限に増やす方法もありますが、一括で管理できると便利です。
そこで、配列を使ってみます。

これまでは1枚しかなかったお皿ですが、今度はどうやら3枚あるようです。
なので、3個分の値が入るように、変数の表を配列の表に変えてみました。

説明 配列名
 値1    
 値2    
 値3    

では、空欄を埋めていこうと思います。
よくよく見たら、お皿にはリンゴ、ミカン、ブドウが乗っていました。
よって、

果物 $fruits
 値1 リンゴ
 値2 ミカン
 値3 ブドウ

こうなります。
$fruitsという配列に、リンゴ、ミカン、ブドウという値それぞれ入っています。
しかしこのままでは、配列を「{$fruits}」と表現したときに、どの値を呼び出せばいいのかわかりません。
そこで、キーが必要になります。

キーというのは、を呼び出すための鍵になるものです。
配列のどこに入っているのかを指定するものです。
通常時では、値の順番キーとして割り振られます。

値の順番のことを、インデックスといいます。
インデックスは、0から始まり、1、2、3と続きます。(ここでは分かりやすくするため全角で書いていますが、実際は半角数字になります。)
上記の例だと、「リンゴ」が1番目の値なのでインデックスが「0」になり、ミカンは2番目なので「1」、ブドウは3番目なので「2」になります。

さて、この0・1・2というインデックスを、上記の表にあてはめてみます。

果物 $fruits
0 リンゴ
1 ミカン
2 ブドウ

こうなります。
これで、全ての項目が埋まりました。

では、実際配列の変数を使って配列の値を呼び出してみます。
配列の値を呼び出すには、下記のように記入します。

{$配列変数[キー]}

自分が欲しい値を引っ張ってくるためには、キーを設定しなければなりません。
配列のキーにはインデックスがふられているので、インデックスを代入します。

例として、「リンゴ」の値を持ってくるにはどう書けばいいかというと、

{$fruits[0]}

こうなります。
そして、「ミカン」を引っ張ってくるには「{$fruits[1]}」、「ブドウ」は「{$fruit[2]}」になります。

連想配列とは

配列のキーにインデックスではなく名前をつけてしまうのが連想配列です。

上で解説した単純な配列だと、どの皿にどの果物が乗っているのか(キー)を、お皿の順番(インデックス)で表現していましたが、今度はお皿自体に名前をつけてみます。
試しに、リンゴのお皿は「apple」、ミカンのお皿は「orange」、ブドウのお皿は「grape」とします。
それを、先刻の表にあてはめてみます。

果物 $fruits
apple リンゴ
 orange ミカン
 grape ブドウ

このようになりました。

連想配列では、値を呼び出すとき

{$配列変数.キー}

と記述します。
通常の配列の時は[](大かっこ)で挟むのに対し、今度は.(ドット)を置くかたちになるので注意してください。
ですので、「リンゴ」を呼び出したい場合は、

{$fruits.apple}

となります。

ここまでで、配列と連想配列についての基本的な考え方の説明は終わりです。
次は、配列がfreoでどのように使われているのか見てみます。

freoでの配列の使用例

[freo/templates/internals/view/default.html]を開いてください。
6行目に、

 <h3><a href="{$freo.core.http_file}/view/{if $entry.code}{$entry.code}{else}{$entry.id}{/if}">{$entry.title}</a></h3>

と書かれています。
<a>タグの中身はエントリーへのリンクになっているのですが、これはタグの中で条件分岐が使われていて、まだタグの中で条件分岐を使う方法をちゃんと解説していないので、とりあえずまるっとスルーするとして、見ていただきたいのは{$entry.title}の部分です。

先ほど連想配列の書き方をご紹介していますが、{$entry.title}はまさにその書き方で書かれています。
{$entry.title}は、{$配列変数.キー}という書き方で書かれているので、「$entry」という配列の中の「title」というキーに格納されている情報が呼び出されるわけです。

じゃあ、「$entry」という配列の「.title」にはなにが格納されているかというと、まあ字を読めばそのまま判るとも思いますが。念のため確認してみます。
freo公式サイト→各種説明→データベース構成の解説→本体のテーブル構成ページを開き、エントリー格納テーブルを見てみると、「title」というフィールドにはエントリーのタイトルが格納されていることがわかります。

他にも、8行目の「$entry.datetime」や31行目の「$entry.memo」なんかもわかりやすい気がします。
テ ンプレートを見てみると、どちらも修飾子がついていますが、とりあえずそれがないものと考えると、「$entry.datetime」は「エントリー配列 の中の日時キーに格納されているデータ」、「$entry.memo」は「エントリー配列の中のファイルの説明キーに格納されているデー タ」ということになります。

配列の表に書くとさしづめこんな感じでしょうか。

エントリー $entry
title タイトル
datetime 日時
memo ファイルの説明

エントリー格納テーブルを見てみると、タイトルやメモ以外にも色んな情報が登録されているのがわかるので、フィールドがあればある程、そのフィールドはキーとして↑の表の行が増えていくわけです。
つまり、エントリーテーブルのフィールドをこの配列の表にあてはめれば、

エントリー $entry
id エントリーID
user_id ユーザーID
created 登録日時
modified 更新日時
approved 承認
restriction 制限
password パスワード
status 状態
display 表示
comment コメントの受付
trackback トラックバックの受付
code コード
title タイトル
tag タグ
datetime 日時
close 公開終了日時
file ファイル名
image イメージ名
memo ファイルの説明
text 本文

こんな感じになって、ざっくりとどんな配列を指定すればどの情報が得られるのかがわかった気になれる気がします。

ワンポイント

ここまでの解説で、「今まで{$英数字}は変数だって言ってたのに、なんだ配列だったのかよ!嘘じゃん!」と思われる方もいらっしゃるかもしれません。
{$英数字.英数字}という表記は、「配列という機能をもった変数である」と思えば楽ちんな気がします。
変数にも種類があって、{$英数字.英数字}という変数は連想配列の変数ですし、{$英数字[数字]}という変数は配列の変数ですし、{$英数字}という変数は単純に変数ということになります。
freoのテンプレートには、他にも{$英数字.英数字.英数字…}のように、「.英数字」がいくつも続いているバージョンもありますが、それは次回に解説しようと思います。

ページ移動

関連記事

ページ上部へ