XOOPS側でのブロック更新について
永らくありがとうございました › フォーラム › 使い方全般 › XOOPS側でのブロック更新について
- このトピックには4件の返信、2人の参加者があり、最後に
匿名により12年、 6ヶ月前に更新されました。
-
投稿者投稿
-
2010 年 7 月 20 日 1:25 AM #2655
匿名
ゲストtoemon 様
いつもお世話になっております。
ky982339でございます。
今までにご教授いただいた手法を駆使しまして、
xcl(2.1.7)+xpressme(2.25(WP2.9.2))で新たにサイトを構築しております。
その中で、プラグインCounterize IIを使って、
記事のランキング表示を行っております。
(参考:http://forum.xpressme.info/topic.php?id=47)
<?php
if (function_exists(‘counterize_renderstats_vertical’)){
$number = 10;
$onedayago = date(“Y-m-d”, time()-86400);
$wpdb =& $GLOBALS;
$sql = “SELECT p.count as amount, p.url as url, p.url as label, p.postID as post_id , COUNT(m.id) as day_count”
. ” FROM ” .counterize_logTable(). ” m, ” . counterize_pageTable(). ” p “
. ” WHERE m.pageID = p.pageID and p.postID IS NOT NULL and “
. ” m.timestamp >= ‘$onedayago'”
. ” GROUP BY p.url “
. ” ORDER BY day_count DESC LIMIT $number”;
$rows = $wpdb->get_results($sql);
$ranking = 1;
foreach($rows as $row){
$postid = $row->post_id;
$post_data = get_post($postid);
$title = $post_data->post_title;
$ranking_text = $ranking . ‘位’;
$image_url = ‘http://www.exsample.com/uploads/ranking/ranking_’ . $ranking . ‘.gif’;
if (@fclose(@fopen($image_url, “r”))){
echo ‘<img src=”‘ . $image_url . ‘” alt=”‘ . $ranking_text . ‘”/>’;
}else{
echo $ranking_text . ” ;
}
echo ‘url . ‘” title=”‘. $title . ‘”>’. $title . ‘<hr style=”clear:both;margin-top:3px;”>’;
$ranking++;
}
}
?>
モジュール側では問題なく表示されているのですが、
xoopsブロック側(トップページ)になかなか反映されません。
まったく反映されないわけではないのですが、
キャッシュされるまでにかなり時間の誤差が生じます。
以前お話いただいた
XOOPS側での RewriteRule適応時のブロック更新が行われないバグ
がからんでいるのかと思いまして、
include/xpress_block_render.php
を修正しようと思いましたが、
バージョン変更に伴ってでしょうか、
以前教えていただいたコードと違うようです。
何か対応策があればアドバイスいただけませんでしょうか。
ちなみに、プラグインQF-GetThumbを利用して
サムネイル&記事タイトルの表示は比較的はやくキャッシュされています。
(参考:http://forum.xpressme.info/topic.php?id=47)
どうぞ宜しくお願いいたします。
2010 年 7 月 21 日 1:09 AM #3165toemon
キーマスターky982339さんこんにちは、
現在、丁度ローカル開発環境のリフレッシュをおこなってまして、状況を確認できない状態なので、詳細はわかりませんが、
とりあえず、
まったく反映されないわけではないのですが、
キャッシュされるまでにかなり時間の誤差が生じます。
の部分で、ブログホームページを閲覧すれば、キャッシュはリフレッシュされるでしょうか?(この結果により、対応が異なります)
2010 年 7 月 21 日 6:23 AM #3166匿名
ゲストtoemon様
お返事いただきありがとうございます。
キャッシュのリフレッシュはリアルタイムではされていないようです。
1時間くらい経つとxoopsトップページのブロックにも
反映されているように見えます。
2010 年 7 月 23 日 1:54 PM #3167toemon
キーマスターちょいごたごたしていて返事がおくれましたが、
うーん、なんでしょう?
XPressMEの拡張ブロックではなくXOOPSのカスタムブロックでデータベース直読みで実現してみるのも手かも・・・
カスタムブロック作成例
RYUSさんの「PHPカスタムブロックの超!賢い作り方」を参考に
カスタムブロック側に
<code>$file = 'today_top10.php';<br /> $path = XOOPS_ROOT_PATH.'/blocks/'.$file;<br /> if ( file_exists($path) ) require $path;</code>
をタイプPHPスクリプトとして記入
blocks/today_top10.phpを作成し、以下のコードを記入
<code><?php<br /> if ( !defined('XOOPS_ROOT_PATH') ) require dirname(dirname(__FILE__)).'/mainfile.php';<br /> global $xoopsDB;<br /> $number = 10; //表示数<br /> $xpress_dianame = 'xp_trunk'; //ここは、環境に合わせて設定<br /> $xpress_prefix = $xoopsDB->prefix($xpress_dianame) . '_';<br /> $counterize_logTable = $xpress_prefix . "Counterize";<br /> $counterize_pageTable = $xpress_prefix . "Counterize_Pages";<br /> $postsTable = $xpress_prefix . "posts";<br /> $host = $_SERVER['HTTP_HOST'];<br /> <br /> $now = date('Y-m-d H:i:s'). '<br />';<br /> $from = date("Y-m-d H:i:s", time()-86400);<br /> <br /> echo "24 hours from $from to $now" . '<br />';<br /> <br /> $sql = "SELECT p.count as amount, p.url as url, p.postID as post_id , COUNT(m.id) as day_count, t.post_title as post_title"<br /> . " FROM ($counterize_logTable m LEFT JOIN $counterize_pageTable p ON m.pageID = p.pageID) LEFT JOIN $postsTable t ON p.postID = t.ID"<br /> . " WHERE m.timestamp >='$from'"<br /> . " GROUP BY p.pageID"<br /> . " HAVING p.postID Is Not Null"<br /> . " ORDER BY COUNT(m.id) DESC"<br /> . " LIMIT $number";<br /> <br /> $result = $xoopsDB->query($sql);<br /> <br /> if($result) {<br /> $ranking = 1;<br /> while($row = $xoopsDB->fetchArray($result)) {<br /> $url = $row['url'];<br /> $title = $row['post_title'];<br /> $ranking_text = $ranking . '位';<br /> $image_url = 'http://www.exsample.com/uploads/ranking/ranking_' . $ranking . '.gif';<br /> if (@fclose(@fopen($image_url, "r"))){<br /> echo '<img src="' . $image_url . '" alt="' . $ranking_text . '"/>';<br /> }else{<br /> echo $ranking_text . '' ;<br /> }<br /> echo '<a href="http://'.$host . $url . '" title="'. $title . '">'. $title . '</a>';<br /> echo ' today(' . $row['day_count'] .')';<br /> echo ' total(' . $row['amount'] . ')';<br /> echo '<br />';<br /> $ranking++;<br /> }<br /> }<br /> ?></code>
これでずれ込むようなら、ローカルタイムの関係かもしれないので、
xx_xx_counterizeテーブルのtimestampフィールドの値が正しい日時をしめしているか確認してみてください。
2010 年 8 月 2 日 6:33 AM #3168匿名
ゲストtoemon 様
アドバイスいただきありがとうございます!
また、再現のお返事が遅くなりまして
申し訳ございませんでした。m(_ _)m
いただいた例を元に、xoopsカスタムブロックから
ランキングを引っ張ってくる方法を試してみましたが、
どうしても(トップ)画面が真っ白になってしまいました。
詳しくはわからないのですが、
counterizeテーブルのtimestampも問題なさそうでした。
再度、データベースをバックアップしまして、
xoopsとxpressMEを再インストール。
あらためてxpressの拡張ブロックにて設置。
すると今度はxpressme/index.phpへアクセスすることで
ランキングがキャッシュされるようになりました。
・・・原因はわからずやや気持ち悪いのですが、
ひとまず現状で様子を見てみたいと思います。
申し訳ありませんでした。
-
投稿者投稿
- フォーラム「使い方全般」には新規投稿および返信を追加できません。