Archive

NetCommonsモジュールを(無理矢理)作成

最近NetCommonsにちょっとずつ触れています。

使い方も内容もまだほとんど分かりませんが、手探りで非常に簡単なモジュールを作ってみようと思います。

無理矢理モジュールディレクトリを作成する

モジュールは html/webapp/modules/ ディレクトリの下に配置されています。 そこで、ここに無理矢理testというディレクトリを作成します。モジュールはtestです。

install.iniを作成する

次にbbsとかmenuとかのモジュールを見ると、トップディレクトリに「install.ini」が含まれていますのでそれを参考にします。 以下がinstall.iniの内容になります。2行です。

version = "1.0.0.0"
action_name = "test_view_main"

versionは適当で良いと思います。action_nameはおそらくtestモジュールのデフォルトのアクセス先になるんだと思います。

アクションクラスファイルを作成する

上の例だと最初のアクセス先は

html/webapp/modules/test/view/main/Main.class.php

となるようです。modules以降のディレクトリは上のaction_nameの中の’_'を’/'に置換したものとなっています。 Main.class.phpは最後の”test_view_main”のmainの最初を大文字にしたものですが、これで無いといけないのかどうか分かりません。 ただ他のモジュールは皆このルールに従っているようです。

アクションクラスを編集する

さて、Main.class.phpの中でaction用のクラスをこしらえます。クラスの名前はTest_View_Mainであり、Actionを継承しなければなりません。 また、executeメソッドは必須です。

<?php // html/webapp/modules/test/view/main/Main.class.php の内容
class Test_View_Main extends Action
{
    function execute()
    {
        return 'success';
    }
}

maple.iniを作成する

Mapleはmaple.iniという動作設定ファイルで様々な制御を行なっていきます。

html/webapp/modules/test/view/main/maple.ini

を作成して、内容を

[View]
success = "main.html"

とします。Test_View_Mainクラスにアクセスがあり、executeが’success’を返すとこのmaple.iniの内容に従ってテンプレート’main.html’が呼び出されます。

テンプレートを作成する

このテンプレートの場所はMaple標準だとwebapp/templatesになるらしいですNetCommonsだと

html/webapp/modules/test/templates/default/main.html

となるようです。main.htmlの中は適当に、

<{strip}>
<{* 表示用テンプレート *}>
  Hello,World
<{/strip}>

としておきます。<{strip}>〜<{/strip}>はsmartyの関数らしいです。 タグ間の改行などを取り除きを一行で出力するみたいです。いずれにしてもsmartyの勉強も必要ということです。

モジュール情報を作成する

最後にモジュールの情報を

html/webapp/modules/test/language/japanese/modinfo.ini

に書き込みます。

module_name = "Hello, World"

とモジュール名を設定します。

終了

…最も簡単なモジュールが完成しました。管理者としてログインしモジュール管理からインストールしてみます。インストールして分かるのは、

  • 移動するコンテナにするにはまだ別の仕組みが必要らしい

ということです。

スタイルシートを作成する

main.htmlにスタイルシートを適用したい場合は、上のmaple.iniに

[HeaderInc]
test_css = "test:{$temp_name}/style.css"

を追加します。こうすることによって

html/webapp/modules/test/files/css/default/style.css

がスタイルシートとして読み込まれます。ただしstyle.cssへの直リンクではなく、システムが各モジュールのcssをかきあつめて表示しているみたいです。