ユーザ共通カテゴリーの生成


投稿ツリー


前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 | 投稿日時 2010/5/4 17:13
mimin 

ユーザ毎にカテゴリーを生成出来るようになっておりますが、全てのユーザが選択できる共通のカテゴリーを作ることは出来ませんでしょうか。

また、投稿されたユーザの記事がカテゴリー別に表示されるようにしたいです。

これにより例えばですが、山登りの記事を、山の名前の共通カテゴリーに投稿できると、それぞれの山に登った人々の記録が一覧で見られるので、とても面白いと思います。

カスタマイズの方法があればご教授いただけますと幸いに思います。

投票数:1 平均点:10.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/5/4 17:40 | 最終変更
なーお  長老   投稿数: 1580

miminさん、こんにちは。

ご要望ありがとうございます。

共通カテゴリーの件ですが、その場合にそのカテゴリーを誰が作成するのか、全員がそのカテゴリーを使えるのか、など色々と絡んでくるので、少々厄介です。
もし実装するとすれば、XCL限定になりますが氷川さんの開発された「XCAT」を実装する形で考えようと思いますが、おそらく当分先、というよりあまり要望が無いので優先度は下がります。

そこで、共通カテゴリー的な物のために、d3diaryの持つタグ機能をご利用いただくことを提案します。 投稿の際に、他のメンバーが作成したタグリストも表示されますので便利ですよ。

予め、管理者の方が必要と思われるタグを列挙した記事を1つ書いておくと、ユーザーは選択するだけになりますのでお勧めします。

タグクラウドを表示設定しておけば、diarylistページで全ユーザーの記事からそのタグを付加した記事を抽出できますし。

一度お試しください。 :-)

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2010/5/4 19:58
mimin 

当分先ということでも実装をご検討いただけたようでとてもうれしく思います。
気長に待つことにします。

私の場合は管理者のみが共通カテゴリーを作成できれば良いと考えていますので、もしその場合は難しくないようでしたらカスタマイズ方法を教えていただけますと嬉しく思います。

とりあえずはタグクラウドを使ってみます。

ご丁寧なご回答感謝いたします。
ありがとうございました。

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2010/5/4 20:56 | 最終変更
なーお  長老   投稿数: 1580

miminさん、こんにちは。

引用:
miminさんは書きました:
当分先ということでも実装をご検討いただけたようでとてもうれしく思います。
気長に待つことにします。

いえ、「実装するとしたら」の仮定の話でして、申し訳ないですがToDoに入れるつもりは今のところございません。

引用:
私の場合は管理者のみが共通カテゴリーを作成できれば良いと考えていますので、もしその場合は難しくないようでしたらカスタマイズ方法を教えていただけますと嬉しく思います。

そうですね。。 たとえばユーザーID「1」の管理者が作成したカテゴリは、他の誰でも使えるとかですかね。
しかし、カテゴリーは様々なページで絡んでいますので、広範なハックが必要となりますので、現実的には困難と思います。

先のコメントのとおり、代替手段がある状況ですので、どうしても共通カテゴリを使いたいとのことでしたら、ご自身で検討いただき、結果をフィードバックいただきますようお願いします。

以上、よろしくお願いします。

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/5/4 22:22 | 最終変更
なーお  長老   投稿数: 1580

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の知識で可能と思いますので、やってみてください。

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

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

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2010/5/7 16:11
mimin 

ご指示の通り行いましたら問題なく出来上がりました。
カスタマイズ方法をご丁寧にご教授いただきとても感謝感激しております。

サブカテゴリーも作成出来たのなら完璧だと思いました。
実装されることになった場合の一つの案としてご参考にということで、、
決してサブカテゴリーのカスタマイズ方法をご教授頂きたいというような厚かましいお願いなどではありませんので・・・
何卒ご容赦願います・・・

とにもかくにもここまでしていただいて本当にありがとうございました。

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/5/7 16:28 | 最終変更
なーお  長老   投稿数: 1580

miminさん、こんにちは。 :-)

別件ではなかなか解決できずにすみません。 :oops:

こちらの件ですが、提示させていただいた案の延長上で、次のバージョンに組み込むことにします。

次のver0.0.8では、

  • 共有カテゴリの作成(管理者のみ)
  • 共有カテゴリの使用(全員)
  • 記事群のカテゴリ一括移動機能(全員)
  • 更新ping機能

を実装したいと思います。 早ければ1週間程度で。 :-D
この際、今回手作業で入力したカテゴリは、そのまま使えるようにします。 ただ、サブカテゴリはデータベース構造を変更しないといけないので、コスト高なので見送ります。。 グループ毎に並べ替えて見やすくしてご使用ください。

では。

(追記)d3diary-ver0.0.8に組み込みました。
 miminさんの提案のおかげで、なかなか便利な機能になりました。感謝です。 :-)

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

このトピックに投稿する

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