ホーム > フォーラム > 開発 > コア開発 > ゲストアクセス時の member.php 読み込みについて

ゲストアクセス時の member.php 読み込みについて
投稿者: nao-pon | 投稿日時: 2006/2/21 10:59 | 閲覧: 19160回
nao-pon
Cube 2.1 の開発お疲れ様です。

遅ればせながら、CVSより最新版を試してみました。

ゲストアクセス時には、kernel/member.php が読み込まれないのですが、これは仕様と考えてよろしいでしょうか?

uid = 0 が所属するグループを取得するために、getGroupsByUser を使用していますが、kernel/member.php を読み込まずに取得する方法があればその方法も知りたいです。

まあ、kernel/member.php を読み込めばいいのですが、XC 2.1 になって、ゲスト時には読み込まなくなったのであれば、作法に従ったほうがよいかと思いまして、質問させていただきます。

コメント(4)

新しいものから | 古いものから | ネスト表示 | RSS feed
Re: ゲストアクセス時の member.php 読み込みについて 
投稿者: minahito | 投稿日時: 2006/2/21 23:05
minahito
こんばんは。

引用:

ゲストアクセス時には、kernel/member.php が読み込まれないのですが、これは仕様と考えてよろしいでしょうか?


実はこれは勘違いで一種の仕様状態になっていたものですが、どうも Legacy のほうを修正して対応するべき項目のようです。

XC21 では、 common.php に相当するロジックがグローバル空間になく、作業時に一時的に使用した変数は全てローカルスコープになり、メソッド終了時に破棄しています。このうち互換動作のために $xoopsUser などは $GLOBALS のハッシュマップに書き込むことで、グローバル空間に登録し、後方互換としています。

それで、 $member_handler というのはその名前からいって、僕らは、「 common.php のグローバルスコープで作業用に使ったために、結果としてグローバル空間に残ったが、これは XOOPS2 においても common.php 内で破棄されることをイメージした変数である」というふうに考えていました。

ところが今日、古いコードに手を入れていて、旧 system module でも $member_handler を xoops_gethandler から取得せずに直接使っている部分を見つけてしまいました。 orz
こうなると、 XC21 でも kernel/member.php の読み込みと $member_handler の宣言も行わなくてはいけないかな、というところです。

ただ、名前があまりにグローバルっぽくない(←なんだそれは)ため、基本的には、 xoops_gethandler('member') で都度取得してご利用いただければと思います。
Re: ゲストアクセス時の member.php 読み込みについて 
投稿者: nao-pon | 投稿日時: 2006/2/22 8:33
nao-pon
引用:
ところが今日、古いコードに手を入れていて、旧 system module でも $member_handler を xoops_gethandler から取得せずに直接使っている部分を見つけてしまいました。 orz


自分がモジュール中で、使うコードの見本にしたのがそこだったかも。

引用:
ただ、名前があまりにグローバルっぽくない(←なんだそれは)ため、基本的には、 xoops_gethandler('member') で都度取得してご利用いただければと思います。


了解しました!その方法で問題ないことを確認しました。

ドキュメントを読みました。XC 2.1 は素晴らしい仕事ですね、感嘆しました!

コーディングに集中できないことも多々あるかとも思いますが、頑張ってくださいね。
Re: ゲストアクセス時の member.php 読み込みについて 
投稿者: minahito | 投稿日時: 2006/2/23 1:32
minahito
こんばんは
まだ修正コミットしていませんが、$member_handler はグローバル変数にも出すことにしました。(^^)
他方、名前がちょっとローカルっぽいので、正式に $xoopsMemberHandler というグローバル変数も出す予定です。

このあたり、再度整理して wiki かドキュメントに出しますね。

引用:

引用:
ところが今日、古いコードに手を入れていて、旧 system module でも $member_handler を xoops_gethandler から取得せずに直接使っている部分を見つけてしまいました。 orz


自分がモジュール中で、使うコードの見本にしたのがそこだったかも。


いくつか他のモジュールでも同様の用途を見つけているので、かなりメジャーな使い方かもしれないですね……把握しておりませんでした、すみません (^^;

コアでも話をしていたのですが、
XoopsMemberHandler はメンバにキャッシュ配列を持っているため、 new 演算子を使ってインスタンスを新たに確保するより、共通のインスタンスを使った方が若干高速になります。
xoops_gethandler() 関数は Flyweight の一種になっていますので、カーネルハンドラ系はこちらから取得していただけると、 new を発行せず、同一インスタンスを使用してハンドラ内のキャッシュをシェアできるので、パフォーマンス的に有利になります。
もちろん、グローバル保証となった $member_handler を使っていただいても構いませんが、個人的には xoops_gethandler から取得した方がベストだと考えています。 ^^
(特に関数内で global $member_handler; とかする場合であれば、 gethandler を使った方が若干締まるのではないかと思います)
Re: ゲストアクセス時の member.php 読み込みについて 
投稿者: nao-pon | 投稿日時: 2006/2/24 1:47
nao-pon
引用:
もちろん、グローバル保証となった $member_handler を使っていただいても構いませんが、個人的には xoops_gethandler から取得した方がベストだと考えています。 ^^


了解です。

私も、Global変数は安易に使わないほうがよいと考えるようになってきましたので、これからは、 xoops_gethandler を使用するように心がけますね。

    投票(0)

    新しいものから | 古いものから | RSS feed
     
    To Top