whatsnewモジュールにてd3diaryのコメント数と閲覧数の表示が出ません。


投稿ツリー


前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 | 投稿日時 2011/6/8 12:26
katsumi hioki  サイトURL

いつもお世話になっています。英会話ドットネットの日置です。
d3diary0.8開発ご苦労様です。近いうちにアップグレードさせていただきます。ところで表題の件ですが、当サイトではトップページにwhatsnewモジュールで更新情報を出しているのですが、d3diaryのコメント数(view)と閲覧数(com_num)が取得できません。whatsnew.inc.phpファイルを見ているのですがわかりません。お忙しいとは思いますが、どうかご教授願えませんでしょうか。

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011/6/9 7:34 | 最終変更
なーお  長老   投稿数: 1786

katsumi hiokiさん、こんにちは。

引用:

当サイトではトップページにwhatsnewモジュールで更新情報を出しているのですが、d3diaryのコメント数(view)と閲覧数(com_num)が取得できません。

ご報告ありがとうございます。確認しました。以前リリースした時に実装漏れがあったようです。

  • 閲覧数が出ない件
    これは、class/func.class.php のほうの修正になります。ver0.16bの場合の行番号で636行目付近のSQLを以下のように書き換えてください。(d.viewが抜けていた)
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    
        // entries
        $sql = "SELECT d.uid AS uid, d.bid AS bid, d.title, d.cid, d.diary, d.create_time, d.openarea AS openarea_entry, d.dohtml, d.view, 
                u.uname, u.name, u.user_avatar, c.openarea AS openarea_cat, c.cname, cfg.openarea 
                FROM ".$db->prefix($this->mydirname.'_diary')." d 
                INNER JOIN ".$db->prefix('users')." u USING(uid) 
                LEFT JOIN ".$db->prefix($this->mydirname.'_category')." c ".$on_uid." 
                LEFT JOIN ".$db->prefix($this->mydirname.'_config')." cfg ON d.uid=cfg.uid 
                ".$table_tag."
                WHERE ".$whr_uids.$whr_openarea.$whr_nofuture.$whr_timerange.$whr_cat.$whr_tag." 
                ORDER BY create_time DESC LIMIT 0,".$maxnum;
  • コメント数が出ない件
    こちらは、whatsnewプラグインそのものの修正ですが、ver0.18の方で修正してしまいましたので、それをそのままお使いください。
    include/whatsnew.inc.php
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    
    <?php
    /*
     * Created on 2010/11/28 by naao http://www.naaon.com/
     * $Id: whatsnew.inc.php,v 0.01 2010/11/28 naao Exp $
     */
     
    // === eval begin ===
    eval( '
        function '.$mydirname.'_new($limit=0, $offset=0) {
            return d3diary_new_base( "'.$mydirname.'", $limit , $offset ) ;
        }
    ' ) ;
     
    if( ! function_exists( 'd3diary_new_base' ) ) {
     
        function d3diary_new_base( $mydirname, $limit=0, $offset=0 ) 
        {
            if( preg_match( '/[^0-9a-zA-Z_-]/' , $mydirname ) ) die( 'Invalid mydirname' ) ;
            $constpref = '_MB_' . strtoupper( $mydirname ) ;
            $_enc = _CHARSET;
     
            $URL_MOD = XOOPS_URL."/modules/".$mydirname;
     
            $mytrustdirpath = dirname(dirname( __FILE__ )) ;
            //include_once "$mytrustdirpath/include.php";
            require_once $mytrustdirpath."/class/d3diaryConf.class.php";
            require_once $mytrustdirpath."/class/photo.class.php";
     
            $d3dConf = D3diaryConf::getInstance($mydirname, 0, "whatsnew");
            $func =& $d3dConf->func ;
            $myts =& $d3dConf->myts;
            $photo =& D3diaryPhoto::getInstance();
            $uid = $d3dConf->uid;
            //$req_uid = $d3dConf->req_uid; // overrided by d3dConf
            $req_uid = 0; // overrided by d3dConf
     
            $entry    = $func->get_blist_tstamp ($req_uid, $uid, $limit, false, $mytstamp ); // dosort = false, byref $mytstamp
     
            // random photos
            $d3dConf->get_new_bids( $got_bids ) ;
            $photo->bids = $got_bids ;
            $photo->readrand_mul($mydirname);
            foreach ( $photo->photos as $i => $_photo ) {
                    $entry[$i]['photo'] = $_photo['pid'].$_photo['ptype'];
            }
            unset($photo->photos);
        
            // comment counts, newest comments
            list($yd_comment,$yd_com_key) = $func->get_commentlist(0,$uid,100,true,true);
            if(!empty($yd_comment)){
                foreach( $yd_comment as $_com){
                    $i = (int)$_com['bid'];
                    $entry[$i]['com_num'] = (int)$_com['com_num'];
                }
            }
     
            $ret    = array();
            if (!empty($entry)) {
                array_multisort($mytstamp, SORT_DESC, $entry);
                $i=0;
                foreach ( $entry as $b => $e){
                    $entry_temp[$i]    = $e;
                    $ret[$i]['description']    = trim($func->substrTarea($e['diary'], $e['dohtml'], 0, true));
                    $ret[$i]['link']    = $e['url'];
                    $ret[$i]['cname']     =  $myts->makeTboxData4Show($e['cname']);
                    $ret[$i]['cat_link']     = $URL_MOD."/index.php?page=category&amp;cid=".$e['cid'];
                    $ret[$i]['title']        = $e['title'];
                    $ret[$i]['time']    = $e['tstamp'];
                    $ret[$i]['uid']      = $e['uid'];
                    $ret[$i]['hits']     = $e['view'];
                    $ret[$i]['replies']     = !empty($e['com_num']) ? $e['com_num'] : 0 ;
                    $ret[$i]['image']    = !empty($e['photo']) ? $URL_MOD."/upimg/".$e['photo'] : "";
                    $ret[$i]['id']       = $e['bid'];
                    $i++;
                }
            
            }
     
            return $ret;
        }
    }
     
    ?>

以上、私の環境ではアサインまで確認しましたが、whatsnewの使い方がよくわからず最終表示まで確認できていません。 ご確認よろしくお願いします。 :-)

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011/6/9 10:32
katsumi hioki 

早速のお返事ありがとうございます!
まず、閲覧数の方はclass/func.class.phpの書き換えで出るようになりました!
それからinclude/whatsnew.inc.phpをアップしてみたところ画面が真っ白になってしまいました。デバグなど試してみましたが原因を特定できなかったのですが、whatsnew.inc.phpの

// comment counts, newest comments
list($yd_comment,$yd_com_key) = &font(Red){$func};->get_commentlist(0,$uid,100,true,true);

この部分の$funcを$d3dConf->funcに変えたらコメント数が出るようになりました。あっているのかどうかわからないのですが・・・。

xoopsの新しいモジュールが出てこないのでなーおさんのd3diaryだけが頼りです。ずっとxoopsでやってきたので捨てがたい。でもwebの世界ってテクノロジーの進化がすごく早いので他のCMSから取り残されないか心配です。

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011/6/9 10:35
katsumi hioki  サイトURL

さっきの投稿のソースの部分実際は
list($yd_comment,$yd_com_key) = $func->get_commentlist(0,$uid,100,true,true);
こうです。$funcの部分を赤字にしようとして失敗しました。失礼しました。

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011/6/9 22:15
なーお  長老   投稿数: 1786

katsumi hiokiさん

$func を、$d3dConf->func にしないと真っ白になったとのことですが、先の私のコメントの30行目に
$func =& $d3dConf->func ;
と追加してあるのですが、これを追記忘れていませんか?あと37行目にも $func-> がありますので、これが原因ならここでもエラーが起きるはずなんですが・・ :roll:

結果的に動いているようですが、他の方への参考のためにもお手数ですが一度ソースを再確認いただけますでしょうか。

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011/6/10 1:19
Katsumi Hioki  サイトURL

なーおさん

原因特定できました。
ver0.18の方で修正されたとのこと、
当方ver0.16使用です。そうなると32行目の

(ver0.18) $photo =& D3diaryPhoto::getInstance();
(ver0.16) $photo =& Photo::getInstance();

ここが異なります。この部分以外では不具合はおきません。

ありがとうございました。

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011/6/10 6:50
なーお  長老   投稿数: 1786

Katsumi Hiokiさん

引用:

(ver0.18) $photo =& D3diaryPhoto::getInstance();

(ver0.16) $photo =& Photo::getInstance();

ああ、そうですね。ここも変わっているのを忘れていました。 :-P
ご報告、ありがとうございました。

投票数:0 平均点:0.00
返信する

このトピックに投稿する

題名
ゲスト名
投稿本文
  条件検索へ