管理画面のプラグインメニューと設定管理を利用するサンプル

このプラグインについて

管理画面のプラグインメニューと設定管理を利用するサンプルです。

トップページにアクセスされた日時をファイルに記録して管理画面で閲覧するプラグインを作成し、プラグイン作成の流れを解説します。

ダウンロード

以下のリンクからプラグインをダウンロードできます。

導入方法

ファイルのアップロード

config.sample6.phpend.sample6.phppage.sample6.phplibs/freo/plugins/ ディレクトリ内にアスキーモードでアップロードします。

sample6.iniconfigs/plugins/ ディレクトリ内にアスキーモードでアップロードします。

sample6.logfiles/plugins/ ディレクトリ内にアスキーモードでアップロードします。

sample6/templates/plugins/ ディレクトリ内にアスキーモードでアップロードします。

パーミッションの設定

configs/plugins/sample6.ini のパーミッションを 606 に設定します。

files/plugins/sample6.log のパーミッションを 606 に設定します。

完了

ブラウザソフトでfreoの初期ページにアクセスし、sample6.log に日時が記録されれば成功です。

管理者ページにログイン後、管理メニューから「システム」→「設定管理」→「プラグインの設定」→「サンプル6」を選択すると、各種設定を行えます。

また、管理メニューから「プラグイン」→「サンプル6」を選択すると、アクセスされた日時が一覧表示されます。

コード解説

まずは、半角英数字とアンダーバーで任意のプラグインIDを決めます。今回は、プラグインIDは sample6 とします。

config.sample6.php

<?php

//プラグインの名前
define('FREO_PLUGIN_SAMPLE6_NAME', 'サンプル6');

//プラグインのバージョン
define('FREO_PLUGIN_SAMPLE6_VERSION', '0.0.0');

//管理ページの設定
define('FREO_PLUGIN_SAMPLE6_ADMIN', 'sample6');

//pageファイルの読み込み設定
define('FREO_PLUGIN_SAMPLE6_LOAD_PAGE', 'sample6');

//endファイルの読み込み設定
define('FREO_PLUGIN_SAMPLE6_LOAD_END', 'default');

?>

config. + プラグインID + .php」というファイルを作成すると、プラグインの設定ファイルとして扱われます。

FREO_PLUGIN_ + 大文字表記のプラグインID + _NAME」という定数で、プラグインの名前を定義します。これは管理ページのプラグイン一覧などに表示されます。この定義はどんなプラグインを作る場合でも必須です。

FREO_PLUGIN_ + 大文字表記のプラグインID + _VERSION」という定数で、プラグインのバージョン情報を定義します。この定義はどんなプラグインを作る場合でも必須です。バージョン情報の表記方法は自由に決めることができます。(21.21.0.2 など、いずれの形式も可です。)

FREO_PLUGIN_ + 大文字表記のプラグインID + _ADMIN」という定数を定義すると、管理画面の「プラグイン」一覧からプラグインの管理ページへリンクが張られます。この定義はプラグインによっては不要です。今回の場合、リンク先は index.php/sample6 となります。

FREO_PLUGIN_ + 大文字表記のプラグインID + _LOAD_PAGE」という定数を定義すると、page.sample6.php ファイルの読み込みタイミングを制御できます。今回の場合、freo/index.php/sample6 にアクセスしたときのみ page.sample6.php が読み込まれます。

FREO_PLUGIN_ + 大文字表記のプラグインID + _LOAD_END」という定数を定義すると、end.sample6.php ファイルの読み込みタイミングを制御できます。今回の場合、freo/index.php にアクセスしたときのみ end.sample6.php が読み込まれます。(default は初期ページを表します。)

end.sample6.php

<?php

/* メイン処理 */
function freo_end_sample6()
{
  global $freo;

  //アクセスされた日時を取得
  $now = date('Y-m-d H:i:s');

  //日時を記録
  $fp = fopen(FREO_FILE_DIR . 'plugins/sample6.log', 'a');
  fwrite($fp, "$now\n");
  fclose($fp);

  return;
}

?>

end. + プラグインID + .php」というファイルを作成し、そのファイル内で「freo_end_ + プラグインID」という関数を定義すると、プログラム本体の処理が終了した直後に呼び出されます。

今回は、アクセスされた日時を取得して sample6.log に追記しています。定数 FREO_FILE_DIR には、初期状態では files/ という値が格納されています。

page.sample6.php

<?php

/* メイン処理 */
function freo_page_sample6()
{
  global $freo;

  //ログイン状態確認
  if ($freo->user['authority'] != 'root' and $freo->user['authority'] != 'author') {
    freo_redirect('login', true);
  }

  //アクセスされた日時を取得
  $data = array();
  $i    = 0;

  $fp = fopen(FREO_FILE_DIR . 'plugins/sample6.log', 'r');
  while ($line = fgets($fp)) {
    if (++$i > intval($freo->config['plugin']['sample6']['default_limit'])) {
      break;
    }

    $data[] = trim($line);
  }
  fclose($fp);

  //データ割当
  $freo->smarty->assign('plugin_sample6', $data);

  return;
}

?>

page. + プラグインID + .php」というファイルを作成し、そのファイル内で「freo_page_ + プラグインID」という関数を定義すると、プラグインの設定ファイルが読み込まれた直後に呼び出されます。

今回は、ファイルの内容を取得してSmartyの plugin_sample6 に割り当てています。この値は、テンプレートで {$plugin_sample6} と書くと参照できます。

また、$freo->config でプラグインの設定内容を取得しています。ここでいうプラグインの設定とは、config.sample6.php に書かれた設定ではなくて sample6.ini に書かれた設定です。

sample6.ini

;default_limit int(4) "件"

[表示件数]

;表示件数
default_limit = 10

;exit

configs/plugins/ + プラグインID + .ini」というファイルがあると設定ファイルとして認識され、管理メニューの「プラグイン」から設定内容を編集できるようになります。

sample1/default.html

{include file='internals/admin/header.html'}
  <div id="content">
    <h2>サンプル6</h2>
    <p>アクセスされた日時は以下のとおりです。</p>
    <ul>
      <!--{foreach from=$plugin_sample6|smarty:nodefaults item='history'}-->
      <li>{$history}</li>
      <!--{/foreach}-->
    </ul>
  </div>
{include file='internals/admin/footer.html'}

今回のように page. からはじまるプラグインファイルがあると、テンプレートとして「templates/plugins/ + プラグインID + /default.html」というファイルが自動的に読み込まれます。

このファイルはSmartyの文法に従って、自由にコードを記述することができます。なお、page.sample6.php にある return; の直前に

//データ出力
freo_output('plugins/sample6/test.html');

というコードがあると、templates/plugins/sample6/test.html をプラグイン用のテンプレートとして読み込まれます。このように freo_output() 関数を使用すれば、任意のテンプレートを読み込ませることもできます。