XPressME Integration Kit

フォーラム

XOOPS側でのブロック更新について

永らくありがとうございました フォーラム 使い方全般 XOOPS側でのブロック更新について

  • このトピックには4件の返信、2人の参加者があり、最後に匿名により11年、 4ヶ月前に更新されました。
5件の投稿を表示中 - 1 - 5件目 (全5件中)
  • 投稿者
    投稿
  • #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_&#8217; . $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)

    どうぞ宜しくお願いいたします。

    #3165
    toemon
    キーマスター

    ky982339さんこんにちは、

    現在、丁度ローカル開発環境のリフレッシュをおこなってまして、状況を確認できない状態なので、詳細はわかりませんが、

    とりあえず、

    まったく反映されないわけではないのですが、

    キャッシュされるまでにかなり時間の誤差が生じます。

    の部分で、ブログホームページを閲覧すれば、キャッシュはリフレッシュされるでしょうか?(この結果により、対応が異なります)

    #3166
    匿名
    ゲスト

    toemon様

    お返事いただきありがとうございます。

    キャッシュのリフレッシュはリアルタイムではされていないようです。

    1時間くらい経つとxoopsトップページのブロックにも

    反映されているように見えます。

    #3167
    toemon
    キーマスター

    ちょいごたごたしていて返事がおくれましたが、

    うーん、なんでしょう?

    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フィールドの値が正しい日時をしめしているか確認してみてください。

    #3168
    匿名
    ゲスト

    toemon 様

    アドバイスいただきありがとうございます!

    また、再現のお返事が遅くなりまして

    申し訳ございませんでした。m(_ _)m

    いただいた例を元に、xoopsカスタムブロックから

    ランキングを引っ張ってくる方法を試してみましたが、

    どうしても(トップ)画面が真っ白になってしまいました。

    詳しくはわからないのですが、

    counterizeテーブルのtimestampも問題なさそうでした。

    再度、データベースをバックアップしまして、

    xoopsとxpressMEを再インストール。

    あらためてxpressの拡張ブロックにて設置。

    すると今度はxpressme/index.phpへアクセスすることで

    ランキングがキャッシュされるようになりました。

    ・・・原因はわからずやや気持ち悪いのですが、

    ひとまず現状で様子を見てみたいと思います。

    申し訳ありませんでした。

5件の投稿を表示中 - 1 - 5件目 (全5件中)
  • このトピックに返信するにはログインが必要です。