返信する: d3diaryサポート板


オプション

参照

Re: ユーザ共通カテゴリーの生成
投稿者: なーお 投稿日時: 2010/5/4 22:22

miminさん

引用:
どうしても共通カテゴリを使いたいとのことでしたら、ご自身で検討いただき、結果をフィードバックいただきますようお願いします。

と書いた後で、「ちょっと冷たかったかな?」 と思いなおして、少し強引な方法で試してみました。 :-D

ソース変更

 手数が多いのはそれだけ影響範囲が広いので仕方ないため、慎重にやってみてください。 いずれもtrust側ファイルの編集です。

include/functions.php

445行目あたりのsql文を編集

445
446
447
448
449
450
451
452
453
    //$sql = "SELECT *
    //          FROM ".$xoopsDB->prefix($mydirname.'_category')."
    //          WHERE uid=".intval($req_uid)." ORDER BY corder";
 
    // naao changed for common category (uid=0)
    $sql = "SELECT *
              FROM ".$xoopsDB->prefix($mydirname.'_category')."
              WHERE uid=".intval($req_uid)." OR uid=0 ORDER BY corder";
    $result = $xoopsDB->query($sql);

main/detail.php

112行目あたりのカテゴリ抽出コードを編集。

112
113
114
115
116
117
118
119
120
121
122
123
124
125
if($diary->cid>10000){
    $category->uid=0;
    $category->cid=$diary->cid;
    $category->readdb($mydirname);
    $yd_data['cname'] = $category->cname;
}elseif($diary->cid>0){
//if($diary->cid>0){
    $category->uid=$diary->uid;
    $category->cid=$diary->cid;
    $category->readdb($mydirname);
    $yd_data['cname'] = $category->cname;
}else{
    $yd_data['cname'] = _MD_NOCNAME;
}

main/diarylist.php

92行目あたりのsql文の編集と抽出条件の追記

 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
    // added common category query
    $common_cid=intval(d3diary_getpost_param('cid'));
    if( 10000 < $common_cid ){
        $whr_common_cid = " AND diary.cid='".$common_cid."'";
    } else {
        $whr_common_cid = "";
    }
 
    $sql = "SELECT diary.diary, diary.create_time, diary.cid, diary.title, diary.bid, diary.openarea, diary.dohtml, usr.uname, usr.uid
            FROM ".$xoopsDB->prefix($mydirname.'_diary')." diary 
            INNER JOIN ".$xoopsDB->prefix('users')." usr ON diary.uid=usr.uid
            LEFT JOIN ".$xoopsDB->prefix($mydirname.'_config')." cfg ON diary.uid=cfg.uid "
            .$sql_tag
            ." WHERE ".$whr_openarea.$whr_common_cid.$whr_tag." AND (cfg.blogtype=0 OR cfg.blogtype IS NULL) ORDER BY diary.create_time DESC";
 
    // naao changed for hide draft entries of other person
    //$sql = "SELECT diary.diary, diary.create_time, diary.cid, diary.title, diary.bid, diary.openarea, diary.dohtml, usr.uname, usr.uid
    //        FROM ".$xoopsDB->prefix($mydirname.'_diary')." diary 
    //        INNER JOIN ".$xoopsDB->prefix('users')." usr ON diary.uid=usr.uid
    //        LEFT JOIN ".$xoopsDB->prefix($mydirname.'_config')." cfg ON diary.uid=cfg.uid "
    //        .$sql_tag
    //        ." WHERE ".$whr_openarea.$whr_tag." AND (cfg.blogtype=0 OR cfg.blogtype IS NULL) ORDER BY diary.create_time DESC";

main/edit.php

467行目あたりのsql文を編集

467
468
469
470
471
472
473
474
    //$sql = "SELECT *
    //          FROM ".$xoopsDB->prefix($mydirname.'_category')."
    //          WHERE uid=".intval($uid)." ORDER BY corder";
 
    // naao changed for common category (uid=0)
    $sql = "SELECT *
              FROM ".$xoopsDB->prefix($mydirname.'_category')."
              WHERE uid=".intval($uid)." OR uid=0 ORDER BY corder";

共通カテゴリの追加

カテゴリの追加は、取り急ぎ、phpmyadminなどでデータベーステーブル「(d3diary)_category」にレコードを手動で追加してゆきます。 この時、

    • uid フィールドは、「0」にする。
    • cid フィールドは、「10001」以上の数値で重複の無いように

追加すればOKです。

テンプレート編集

必要ないとも言えるのですが、diarylistページで全ユーザーの共通カテゴリ記事を抽出するため、テンプレート「diarylist.html」を編集し、「index.php?page=diarylist&cid=10001」といったurlに飛ぶように、生書きするとか、セレクトBOXをつけるとか、HTMLの知識で可能と思いますので、やってみてください。

以上です。お試しください。 ;-)

(追伸)
ここまで考えると、将来はこの延長線上で実装もありかな、と思えてきました。(笑)