フォーラムコンポーネントで問い合わせがあったので書きます。
Joomla!1.5Nativeと書かれたコンポーネントがたくさん出てきている。参考になるコンポーネントはたくさんあるが、よく見て下さい。インストールしてそのコンポーネントのリンクを作ります。そしてそのコンポーネントを開くとそのコンポーネント関連のリンクが、
http://yoursite.com/component/com_コンポーネント名/なんとか
なんてなってないですか?これでも、Nativeなの?私としてはNativeな環境で動くだけじゃなくてその機能もNativeでないとNativeって言えないのじゃないの?。
これは、どういう事かというとJoomla!1.5本体が持っているSEFURLの機能を実装していないということです。そう、上記のように表示されるなら、Joomla!1.0.xと同様か、以下の機能しかないってこと。
そういうエクステンションには穴があるかもしれないと疑ってかかった方が良いくらいだと思う。昨日も、そのあるフォーラムコンポーネントで穴を発見した。最近は、脆弱性をつく攻撃が多いから注意しないと。
Joomla!1.5では、パラメータの保存やランゲージファイルにINIファイルが使われています。
ここでふと気づいたのですが、ランゲージファイルは問題ないでしょうが、パラメータは見られては困るものも出てくるのではないでしょうか。テンプレートのパラメータくらいなら重要な値は無いでしょうが、もしかすると今後エクステンションで重要な値を保存する際にINIファイルを利用するものが出てくるかもしれません。
試しにお使いのテンプレートのparams.iniにアクセスしてみてください。
http://yoursite.com/templates/yourtemplate/params.ini
もう対策されている方もおられるでしょうが、以下のような書き方でhtaccessファイルに追加すると指定したファイルは外部からアクセスできないようにすることができます。
<Files ~ "\.(htaccess|dat|log|csv|ini|xml)$">
Deny from all
</Files>
ついでにdat, log, csv, xmlも追加してみました。
Joomla!1.5では、パラメータをINIファイルに保存したりPHPファイルとして保存したりするメソッドが用意されています。それを使えば作成・保存はもちろんのことパラメータの呼び出しも楽にできるようになっています。その反面それを見せたくないパラメータとして保存しているならば、外部から見ることができないようにすることも大事だと思います。
Joomla!というより一般的なことですが、Joomla!1.5ではデフォルトで利用されているので書いてみました。
Joomla!のエクステンションで一番簡単に作成できるのがモジュールだと思います。もちろん、複雑な処理をするものも作成できるのですが簡単なものならすぐにできます。簡単なモジュールを作ってみましょう。
用意するもの
<h1>Joomla! Module</h1>と出力するだけのmod_example.phpを作成します。
(右ができあがりイメージ)
1.テキストエディタで新規作成し、適当な場所にmod_example.phpと名前をつけて(UTF-8のBOMなし)で保存してください。
2.1.と同様mod_example.xmlを作成してください。
3.現在あるモジュールを開いてみる。たとえば、mod_latestnews.phpを開く。
目につくのは、
// no direct access
defined( '_VALID_MOS' ) or die( 'Restricted access' );
これは、直接このファイルにアクセス(http://yoursite.com/modules/mod_latestnews.php)してもこのファイルを見ることができないようにします。これは必要です。
作成したmod_example.phpに
<?php
// no direct access
defined( '_VALID_MOS' ) or die( 'Restricted access' );?>
と書きます。コピーペーストでOK。
4.?>の後で改行して
<h1>Joomla! Module</h1>
と書きます。
5.mod_examlple.xmlにmod_latestnews.xmlの内容をすべてコピーします。
(コピーが一番簡単に作成できる方法です。)
変更必須のところ
ここだけです。他は、名前が重複したりしても構わないならそのままでOK。
<filename module="mod_example">mod_example.php</filename>
モジュール名を考えるとき(プラグインもコンポーネントも同じ)大文字を使わないでください。大文字を使っても呼び出されるのは、小文字の名前で呼び出されます。
6.完成しました。え!
mod_example.php
<?php
// no direct access
defined( '_VALID_MOS' ) or die( 'Restricted access' );?>
<h1>Joomla! Module</h1>
mod_example.xmlは、mod_latestnews.xmlの内容を一行変更しただけ。
<filename module="mod_example">mod_example.php</filename>
7.作成したmod_example.phpとmod_example.xmlをそのままzip圧縮します。
(二つのファイルを選択して圧縮)
8.インストールして公開。
xmlファイルのname部分を変えていないのでlatest newsという名前のモジュールが二つあるはずです。公開されていない方が今回作成したmod_exampleなので注意してください。
今回はmod_latestnewsをそのまま流用しましたが、パラメータの受け渡しを説明したかったからです。
インストールしたmod_example.phpの<?php ~ ?>の間に下記の行を加えてください。
var_dump($params);
ページを開くとどのようにパラーメータが保持されているかわかります。
パラメータ(設定値)を呼ぶ。
$params->get( 'パラメータ名', デフォルト値 );
または、
$params->get( 'パラメータ名' );
など。
パラメータの指定方法は、xmlファイルをみればわかるでしょう。
今回は、ただ出力するだけのものを作成してみました。 う~んこれなら1分て書いても良かったかな。