プラグインを色々なページに表示する

概要

初期状態でエントリーのサイドバーに表示されているカレンダーを index.php/page/xxx のページで表示させようとして、テンプレートのみを編集しても表示されません。

また、index.php/page/xxx ページに表示させるためのプラグインを index.php/entry のページで表示させようとして、テンプレートのみを編集しても表示されません。

このような場合、プラグインを設定ファイルを編集すれば任意のページに表示させることができます。

詳細

特定のタイミングでプラグインを実行させる

初期状態でエントリーのサイドバーに表示されているカレンダーをページ(index.php/page/xxx)でも表示させる場合を例に、具体例を紹介します。

エントリーのカレンダーを表示している箇所は、テンプレート templates/utility.html にある

<div class="utility">
  <h3>{$plugin_entry_calender_year}年{$plugin_entry_calender_month}月</h3>
  <div class="content">
    <table summary="カレンダー" class="calender">
      <tr>
        <th>日</th>
        <th>月</th>
        <th>火</th>
        <th>水</th>
        <th>木</th>
        <th>金</th>
        <th>土</th>
      </tr>
      ~略~
    </table>
    <ul class="calender">
      <li><a href="{$freo.core.http_file}/entry?date={$plugin_entry_calender_previous}">前の月</a></li>
      <li><a href="{$freo.core.http_file}/entry?date={$plugin_entry_calender_next}">次の月</a></li>
    </ul>
  </div>
</div>

の部分です。これをページ表示用のテンプレート templates/page/default.html に貼り付ければカレンダーが表示されそうですが、実際は表示されません。(中身がカラのカレンダーが表示されます。)

導入されたすべてのプラグインを常に実行していると負荷が増えていくため、プラグインは基本的に、特定のタイミングのみで表示されるように制限されています。

エントリーのカレンダーを表示するプラグインの場合

  • index.phpindex.php/default
  • index.php/entry
  • index.php/category/xxx
  • index.php/view/xx

のようなURLでアクセスされた時のみに実行されるように設定されています。(index.php は、freo内部のプログラムでは index.php/default にアクセスされたとみなされます。)

こういった設定は、プラグインの設定ファイルに書かれています。設定ファイルは libs/freo/plugins/ 内にある、config. から始まるファイルです。エントリーカレンダー表示プラグインの設定ファイルは libs/freo/plugins/config.entry_calender.php なので、これをテキストエディタで開きます。そうすると

//displayファイルの読み込み設定
define('FREO_PLUGIN_ENTRY_CALENDER_LOAD_DISPLAY', 'default,entry,category,view');

という箇所がありますが、これがプラグインの実行タイミングを制御している部分です。

コンマ区切りで defaultentrycategoryview という4つの値が指定されていますが、ここに page を加えると、index.php/page/xxx のようなURLでアクセスした時もプラグインが実行されるようになります。具体的には

//displayファイルの読み込み設定
define('FREO_PLUGIN_ENTRY_CALENDER_LOAD_DISPLAY', 'default,entry,category,view,page');

となります。同じ要領で、URLに応じた値を記述すれば任意のタイミングでプラグインを実行させることができます。

設定例1

エントリーのサイドバーに何かを表示させるプラグインを、ページ(index.php/page/xxx)に表示させる方法です。

エントリーのサイドバーに何かを表示させるプラグインは、大抵の場合

//displayファイルの読み込み設定
define('FREO_PLUGIN_ENTRY_CALENDER_LOAD_DISPLAY', 'default,entry,category,view');

のように、default,entry,category,view が設定されています。ですので page を追加して

//displayファイルの読み込み設定
define('FREO_PLUGIN_ENTRY_CALENDER_LOAD_DISPLAY', 'default,entry,category,view,page');

とすれば、ページにも表示されます。

設定例2

ページに何かを表示させるプラグインを、エントリーのサイドバーに表示させる方法です。

ページに何かを表示させるプラグインは、大抵の場合

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

のように、page が設定されています。ですので default,entry,category,view を追加して

//displayファイルの読み込み設定
define('FREO_PLUGIN_PAGE_ALL_LOAD_DISPLAY', 'page,default,entry,category,view');

とすれば、エントリーのサイドバーにも表示されます。

常にプラグインを実行させる

//displayファイルの読み込み設定
define('FREO_PLUGIN_ENTRY_CALENDER_LOAD_DISPLAY', 'default,entry,category,view');

のような設定部分でプラグインの実行タイミングを制限していますが、この部分を丸ごと削除すると、プラグインが常に実行されるようになります。すべてのページで実行したい場合は削除すればOKですが、複雑な処理をするプラグインの場合、負荷が高くなる可能性があるので注意してください。

特定のタイミングでプラグインを実行させない

これまで「特定のタイミングでプラグインを実行させる」方法を紹介してきましたが、「特定のタイミングでプラグインを実行させない」という設定もできます。例えば

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

と書くと、ページ(index.php/page/xxx以外で常にプラグインが実行されるようになります。LOAD (読み込む)と書かれていた箇所が UNLOAD (読み込まない)に変わっているので注意してください。

「管理ページ以外では常に◯◯を表示する」のように、一部のページ以外で常に何かを表示したい場合などに利用できます。