みんなの情報交流サイト
ご利用はすべて無料です。
ご自由にお楽しみ下さい。

 
 

掲載の基準は投稿ルールをご覧下さい。画像や動画の貼り方はヘルプをご参照下さい。
 
   

スレッド表示 | 新しいものから <<<前の話題 | 次の話題>>> |
投稿者 掲載内容
掲載日時: 2006/03/17 15:27  
新人
 mailchatの参加者表示について
このたびはダウロードさせていただきいろいろ実験しています。
さて付属のドキュメントを参考にしてカスタムブロックで
参加者の数を表示させることができました。
さらに一歩踏み込んで参加者名も表示させたいのですが
どのようにすればよいのでしょう?
参加者ログについてはindicator.phpあたりに記載が
あるのはわかるんですが、どのようにしたらよいのかわかりません。
どうかご指南いただけますようお願い申し上げます。
掲載日時: 2006/03/18 00:03  
運営事務局
 Re: mailchatの参加者表示について
まりやさん、こんにちは♪

ご希望の内容かどうかわかりませんが、簡単に書くと以下のような感じかな、と思います。モジュールをmailchat0001として複製した場合を想定して、ユーザ名(ハンドル名)を表示するPHPを書きますね。(適宜tableタグtrタグを補って下さい。以下tdの中にハンドル名と人数が返ります。)

 どうぞご参考までに♪


// -----------------------------------------------------------
// 初期設定値
$module_name = "ちゃっとネーム";
$module_dirname = 'mailchat0001'; // 前後のスラッシュは不要です(複製時)
// -----------------------------------------------------------
// メインブロック(入室カウンター返し値)-> $members (ユーザ名返し値)-> $online_user
$online_user=""; // 変数クリア
$log = file('../../modules/'.$module_dirname.'/user.dat'); // トップページから見たファイル位置
$members = count($log);
for($i=0;$i<$members;$i++){
list($name2,$userid2) = split( ",", $log[$i]);
$online_user .= "<option>".$name2; //入室状況表示用に<option>を加えておく
}
// -----------------------------------------------------------
echo "<td align='center' valign='top' nowrap width='33%'>"
."<a href='".XOOPS_URL."/modules/".$module_dirname."/'>"
."<div style='font-size: large; font-weight: bold; margin-bottom: 0; text-shadow: 5px 3px 2px #CCCCCC'>"
.$module_name
."</div></a>";
if ($members >=1 ) { // 1人以上の場合だけ人数表示
echo "<select>".$online_user."</select>&nbsp;"
."<font color='#FF0000'>".$members."人</font>";
} else {
echo "<font color='#666666'>空室</font>";
}
echo "</td>";
// -----------------------------------------------------------



スタイルのshadowはMacユーザへの配慮です。
IEでは表示されませんが、Macだとかっこよくcoolに表示されます。


素敵なインターネットライフをご祈念いたします
コミュネス運営事務局
掲載日時: 2006/03/18 10:47  
新人
 Re: mailchatの参加者表示について
ご教授ありがとうございました。
概ね希望通りとなりましたが、

if ($members >=1 ) { // 1人以上の場合だけ人数表示
echo "<select>".$online_user."</select>&nbsp;"
."<font color='#FF0000'>".$members."人</font>";
} else {
echo "<font color='#666666'>空室</font>";
}

のところで退室しているのにもかかわらず
人数が表示されてしまうのはなぜでしょう?
まだ私のサイトへのアクセスの頻度が少ないので
XOOPSのオンライン状況と同じことが起きているだけなのでしょうか?
掲載日時: 2006/03/18 13:25  
新人
 Re: mailchatの参加者表示について
同じ質問をしようと思ってきましたら、
お話が進んででましたね。
僕のサイト(メインとは別)はまだ構築中ですので
僕しかいませんが、まりやさんと同じように誰も入ってないのに
1と表示されます。
また、TOPページには なにも反映されなくて
チャットページだと人数も名前も表示されます。
因みに
FIREFOXではブルー画面になりますね
ここのチャットにはいっても同じ状態です
掲載日時: 2006/03/18 13:50  
運営事務局
 Re: mailchatの参加者表示について
こんにちは、まりやさん。

> のところで退室しているのにもかかわらず
> 人数が表示されてしまうのはなぜでしょう?

なぞですね?

本体(ここのサイト)に組込まれたものとソースは同じですので、いろいろ実験されてみてはいかがでしょうか。サーバー環境の違いなどもあるのかと思われます。パーミッションの問題や、PHPのバージョン違いもあると思います。

めるちゃっとの入室状況は独自のログファイルから判定していますので、XOOPSのガベージコレクションgc(300)は使っていません。

ガベコレは10分の1の確率でクリアしたり、しなかったり、ランダムシードでの処理ですから、入室状況の正確さを求めるチャットには不向きですし、ガベコレの更新を100%までハネあげると、極端にサーバー負荷が増大する、といったXoops本来の(限界?)のようなものがあります。

独自ログファイルからデータを吸い出して入室状況を計算していますので、PHPのバージョンに応じたfile()関連命令をご自身のマイサーバーに書き換えてみてはいかがでしょうか。

PHPやApacheのバージョンの違いや、またレンサバの場合などはサーバーの制約などにより、$membersの読み出しに失敗すると、以下の変数の内容は上書きされません。(1人で残りっぱなし=レンサバのサーバ制約/サーバ側の処理問題)file()命令
$members = count(file($user_file));

予め$members = 0;のようにして強制的にクリアさせたり、行頭で指定している$user_fileの指定を見直してみるのも手でしょう。(入室状態で問題なく他PCなどからインジケータが正しく表示されていればここは問題では無いでしょうから、PHPのバージョンの違いなどfile()の取扱い命令をご自身のマイサーバーに応じて書き換えてみて下さい。)原作はPHP4.xで作られています。

素敵なインターネットライフをご祈念いたします
コミュネス運営事務局
掲載日時: 2006/03/18 15:58  
新人
 Re: mailchatの参加者表示について
いろいろソースを眺めていましたらあることに気づきました
custom_block_sample.txtには

$user_file = './modules/'.$module_dirname.'/user.dat';
$members = count(file($user_file));

とあり、この通りやると参加人数は表示されるわけです
ところで管理人様の提示してくださったソースは

$online_user=""; // 変数クリア
$log = file('../../modules/'.$module_dirname.'/user.dat'); // トップページから見たファイル位置
$members = count($log);
for($i=0;$i<$members;$i++){
list($name2,$userid2) = split( ",", $log[$i]);
$online_user .= "<option>".$name2; //入室状況表示用に<option>を加えておく
}

で参加者名が表示できました
それで見比べるとuser.datへのパスが違っていますね
そこでちょっと邪道だとは思ったんですが
あまり知識のない私としては上記のソースを

$online_user
$online_user=""; // 変数クリア
$log = file('./modules/'.$module_dirname.'/user.dat'); // トップページから見たファイル位置
$log2 = file('../../modules/'.$module_dirname.'/user.dat');
$members = count(file($log));
for($i=0;$i<$members;$i++){
list($name2,$userid2) = split( ",", $log2[$i]);
$online_user .= "<option>".$name2; //入室状況表示用に<option>を加えておく
}

と書き換えたところ、ちゃんと表示できるようになりました。



掲載日時: 2006/03/18 16:10  
新人
 Re: mailchatの参加者表示について
ところでチャットルームが何部屋かあり
同一カスタムブロック内に全室の参加者表示をしたいとき
変数の名をいちいち変えるやり方でよろしいのでしょうか?
ほんとうに無知で申し訳ありませんがご指南ください。
掲載日時: 2006/03/18 17:33  
運営事務局
 Re: mailchatの参加者表示について
naritoさん、こんにちは

Windows版のFirefoxではbodyの透過モードが効かないようですね。
同じfirefoxでもMaxOSX版1.5.0.1では大丈夫の場合もあるようです。(ただFireFoxのMac版のテーマによっては背景がブルー一色になるようです。)
MacのSafariでは全く問題無い、とのことです。

ここまでの情報まとめ:(結論)

根本的にWindows版FireFoxだけに見られる独得のブラウザ側の障害トラブル。
FireFoxのツールから拡張インストールするテーマによっては解決する場合もある。
FireFox自体がHTMLの<body>を正しく処理できない(透過モードが効かない)

しかしスタイルシートを多様化することで、BODYに関する設定を全て廃止し(FireFoxのためだけの労力)、WindowsインターネットエクスプローラーやMacOSX Safariと互換を保ったまま、Windows版FireFoxに対応させることは理論的に可能(だが‥‥チャットプログラムでブラウザの個別のagentをチェックしていたら負荷も気にしないと‥‥軽くなければならない。)

ということで、いくつか考案しましたが、いちばんシンプルなスタイルで、かつ速度性を保ちつつ、Windows版FireFoxへの対応を施したバージョンを作ってみました。

→ めるちゃっと ver1.08 実物

ご要望が多ければ、近いうちにモジュールを公開する予定です。


素敵なインターネットライフをご祈念いたします
コミュネス運営事務局
掲載日時: 2006/03/18 17:36  
運営事務局
 Re: mailchatの参加者表示について
変数は変えなくても、個別にechoで表示させて送ればどうでしょう?

// ブロック用phpソースと異なり、サイトURL指定は {X_SITEURL}(ブロック用)から
// ".XOOPS_URL."/(php用)に変更してあります。(/も必須)
// 同様にデータファイルのディレクトリ指定も相対アドレスで変更してあります。


// -----------------------------------------------------------
// めるちゃっと・インジケーター付きリンクブロック
// -----------------------------------------------------------

echo "<CENTER><TABLE CELLSPACING='0' CELLPADDING='0' WIDTH='100%'>"
."<TR CLASS='even'>"
."<TD ALIGN='CENTER' VALIGN='CENTER'>"

."<!-- INLINE BLOCK START!-->"
."<CENTER><TABLE CELLSPACING='4' CELLPADDING='4' WIDTH='100%'>"
."<TR CLASS='even'>"
."<!-- INLINE BLOCK 1!-->"
."<TD NOWRAP>"
."<table cellspacing='4' celpadding='4' border='1' bordercolor='#cccccc'>"
."<tr>";

// -----------------------------------------------------------
// 初期設定値
$module_name = "ひまわり";
$module_dirname = 'mailchat'; // 前後のスラッシュは不要です
// -----------------------------------------------------------
// メインブロック(入室カウンター返し値)-> $members
$user_file = '../../modules/'.$module_dirname.'/user.dat';
$members = count(file($user_file));
// -----------------------------------------------------------
echo "<td align='center' valign='top' nowrap width='16%'>"
."<a href='".XOOPS_URL."/modules/".$module_dirname."/'>".$module_name."</a>"
."&nbsp;<font color='#666666'>(</font>";
if ($members >=1 ) { // 1人以上の場合だけ人数表示
echo "<font color='#FF0000'>".$members."人</font>";
} else {
echo "<font color='#666666'>空室</font>";
}
echo "<font color='#666666'>)</font></td>";
// -----------------------------------------------------------



// -----------------------------------------------------------
// 初期設定値
$module_name = "あじさい";
$module_dirname = 'mailchat01'; // 前後のスラッシュは不要です
// -----------------------------------------------------------
// メインブロック(入室カウンター返し値)-> $members
$user_file = '../../modules/'.$module_dirname.'/user.dat';
$members = count(file($user_file));
// -----------------------------------------------------------
echo "<td align='center' valign='top' nowrap width='16%'>"
."<a href='".XOOPS_URL."/modules/".$module_dirname."/'>".$module_name."</a>"
."&nbsp;<font color='#666666'>(</font>";
if ($members >=1 ) { // 1人以上の場合だけ人数表示
echo "<font color='#FF0000'>".$members."人</font>";
} else {
echo "<font color='#666666'>空室</font>";
}
echo "<font color='#666666'>)</font></td>";
// -----------------------------------------------------------



// -----------------------------------------------------------
// 初期設定値
$module_name = "たんぽぽ";
$module_dirname = 'mailchat02'; // 前後のスラッシュは不要です
// -----------------------------------------------------------
// メインブロック(入室カウンター返し値)-> $members
$user_file = '../../modules/'.$module_dirname.'/user.dat';
$members = count(file($user_file));
// -----------------------------------------------------------
echo "<td align='center' valign='top' nowrap width='16%'>"
."<a href='".XOOPS_URL."/modules/".$module_dirname."/'>".$module_name."</a>"
."&nbsp;<font color='#666666'>(</font>";
if ($members >=1 ) { // 1人以上の場合だけ人数表示
echo "<font color='#FF0000'>".$members."人</font>";
} else {
echo "<font color='#666666'>空室</font>";
}
echo "<font color='#666666'>)</font></td>";
// -----------------------------------------------------------

ここにインジケータを複製して次々に配置‥‥‥‥
‥‥‥‥
‥‥‥‥


echo "</tr></table>"
."</TD>"
."</TR>"
."</TABLE></CENTER>"
."<!-- INLINE BLOCK END!-->"

."</TD>"
."</TR>"
."</TABLE></CENTER>";

?>


参考になれば幸いです。


素敵なインターネットライフをご祈念いたします
コミュネス運営事務局
掲載日時: 2006/03/18 19:13  
新人
 Re: mailchatの参加者表示について
管理人さま。
まことにまことにありがとうございます。
管理人さまのご提供のソースにて無事表示できました。
<<  1 2  >>
スレッド表示 | 新しいものから <<<前の話題 | 次の話題>>> |

Copyright (C) Communes SNS Community since 1993-2018. All Rights Reserved.