モジュール開発キックスタートガイド

はじめにご挨拶

この非公式のガイドは、たった二つのモジュール(で、うちひとつしか公開してない)しか作ったことがないXOOPS初心者によって書かれたものです。

初心者が、自分自身でもよくわかっていないものについて書いたドキュメントだということをあらかじめ納得した上で読んでください。

え?何でこういうガイドを書いたかって?だってさ、この手のガイドってどこを探してもないじゃん。 (もしこの文書に貢献したい人がいればどんどんやっちゃってください。*1

目次

作業に取り掛かる前に

前提条件:

仕様書

それではさっそく始めよう。 ここではモジュールにアクセスした人に挨拶をするモジュールを一緒に作っていく。 モジュールの機能は少しずつ拡張していくけど, まずは基本的なところから始めてみよう。

Module Name:Greeter(挨拶モジュール)
Module Directory:greeter

モジュールが満たすべき要件

  • メインメニューにモジュール名を表示する
  • 複数の言語をサポートする(当然日本語もね)
  • 訪ねてきたユーザーに「こんにちは」と挨拶する

開発してみよう

ディレクトリの構造

君はとっくの昔にModuleBasicStructureを読んでいて、ディレクトリ及びスケルトンコードも作成しているものと仮定して話を進めていくよ。 もし読んでない場合は, 今すぐ ModuleBasicStructure を読もう。 って、ここまで言っても読まないめんどうくさがりな君のために、ディレクトリの構造を下に示しておこう。大サービスさ(笑):

XOOPS_ROOT/modules/greeter 
                          /language 
                                   /japanese 
                          /templates 

ファイルやディレクトリは後々付け足していくんだけど、とりあえずは上と同じディレクトリの構造にしておくように。

注意: ここから先、ファイル名やディレクトリ名がでてきた場合、特に記述がない場合はXOOPS_ROOT/modules/greeter の相対パスとします。

XOOPS Version について

手始めに以下の内容で /xoops_version.php を作ってみよう:

<?php

$modversion['name'] = _MI_GREETER_NAME;
$modversion['version'] = 1.00;
$modversion['description'] = _MI_GREETER_DESC;
$modversion['credits'] = '';
$modversion['author'] = '<insert name>';
$modversion['help'] = 'help.html';
$modversion['license'] = 'GPL see LICENSE';
$modversion['official'] = 0;
$modversion['image'] = 'greeter_slogo.png';
$modversion['dirname'] = 'greeter';
 
// Admin
$modversion['hasAdmin'] = 0;
$modversion['adminmenu'] = '';
 
// Menu
$modversion['hasMain'] = 1;
 
// Templates
$modversion['templates'][1]['file'] = 'greeter_greet.html';
$modversion['templates'][1]['description'] = 'Greeter Form';
?>

解説

上のファイルを理解するのはほんとに簡単だけど、そのうちのいくつかをあえて解説しておこう。

_MI_ ... ? これってなんだ?

_MI_ で始まるものはすべて /language/japanese/modinfo.phpに配置される言語定義文だ。 このファイルはすぐに次の章で作成するけど、とりあえずは「必要に応じてユーザーに提示されるモジュールの情報」であるということだけ知っておこう。 これらは言語ファイルできちんと定義してあげないといけない。

テンプレート

テンプレートはモジュールをインストールする時にコンパイルされDBに保存される。だから、君の使うたくさんのテンプレートはそれぞれシステムに教えてあげないといけないんだ。

モジュール情報の言語ファイル

次に/language/japanese/modinfo.php を編集して以下の内容を記述してみよう。

<?php

define('_MI_GREETER_NAME', '挨拶モジュール');
define('_MI_GREETER_DESC', 'ユーザーがログインしたときに挨拶をする簡単なモジュールです。');

?>

解説

どうだい?楽勝だろ? 後でもうちょっとこのファイルにも情報を足すけど、文法は全部同じだ。ほんとに簡単さ。もし君にフランス人の友達ができて、フランス語にも対応させたいなぁと思ったときは、/language/french/modinfo.php を作ってあげて、同じ2つのdifine文を付け加えてやるだけでOKだ(もちろん文章はフランス語でね)。こうすることで、もし友達がフランス語でXOOPSを使っていたとしても、挨拶モジュール(Greeter)はフランス語でその名前と説明を表示するわけさ。イカすだろ?

ヘッダ。いわゆる「おまじない」

以下の内容で/header.php を作成しよう:

<?php

require('../../mainfile.php');

?>

これはちょっとした「おまじない」と覚えておくといいよ。

いよいよメインとなるファイルだ(index.php )

いよいよメインとなるindex.phpを書いてみよう。ドキドキしてきたかい?

<?php
require('header.php');

$uname = !empty($xoopsUser) ? $xoopsUser->getVar('uname','E') : _GR_ANONYMOUS;

// ヘッダをインクルードする前に必ずメインのテンプレートを読み込もう。
$xoopsOption['template_main'] = 'greeter_greet.html';

// ヘッダをインクルードする
include(XOOPS_ROOT_PATH.'/header.php');

$xoopsTpl->assign('greeting', _GR_GREETING);
$xoopsTpl->assign('uname', $uname);

// フッタをインクルードする
include(XOOPS_ROOT_PATH.'/footer.php');

?>

解説

どうだい?だんだんコードっぽくなってきただろ? (といってもシンプルなものだけどね)。

$xoopsUser 

/header.php をインクルードするって事はつまり../../mainfile.phpをインクルードするってことなんだ。 そうすることでたくさんの変数やクラスが君のために作成される。 $xoopsUser なんかもそういった変数のひとつだ。 ユーザーがログインすると値がセットされるし、そうじゃない場合は空になる。 つまり、こうすることでユーザーが名前を持っているのか、もしくは匿名ユーザーなのかがわかる仕組みさ。

_GR_ ... ? これってひょっとして言語?

そう、そのとおり! 君の想像したとおり、これも同じように言語定義文で定義される。 でも今度は /language/japanese/modinfo.php の中で定義されてるわけじゃないんだ。なぜってこれはモジュール情報を扱ってるわけじゃないからね。これらはもうちょっと後で作成する/language/japanese/main.php で定義されているんだ。

$xoopsTpl

この変数も /header.phpをインクルードするときに作られる変数のひとつだ。Smarty のclassさ。 Smartyの公式チュートリアル(http://smarty.php.net/crashcourse.php)だと、$xoopsTpl という変数は $smartyとして定義されている。 この変数は君が$xoopsOption['template_main'] = 'greeter_greet.html'で定義したテンプレートのためのSmartyのクラスなんだ。

この機能を完璧に使いこなすためには、君は頑張ってSmartyを勉強しないといけない。 ここでは詳しくは解説しないのけど興味のある人は勉強するといいよ。

XOOPS_PATH.'/header.php' and XOOPS_PATH.'/footer.php'

これは単純でヘッダとフッタということさ。ここで知っておかなきゃならない大切なことは:

きちんとインクルードしないといけない XOOPS_PATH.'/header.php'をインクルードする前に $xoopsTplを使ってはいけない。 すべての $xoopsTpl はヘッダとフッタに挟まれた場所で機能する必要がある。 /language/japanese/main.php

これは /language/japanese/modinfo.php を作ったのと同じくらい簡単さ。以下は内容:

<?php

define('_GR_GREETING', 'こんにちは、 ');
define('_GR_ANONYMOUS','匿名ユーザー');

?>

解説

そうだなぁ、ここでは何もいうことはないなぁ。

/templates/greeter_greet.html

これが実際のSmartyテンプレートファイルさ。HTMLのわかる君ならきっと簡単だろ?

<p>
<{$greeting}> <{$uname}>
</p>

解説

重要: Xoopsでは、すべての Smartyのタグは「<{...}>」となっていて、公式チュートリアルにあるような一般に使われている「{...}」タグとはちょっと異なるんだ。 これは忘れちゃ駄目だよ!「{...}」だときちんと動かないからね。

「<{$greeting}>」は /index.phpの中の命令<$xoopsTpl->assign('greeting', ...)>によって割り当てられた値を取得してるはずだよ。 「<{$uname}>」も同じ仕組みで値が割り当てられているはずだ。

準備はできたかい?

OK. これでモジュールを動かす準備は整ったはずだ。さっそく動かしてみよう! モジュールのインストール方法はここでは説明しないよ(君なら当然知ってるはずだ。) もしここまできちんとテキストにしたがって進んできたら、きっと管理画面のモジュール一覧に「挨拶モジュール」が表示されているはずだ。 とっととインストールして、君のホームページを見てみよう。 どうだい?「挨拶モジュール」 はメインメニューに表示されているかい? さっそくクリックして動くかどうか試してみようぜ!!

きっとこんな文章が表示されているはずだ:

こんにちは、yosha_01

少なくとも僕のところではうまく表示されたよ。 君のところでは君のユーザー名もしくは「匿名ユーザー」という言葉がきっと表示されているはずだ。

最後に

今回の「モジュールの作り方」は以上でおしまい。これからもXoopsModuleDocにどんどん情報を足していって、データベース接続や管理画面の作り方といったトピックについても扱っていくつもりだよ。もし意見や質問がある場合は気軽にjc at cowgar.com までE-mailを送ってくれるとうれしいな<もちろん英語でですよ:訳者>。せっかくだから僕の作ったXoops サイト: http://cowgar.com/ にも遊びにきてよ. 今回作成した「挨拶モジュール」の完全なソースコードがダウンロードできるよ。(きちんとパッケージしてるからインストールも簡単。ダウンロードコーナーからダウンロードしてね。)

それでは、読んでくれてありがとう!!

CoolPops

2003/08/07
Translated by yosha_01 @ $xoops->asGroupware();
WIKI化:ELF

もっと知りたい方は

WEB-LEARNER.com

  • さらに詳しい情報があります。おおっ、AJAXも取り上げてますね。

ご意見をお聞かせください

  • どうでしょう?初心者の方にモジュール作成の第一歩を踏み出していただくのが目的の教科書なんですが役に立ってるでしょうか? -- yosha_01 2003年11月06日 (木) 22:40:13
  • こちらを見ながら既存のphpスクリプトをモジュール化しています。すごく助かりました。ありがとうございます。 -- blues? 2003年11月11日 (火) 22:11:27
  • 超うれしいです!!成果物は是非是非公開してください。モジュール作成の敷居をどんどん低くして行きましょう!! -- yosha_01 2003年11月12日 (水) 22:36:45
  • はじめの一歩!理解できました! -- sndats? 2003年12月11日 (木) 14:57:53
  • どうもうまくいきません。モジュール管理の吹き出しも変です。もう少し点検します。 -- miyokomiki? 2004年01月05日 (月) 00:42:36
  • どなたかうまく動作するファイルをお持ちの方はいませんか?この文書に添付・もしくはリンクしてあげると非常に親切かなぁと思います。 -- yosha_01 2004年01月13日 (火) 01:16:11
  • よっしゃ、いっちょう頑張って作ってみよう!! -- hop? 2004年01月17日 (土) 19:00:31
  • いっちょう気張ってみてください!! -- yosha_01 2004年01月17日 (土) 23:46:44
  • 左下に添付ファイルがあります。ちゃんと動着ました。安心しました。 -- yosha_01 2004年01月26日 (月) 01:02:58
  • モジュール作ってみましたが、本番でインストールできません。画面が真っ白になるんですが、mysql.sql作成に要注意てんというのはありますか? -- hodaka? 2004年02月10日 (火) 20:09:09
  • 自己レスです。原因はsqlファイルサイズが大きすぎたようです。 -- hodaka? 2004年02月11日 (水) 16:40:47
  • sqlファイルのサイズが大きすぎるモジュールってどんなモジュールでしょう?かなり見てみたいです :p -- yosha_01 2004年02月17日 (火) 21:07:12
  • とても助かりますー 日本語化にも参考になりますね。 -- mura_ki? 2004年03月10日 (水) 12:13:38
  • オリジナルのモジュールの作り方に悩んでいましたが、このページできっかけがつかめた気がします。ありがとうございました。 -- michan? 2004年04月29日 (木) 19:08:17
  • すばらしい解説ありがとうございます。現在のコンテンツをxoopsモジュールにすると、簡単にかっこいいサイトが作れます。ありがとうございました。 -- のくす? 2004年07月17日 (土) 12:53:00
  • 役に立ってます、是非ないモジュールを作ります -- 大野? 2004年10月25日 (月) 11:19:55
  • すばらしい貢献です。もっとXoopsが万人に使いやすい環境になるといいですね -- maturyu? 2004年11月02日 (火) 19:49:33
  • これらの開発系文書をまとめて SDK にするというのは、どうでしょう。 -- Lancelot? 2005年01月04日 (火) 05:15:23
  • モジュール開発の入り口としてとてもよいお手本ですね。 -- 雑魚開発者? 2005年03月02日 (水) 15:57:47
  • 初心者ですが勉強してみようという気にさせられました。続編を期待してます。 -- kouichi? 2005年03月06日 (日) 21:22:32
  • なんか通販の[お客様の喜びの声]っぽくなってますね。ここがわからねぇというところは適当に書き足すのがいいと思います。 -- yosha_01 2005年03月14日 (月) 23:32:58
  • 本当にシンプルで、役立ちました!で、早速自分で作ったPHPプログラムをXoopsに移行だ!と思ったのですが・・・複数のページ(PHPファイル)をButtonにて行き来する場合、Xoopsの画面から抜け出てしまいます(自作のページになってしまう)。Xoopsのブロックとして表示させるにはどうすればよいでしょうか?ご存知でしたら教えていただきたいです! -- おぺら? 2005年03月29日 (火) 00:25:52
  • 全てのページにヘッダ/フッタを入れてやらないとダメっすよ。こういう質問はフォーラムに書くと速攻で回答がもらえますよ。 -- yosha_01 2005年04月11日 (月) 02:02:31
  • むむぅ・・・これさえあればあんなに本買う必要なかった・・・。いいです、すごくいいです! -- もうチョイ!? 2005年04月25日 (月) 11:31:18
  • あっ・・書き忘れましたが、管理者メニューの作り方なんかもこーゆーのがあると嬉しいでっす! -- もうチョイ!? 2005年04月25日 (月) 11:32:26
  • ・・ってか、モジュール作成方法に関する全ての情報を体系的に網羅したような文書またはサイトがあったら教えて欲しいです。(←何度もスンマセン・・・だからオレは「もうチョイ」だってーの!) -- もうチョイ!? 2005年04月25日 (月) 11:35:11
  • この情報が欲しかった!!いろいろ本を探してみたけど、ないんですよね。なぜ?? -- 月の輪? 2005年05月04日 (水) 13:40:59
  • うっひゃー、すばらしい解説をありがとうございした。なんだか目覚めそう! -- Yu? 2005年05月17日 (火) 09:25:55
  • Great job! Btw, where's the original document? I'm quite interested. -- Jack Wang? 2005年05月18日 (水) 13:10:56
  • The original document was at http://wiki.xoops.org/wakka.php?wakka=ModuleHowTo. -- yosha_01 2005年05月21日 (土) 10:40:49
  • I am not sure where it is now. Please ask the administrators of WWW.xoops.org, they must know it. Gomen! -- yosha_01 2005年05月21日 (土) 10:42:48
  • って、英語で書く必要ないじゃん、でしょジャックさん。 -- yosha_01 2005年05月21日 (土) 10:45:01
  • 管理画面は特にルールらしいルールもなく皆さん"自由”に書いてた印象があります。 -- yosha_01 2005年05月21日 (土) 10:50:47
  • でも話が前に進むリクエストです。最低限守るべきルールのようなものを書くと良いかも。 -- yosha_01 2005年05月21日 (土) 10:52:05
  • とても参考になりました。ありがとうございます。 -- BOY♂? 2005年05月21日 (土) 11:20:41
  • 既存のモジュールを参考にして、全ての登録ユーザー名を知ることはできてたのに、「私は誰?」が出来ませんでした。お陰で一歩前進できました! -- SeeDa!!? 2005年07月08日 (金) 16:45:08
  • できました。本格的に取り組もうと思っているので、上で紹介のあった、XOOPS MODULE RECIPE を読んでみたいと思います。 -- Shinjiro? 2005年07月13日 (水) 11:26:48
  • XOOPS MODULE RECIPE へのリンクが削除されていたので追加させて頂きました。 -- yosha_01 2005年08月21日 (日) 21:44:55
  • サイト作られた方が来て削除したのであれば、ごめんなさい、また削除してください。 -- yosha_01 2005年08月21日 (日) 21:47:22
  • XOOPS 2.0.12 JPで上記内容を参考にしてみたのですが「・.Aモジュール」という風に文字化けがおきてしまいます。解決方法はありますでしょうか -- 2005年09月29日 (木) 23:36:56
  • ファイルのエンコードがEUC-JPになってないんじゃないかなぁ。 -- yosha_01 2005年09月30日 (金) 15:59:47
  • お返事ありがとうございます。エンコードをEUC-JPにするにはどうすればよいのでしょうか? -- 2005年10月01日 (土) 18:13:32
  • EUC-JPが扱えるエディタが必要ですね。 -- yosha_01 2005年10月04日 (火) 23:45:58
  • http://www.hi-ho.ne.jp/jun_miura/jmedit.htm -- yosha_01 2005年10月04日 (火) 23:46:18
  • 僕はこれがお手軽で気に入っています -- yosha_01 2005年10月04日 (火) 23:46:51
  • 実はXOOPS入れた頃にこのページ見てちょっと感動してたんです。(説明のしかたとか楽しい雰囲気でw)続編も期待してます。 -- comodita? 2005年10月05日 (水) 12:33:38
  • ちょっと質問。/language/japanese/のmodinfo.phpとmain.phpってどう分けるのだろ?とっても中味が似ていて難しいです。←私だけなかな? -- comodita? 2005年10月05日 (水) 12:35:57
  • あ、自己レスです。わかったかも。modinfoってmoduleinfoってことか(笑)ごめんなさい。 -- comodita? 2005年10月05日 (水) 12:40:17
  • とりあえず、第一歩は突破できたみたいです。ありがとうございました。このサンプルを少しいじって感じをつかんだ次に参考になる資料とかHPのおすすめはありますか。 -- おと? 2005年12月22日 (木) 23:17:50
  • あまりにも曖昧模糊としていたモジュールの仕組みがパッと晴れた様な。ありがとう>筆者 -- Wizard? 2006年02月15日 (水) 19:45:55
  • hotwiredのwebmonkeyライクな論調でおもしろいですね(笑)。 -- hare? 2006年03月05日 (日) 00:24:15
  • http://www.web-learner.com/modules/xoops/index.php/index.html -- yosha_01 2006年04月05日 (水) 20:24:01
  • 次の一歩はここがよさそうですよ。 -- yosha_01 2006年04月05日 (水) 20:24:32
  • あと僕は疎いのですが、minahitoさんのツール群とかもよさそうですね。 -- yosha_01 2006年04月05日 (水) 20:25:22
  • 開発してみよう - ディレクトリの構造 > ModuleBasicStructure のリンクが切れています。 -- kou? 2006年04月30日 (日) 22:16:35
  • 筆者さん、ありがとうございます。だいぶ、自己モジュールの作成もだいぶ進展し業務での活用レベルまでもう一歩のところまできています。 -- おと? 2006年06月11日 (日) 21:53:58
  • とりあえずの取っ掛かりとして有用な情報です。この一歩が踏み出せれば、一人で歩き始める準備が出来そうですね。 -- Nigitama? 2006年06月15日 (木) 19:01:02
  • リンク切れが多いみたいですが。。。。もう更新されないのでしょうか -- cocono? 2006年10月14日 (土) 11:17:00
  • いまゲームのやつで、モジュールをやってくださいってでます -- あまの? 2006年10月14日 (土) 19:17:01
  • 最新のCUBEの基本がわからないので、このページの内容が古いのか新しいのかの判断がつきません。 -- yosha_01 2006年10月30日 (月) 00:09:28
  • wiki なので、気が向いた人が修正するなり削除するなりの方向でいいのかなぁ。 -- yosha_01 2006年10月30日 (月) 00:10:07

TECH


*1 というわけで訳してみました:訳者

添付ファイル: filegreeter.zip 860件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-06-14 (木) 21:39:08 (1182d)