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

> Entry >freo>freo講座>初心者の為のfreoテンプレート編集講座> 【基本編(13)】テンプレートで利用できる変数を調べよう

【freo】【freo講座】【初心者の為のfreoテンプレート編集講座】【基本編(13)】テンプレートで利用できる変数を調べよう

データベースに登録されている情報を表示するには、テンプレートに変数を記述しなければなりません。
[管理画面→エントリー→エントリー登録]などで表示される本文エディタ内に変数を入力しても、基本的にはデータベースに登録されている情報を表示することはできません。
オプションに登録した内容など、一部本文エディタ内で利用できる変数もあります。)

どの画面に表示したいのか、なにを表示したいのかが決まったら、

どの画面に表示したいのか → 画面のURLから編集すべきテンプレートを調べましょう。
なにを表示したいのか → データベースの値を表示するのに利用するPHPを確認して変数を調べましょう

画面のURLから編集すべきテンプレートを調べよう

前回「freoの画面についての考え方」で説明したとおり、読み込まれるテンプレートはmodeとworkによって決められています。
表示したい画面のURLにmodeとworkが割り当てられているので、それを参考に、テンプレートを探してみます。

freoの基本的な機能で表示する画面のテンプレート

下記の画面はfreoの基本的な機能を利用して表示される画面です。

  • 管理画面(freo/index.php/admin)
  • カテゴリー画面(freo/index.php/category)
  • コメント投稿確認画面(freo/index.php/comment/preview)
  • デフォルト画面(freo/index.php)
  • エントリー画面(freo/index.php/entry)
  • フィード画面(freo/index.php/feed)
  • ファイル画面(freo/index.php/file)
  • フィルター画面(freo/index.php/filter)
  • インフォメーション画面(freo/index.php/information)
  • ログイン画面(freo/index.php/login)
  • ページ画面(freo/index.php/page)
  • プロフィール画面(freo/index.php/profile)
  • ユーザー登録画面(freo/index.php/regist)
  • パスワード再発行画面(freo/index.php/reissue)
  • トラックバック画面(freo/index.php/trackback)
  • ユーザー画面(freo/index.php/user)
  • エントリー個別表示画面(freo/index.php/view/エントリーID)

上記画面のテンプレートは、[freo/templates/internals]フォルダに格納されています。
[internals]フォルダ内に各画面のmodeの名前のフォルダが保存されていますので、その中にある[work]のファイル名のテンプレートを探して下さい。
([work]の名前のテンプレートがない場合は、[default.html]が適用されます。)

プラグインを追加したことで表示できるようになった画面のテンプレート

freoでは、公式・非公式で様々なプラグインが配布されています。
プラグインによっては、専用の画面を表示できるものがあります。
(例:ショッピングカートプラグインなど)

プラグイン専用画面のテンプレートは、[freo/templates/plugins]フォルダに格納されています。
[plugins]フォルダ内に各画面のmodeの名前のフォルダが保存されていますので、その中にある[work]のファイル名のテンプレートを探して下さい。
([work]の名前のテンプレートがない場合は、[default.html]が適用されます。)

データベースの値を表示するのに利用するPHPを確認して変数を調べよう

編集すべきテンプレートがわかったら、早速変数を書いてみましょう。
既にテンプレートで利用されている変数は、同じテンプレート内であればコピー&ペーストで利用可能です。

値を表示するのに利用する変数がわからない場合はPHPを確認して変数を調べてみましょう。
当サイトでは変数一覧をまとめていますので、そちらをご確認いただいても良いと思います。
また、freoまとめWIKIにも変数をまとめたページがあるので、そちらもご確認ください。

細かいことは省いてざっくりと説明してしまいます。

全てのテンプレートで利用できる変数

全てのテンプレートで利用できる基本的な変数は、[freo/libs/freo/common.php]で定義されています。
[common.php]はfreoの機関となる機能を定義しているPHPファイルなのですが、他のPHPとくらべてどこが変数を定義している箇所なのかは初心者にはわかりづらいかもしれません。

freoまとめWIKIに全てのテンプレートで利用できる変数一覧があるので、そちらをご確認ください。

表示している画面由来の変数

表示している画面で利用できる基本的な変数は、表示している画面のPHPで確認することができます。
プラグインを追加することで、プラグイン由来の変数を追加することもできます。

たとえば、デフォルト画面では、デフォルト画面由来の変数の他、デフォルト画面でも利用できると設定されたプラグイン由来の変数も利用できるということです。

まずは、画面由来の変数の設定を確認する方法について解説します。

freoの基本的な機能を利用して表示される画面の場合

下記の画面はfreoの基本的な機能を利用して表示される画面です。

  • 管理画面(freo/index.php/admin)
  • カテゴリー画面(freo/index.php/category)
  • コメント投稿確認画面(freo/index.php/comment/preview)
  • デフォルト画面(freo/index.php)
  • エントリー画面(freo/index.php/entry)
  • フィード画面(freo/index.php/feed)
  • ファイル画面(freo/index.php/file)
  • フィルター画面(freo/index.php/filter)
  • インフォメーション画面(freo/index.php/information)
  • ログイン画面(freo/index.php/login)
  • ページ画面(freo/index.php/page)
  • プロフィール画面(freo/index.php/profile)
  • ユーザー登録画面(freo/index.php/regist)
  • パスワード再発行画面(freo/index.php/reissue)
  • トラックバック画面(freo/index.php/trackback)
  • ユーザー画面(freo/index.php/user)
  • エントリー個別表示画面(freo/index.php/view/エントリーID)

上記画面のテンプレートは、[freo/libs/freo/internals]フォルダに格納されています。
[internals]フォルダ内に各画面のmodeの名前のフォルダが保存されていますので、その中にある[work]のファイル名のPHPを探して下さい。
([work]の名前のテンプレートがない場合は、[default.php]が適用されます。)

freoのプラグインを利用して表示される画面の場合

上記以外のmodeのPHPは、[freo/libs/freo/plugins]フォルダに格納されています。
[plugins]フォルダ内のpage.プラグインID.phpを探して下さい。

変数を設定している個所

どのPHPを見ればいいのかがわかったら、次は変数を設定している個所を探します。
PHPをエディタで開くと、最下部に、

    //データ割当
    $freo->smarty->assign(array(
        'テンプレートで利用できる配列名' => PHP内の配列,
        'テンプレートで利用できる配列名' => PHP内の配列,
        'テンプレートで利用できる配列名' => PHP内の配列,
        'テンプレートで利用できる配列名' => PHP内の配列,
    ));

のように書かれている個所があると思います。
上記が、テンプレートで利用できる変数を格納した配列を設定している個所です。

ワンポイント

プラグイン画面のPHP(page.プラグインID.php)の場合、page.プラグインID.php内に、workごとの機能がそれぞれ記載されています。
プラグイン画面のPHPでは、[function_freo_plugin_プラグインID_workの値(){}]個所を調べて下さい。
たとえば、ショッピングカートプラグイン画面(freo/index.php/catalog)で表示できる変数を調べたい場合は、page.catalog.phpの「function freo_page_catalog_default(){}」内を調べてください。

たとえば、デフォルト画面の場合は[freo/libs/freo/internals/default/default.php]の552~585行目

    //データ割当
    $freo->smarty->assign(array(
        'token'                       => freo_token('create'),
        'entries'                     => $entries,
        'entry_associates'            => $entry_associates,
        'entry_filters'               => $entry_filters,
        'entry_securities'            => $entry_securities,
        'entry_tags'                  => $entry_tags,
        'entry_files'                 => $entry_files,
        'entry_thumbnails'            => $entry_thumbnails,
        'entry_images'                => $entry_images,
        'entry_texts'                 => $entry_texts,
        'entry_count'                 => $entry_count,
        'entry_page'                  => $entry_page,
        'information'                 => $information,
        'information_text'            => $information_text,
        'information_entry'           => $information_entry,
        'information_entry_associate' => $information_entry_associate,
        'information_entry_filter'    => $information_entry_filter,
        'information_entry_security'  => $information_entry_security,
        'information_entry_tags'      => $information_entry_tags,
        'information_entry_file'      => $information_entry_file,
        'information_entry_thumbnail' => $information_entry_thumbnail,
        'information_entry_image'     => $information_entry_image,
        'information_entry_text'      => $information_entry_text,
        'information_page'            => $information_page,
        'information_page_associate'  => $information_page_associate,
        'information_page_security'   => $information_page_security,
        'information_page_tags'       => $information_page_tags,
        'information_page_file'       => $information_page_file,
        'information_page_thumbnail'  => $information_page_thumbnail,
        'information_page_image'      => $information_page_image,
        'information_page_text'       => $information_page_text
    ));

の部分です。
上記で、自分が表示したいと思っている変数が格納されているだろう配列の見当をつけることができます。
左辺の配列にどのような値が格納されているかは、PHP内を右辺の文字列で検索すると書いてあります。

たとえば、上記リストの内[$entries]を検索して、一番最初に[$entries]が登場する部分の近辺を見てみると、

    //エントリー取得
    $stmt = $freo->pdo->prepare('SELECT * FROM ' . FREO_DATABASE_PREFIX . 'entries WHERE approved = \'yes\' AND (status = \'publish\' OR (status = \'future\' AND datetime <= :now1)) AND (close IS NULL OR close >= :now2) ' . $condition . ' ORDER BY' . $order . ' LIMIT :start, :limit');
    $stmt->bindValue(':now1',  date('Y-m-d H:i:s'));
    $stmt->bindValue(':now2',  date('Y-m-d H:i:s'));
    $stmt->bindValue(':start', intval($freo->config['view']['entry_limit']) * ($_GET['page'] - 1), PDO::PARAM_INT);
    $stmt->bindValue(':limit', intval($freo->config['view']['entry_limit']), PDO::PARAM_INT);
    $flag = $stmt->execute();
    if (!$flag) {
        freo_error($stmt->errorInfo());
    }

    $entries = array();
    while ($data = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $entries[$data['id']] = $data;
    }

と書かれています。
HTMLではなくPHPなのでわかりにくいかもしれませんが、これは、

    //エントリー取得
    $stmt = データベースの情報を取得する
            対象:データベース名のentriesテーブル
            条件: approvedが'yes'でありかつ(statusが'publish'または(statusが'future'でありかつdatetimeが:now1以下である))でありかつ(closeが未入力またはcloseが:now2以上) + $condition(このソースよりも上で定義されている検索条件)
表示順:$order(このソースよりも上で定義されている表示順) 件数::startから:limitまで; $stmtのパラメータに値を入れる(':now1'に今の日付を); $stmtのパラメータに値を入れる(':now2'に今の日付を); $stmtのパラメータに値を入れる(':start'に[管理画面→設定管理→エントリーの表示件数] * (現在のページ数 - 1), 数値として); $stmtのパラメータに値を入れる(':limit'に[管理画面→設定管理→エントリーの表示件数], 数値として); $flag = $stmtを実行した結果; もし($flagがない)であれば { エラーを表示する } $entries = array();  空の$entry配列を作成 繰り返す ($dataとして = $stmt実行結果を一件ずつ) { // $stmt実行結果を一件ずつ['id']をキーとして$entries配列に格納処理 $entries[$data['id']] = $data; }

という意味です。
エントリーテーブルからエントリーの情報を取得し、エントリーIDをキーとして$entries配列に格納しています。

見てもよくわからなかった場合は、freo公式サイトのデータベースのテーブル構成を見てみてください。
データベースの各テーブルのフィールド名と内容が記載されています。

プラグインを利用して表示している変数について 

これまで説明した画面由来の変数ではなく、プラグインを利用して表示している変数の場合について解説します。

たとえば、freoには「新着エントリープラグイン」がデフォルトで搭載されており、デフォルト画面・エントリー画面・カテゴリー画面・VIEW画面で新着エントリー一覧を表示することができます。
新着エントリープラグインの変数は、デフォルト画面・エントリー画面・カテゴリー画面・VIEW画面用のPHPではなく、プラグインのPHPで定義されています。

プラグインを利用できる画面について

プラグインを利用できる画面は、[freo/libs/freo/plugins/config.プラグインID.php]で定義されています。
詳しくは、公式サイトの「プラグインを色々なページに表示する」を確認してください。

変数を設定している個所

プラグインの変数を設定しているのは、多くの場合[freo/libs/freo/plugins/display.プラグインID.php]です。
[freo/libs/freo/plugins/display.プラグインID.php]をエディタで開くと、最下部に、

    //データ割当
    $freo->smarty->assign(array(
        'テンプレートで利用できる配列名' => PHP内の配列,
        'テンプレートで利用できる配列名' => PHP内の配列,
        'テンプレートで利用できる配列名' => PHP内の配列,
        'テンプレートで利用できる配列名' => PHP内の配列,
    ));

のように書かれている個所があると思います。
上記が、テンプレートで利用できる変数を格納した配列を設定している個所です。

たとえば、新着エントリー表示プラグインの場合は[freo/libs/freo/plugins/display.entry_recently.php]の185~196行目

    //データ割当
    $freo->smarty->assign(array(
        'plugin_entry_recentries'          => $entries,
        'plugin_entry_recently_associates' => $entry_associates,
        'plugin_entry_recently_filters'    => $entry_filters,
        'plugin_entry_recently_securities' => $entry_securities,
        'plugin_entry_recently_tags'       => $entry_tags,
        'plugin_entry_recently_files'      => $entry_files,
        'plugin_entry_recently_thumbnails' => $entry_thumbnails,
        'plugin_entry_recently_images'     => $entry_images,
        'plugin_entry_recently_texts'      => $entry_texts
    ));

の部分です。
上記で、自分が表示したいと思っている変数が格納されているだろう配列の見当をつけることができます。
左辺の配列にどのような値が格納されているかは、PHP内を右辺の文字列で検索すると書いてあります。

たとえば、上記リストの内[$entries]を検索して、一番最初に[$entries]が登場する部分の近辺を見てみると、

    //エントリー取得
    $stmt = $freo->pdo->prepare('SELECT * FROM ' . FREO_DATABASE_PREFIX . 'entries WHERE approved = \'yes\' AND (status = \'publish\' OR (status = \'future\' AND datetime <= :now1)) AND display = \'publish\' AND (close IS NULL OR close >= :now2) ' . $condition . ' ORDER BY datetime DESC LIMIT :limit');
    $stmt->bindValue(':now1',  date('Y-m-d H:i:s'));
    $stmt->bindValue(':now2',  date('Y-m-d H:i:s'));
    $stmt->bindValue(':limit', intval($freo->config['plugin']['entry_recently']['default_limit']), PDO::PARAM_INT);
    $flag = $stmt->execute();
    if (!$flag) {
        freo_error($stmt->errorInfo());
    }

    $entries = array();
    while ($data = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $entries[$data['id']] = $data;
    }

と書かれています。
HTMLではなくPHPなのでわかりにくいかもしれませんが、これは、

    //エントリー取得
    $stmt = データベースの情報を取得する
            対象:データベース名のentriesテーブル
            条件: approvedが'yes'でありかつ(statusが'publish'または(statusが'future'でありかつdatetimeが:now1以下である))でありかつ(closeが未入力またはcloseが:now2以上) + $condition(このソースよりも上で定義されている検索条件)

            表示順:日付の降順
            件数::limitまで;
    $stmtのパラメータに値を入れる(':now1'に今の日付を);
    $stmtのパラメータに値を入れる(':now2'に今の日付を);
    $stmtのパラメータに値を入れる(':limit'に[管理画面→設定管理→新着エントリープラグイン→表示件数], 数値として);

    $flag = $stmtを実行した結果;
    もし($flagがない)であれば {
        エラーを表示する
    }

    $entries = array();  空の$entry配列を作成
    繰り返す ($dataとして = $stmt実行結果を一件ずつ) {
        // $stmt実行結果を一件ずつ['id']をキーとして$entries配列に格納処理
        $entries[$data['id']] = $data;
    }

という意味です。
エントリーテーブルからエントリーの情報を取得し、エントリーIDをキーとして$entries配列に格納しています。

見てもよくわからなかった場合は、freo公式サイトのデータベースのテーブル構成を見てみてください。
データベースの各テーブルのフィールド名と内容が記載されています。

ページ移動

関連記事

ページ上部へ