Loggix Expanderとは?

「Loggix Expander」とは、Loggix独自仕様の単独ページ作成機能です。データベースにストックしたコンテンツデータではなく、.html.php.txt.textなどの拡張子を持つ静的テキストファイルをコンテンツ部に読み込んで表示します。Weblogスタイルの時系列に流れるログ形式ではない単独ページの作成に利用します。コンテンツ部には、他のプラグインモジュールなどを使った処理結果や、PEARやZend Frameworkなどの他のサードパーティ製ライブラリを使った処理結果を組み込んで表示することも可能です。

【Loggix Expanderのデータファイルの配置例】

  • modules
    • example
      • data (コンテンツファイル用ディレクトリ)
        • default.html (デフォルトで呼び出されるファイル)
        • page1.php (?id=page1で呼び出されるファイル)
        • page2.txt (?id=page2で呼び出されるファイル)
        • page3.text (?id=page3で呼び出されるファイル)
      • index.php (フロントコントローラー)

Expanderモジュールの基盤となる(X)HTMLテーマ(タイトル・メニュー・フッター部分、CSSなど)は、メインのテーマ部分から継承されますが、Expanderモジュールで作ったコンテンツ部分独自のテーマファイルを適用することも可能です。(例:Aboutページを作成し、「そのコーナーだけ(X)HTMLの構成やCSSを変えたい」、という場合など)それをしたい場合は、ターゲットとなるExpanderモジュールの直下に「/theme/」というディレクトリを配置して使用します。

【Loggix Expanderのテーマファイルの配置例】

  • modules
    • example
      • theme (テーマファイル用ディレクトリ)
        • base.html
        • navigation.html
        • archives.html
      • index.php (フロントコントローラー)

各フォーマットの使い方

Expanderモジュールはコンテンツに流し込むテキストファイルのフォーマットを拡張子によって判別し、各フォーマットごとに読み込まれる際の挙動が異なります。ここではそれぞれのフォーマットについての使い方と挙動を解説します。

.html.inc.php.php

通常の(X)HTMLファイルとして読み込みこまれて表示されます。内部に<?php ?>で括られたPHPコードを埋め込むことが可能です。

.txt

整形済みテキストファイルとして読み込まれて表示されます。

.text

Markdownテキストファイルとして読み込こまれ、XHTMLに自動変換されて表示されます。(.htmlファイルと同様、内部にPHPコードを埋め込むことも可能です。) MarkdownとはDaring FireballのJohn Gruber氏が開発した、XHTMLに自動変換されることを想定したテキストフォーマット及びその変換機能です。(↓)

Markdown

Loggixは、そのPHP移植版プラグインであるPHP Markdownを使用しています。

Markdown書類の書き方参考ページ
サンプルMarkdownドキュメント

Expander内でMarkdownを使って記述/表示したサンプルドキュメントです。

Loggix Expanderモジュールのディレクトリ構成

ディレクトリ構成はLoggixのメインディレクトリの構成と同じです。唯一の違いは、「Expander」モジュールは読み込むデータがデータベースではなくプレーンテキストファイルですので、それらのファイルを「data」ディレクトリに入れるようにします。

【Loggix Expanderモジュール構成の例】

  • modules
    • example (接頭辞なし小文字)
      • admin (管理ファイル用ディレクトリ)
      • data (コンテンツファイル用ディレクトリ)
      • images (画像ファイル用ディレクトリ)
      • lang (言語ファイル用ディレクトリ)
      • lib (クラス・ライブラリ用ディレクトリ)
      • plugins (プラグイン用ディレクトリ)
      • theme (テーマファイル用ディレクトリ)
      • index.php (フロントコントローラー)

各ディレクトリは必須ではなく、オプションです。最小限の構成はこのようになります。

【Loggix Expanderモジュール最小構成】

  • modules
    • example (接頭辞なし小文字)
      • data (コンテンツファイル用ディレクトリ)
        • default.html (デフォルトで読み込まれるコンテンツファイル)
      • index.php (フロントコントローラー)

Expanderモジュール作成チュートリアル

実際にExpanderクラスを使った「example」モジュールを作成してみましよう。

STEP 1

まず、前準備として以下の最小構成ファイルを作成します。

  • modules
    • example
      • data
        • default.html
        • test.php
      • index.php
STEP 2

フロントコントローラーファイルとなる「index.php」を開き、以下のように編集します。

<?php
// トップディレクトリへの相対パスを指定します。
$relativePath     = '../..';
// インクルードパスの設定します。
set_include_path($relativePath . '/lib/Loggix/');
// クラスを読み込みます。
require_once 'Application.php';
require_once 'Expander.php';
require_once 'Module/Helloworld.php';
// Loggix_Applicationクラスからインスタンスを生成します。
// これは、ヘッダやメニュー部を継承するために必要です。
$app = new Loggix_Application;
// Loggix_Expanderクラスから新規にインスタンスを生成します。
// これは、「data」内に配置したファイルを処理するのに必要です。
$exp = new Loggix_Expander;
// $appオブジェクトからセッションステータス変数を取得します。
// これは、管理者メニューなどを表示する場合に必要です。
$sessionState = $app->getSessionState();
// ハローワールドクラスからインスタンスを生成
$aLoggixHelloworld = new Loggix_Module_Helloworld;
// $module変数に代入します。
$module['LM']['HelloworldString'] = $aLoggixHelloworld->sayHello();
// $item変数に、タイトル、コンテンツ、を指定します。
// ここではページャーや検索結果などは使用しないので「''」と空にしておきます。
$item = array(
    'title'    => $app->setTitle($module['LM']['HelloworldString']),
    'contents' => $exp->getContent(),
    'pager'    => '',
    'result'   => ''
);
// 先ほど生成したLoggix_Applicationのインスタンス「$appオブジェクト」の
//「display()」メソッドに値を入れます。
$app->display($item, $sessionState);

「default.html」を開き、以下のように編集します。

<h2><?php echo $module['LM']['HelloworldString']?></h2>
STEP 3

ブラウザから、

「http://あなたのLoggixアプリケーションアドレス/modules/example/」

とアクセスしてみてください。以下ののようにコンテンツ部に「Hello, World」と表示されれば成功です。

Hello World

STEP 4

「test.php」を開き、以下のように編集します。

<?php phpinfo();?>

ブラウザから、

「http://あなたのLoggixアプリケーションアドレス/modules/example/index.php?id=test

とアクセスしてみてください。phpinfo()関数が実行され、PHPの情報が表示されれば成功です。

FAQ

Q : Expanderコンテンツの下に、さらにExpanderコンテンツを作れますか?
A : はい。
Expanderコンテンツは入れ子にしたりサイト内のどこにでも配置可能です。
Q : なぜ「Expander」という名前なのですか?
A : 「Expand(拡張)」からとった名称です。
ディレクトリを増やしたり、他のサードパーティ製PHPクラスを簡単に組み込んでコンテンツを拡張したり出来る機能、というコンセプトからこの名前にしました。
Q : 「Expander」コンテンツはLoggixのデータベースやコアクラスに依存しますか?
A : いいえ。
「Expander」コンテンツはLoggixのデータベースやコアクラス、セッションクラス、モジュールクラス等に依存しません。つまり、データベースの事を気にかける事なく、Loggix_ViewクラスとLoggix_Expanderクラスのみでコンテンツを構築することも可能です。例えば、今ご覧になっているこのマニュアルは、Loggix_ViewとLoggix_ExpanderとPEARのHTML_AJAXクラスで作成されています。