氷川 XOOPS 研究室

モジュール制作、ウェブサービスなどなど

1: 2008-05-29 (Thu) 23:26:44 kilica source
Line 1: Line 1:
 +*Xcat [#a995f7cd]
 +まだα版以前なので、テスト以外では絶対に使用しないでください(^ ^;。
 +
 +[[ダウンロード>http://xoops.trpg-labo.com/modules/wiki​/gate.php?way=attach&_noumb&refer=Menu%2​FXCat&openfile=xcat.zip]]
 +
 +[[概要(swf)>http://xoops.trpg-labo.com/doc/xcat/out​line.swf]]
 +[[概要(pdf)>http://xoops.trpg-labo.com/doc/xcat/out​line.pdf]]
 +
 +※以下は、いささか古い記述が混じっています。特にコードは危険。
 +
 +**テーブルの構成 [#rf819e10]
 +
 +上の図が、Xcat モジュールの構成です。カテゴリの親子関係やカテゴリ名を管理する''「カテゴリ」テーブル''(xcat_cat)があり、それに紐づく''権限テーブル''(xcat_perm)がユーザグループごとにあります。
 +
 +カテゴリの上にある''「カテゴリグループ」''は、サイトに複数のカテゴリ群を持たせたいときに使う入れ物です。フォーラムにはカテゴリグループ X を、ニュースにはカテゴリグループ Y を、といったように使います。
 +
 +カテゴリグループではまた、カテゴリで使う権限の種類(編集権限、閲覧権限、削除権限など)を設定し、カテゴリの深さの限界を設定します。たとえば、カテゴリの深さの限界を「1」にすれば、階層構造を持たないことになります。「0」は無制限を意味します。
 +
 +**権限の設定 [#dac607ce]
 +''権限は、カテゴリ・ユーザグループ・種類ごとに設定''されます。
 +
 +「種類」は、編集権限、閲覧権限などで、カテゴリグループごとにどのような種類をもたせるか決めます。
 +
 +''あるカテゴリの権限が設定されていない場合、親カテゴリの設定を継承''します。親カテゴリも権限が設定されていない場合はさらにその親、というようにどんどん遡って設定されている権限を参照します。一番上のカテゴリにも権限が設定されていない場合は、カテゴリグループを作るときに設定したデフォルト権限が適用されます。
 +
 +なお、''権限の継承発生はカテゴリ単位''に判断されます。それ以上の細かい単位、ユーザグループや権限ごとではありません。
 +たとえば、"カテゴリ:A" - "groupid:1" - "VIEW" という権限の設定があれば、"カテゴリ:A" - groupid:2" - "VIEW" や "カテゴリA" - groupid:1" - "CREATE" について、権限の継承は発生しません。もしこれらの権限が設定されていなければ、「不可」として扱われます。
 +
 +**デリゲート [#lc27c305]
 +
 +今のところ用意しているデリゲートは3種類です。しかし、そのうち1種類は作ってみたけど「使うところあるのか?」という感じなので実質的には2種類かもしれません(その1種類は今回紹介しません)。
 +
 +-カテゴリマネージャ取得(Module.xcat.Event.GetCatManager)
 +-カテゴリツリー取得(Module.xcat.Event.GetCatTree)
 +
 +''カテゴリマネージャ取得''は、カテゴリオブジェクト(Xcat_Cat)を取得します。このオブジェクトは、特定カテゴリにおける権限のチェックなどを行います。View や Edit などで、コンテンツを操作(閲覧、編集、etc.)する権限を持っているかどうかに使います。
 +
 +''カテゴリツリー取得''は、カテゴリツリーオブジェクト(Xcat_Tree)を取得します。このオブジェクトは、カテゴリの一覧をツリー形式で表示するための配列を組み立てます。XoopsTree がベースになっています。
 +
 +**サンプルコード [#x2211fa0]
 +
 +xcat を利用する側のモジュールで、どのようなコードを書くかのサンプルです。
 +
 +Xcat_Tree は XoopsTree をベースにしているのですが、なんかオブジェクト指向的にいけていない気がするので作り直すかもしれません。
 +
 +***使用例 1 [#vfef7152]
 +カテゴリオブジェクト(Xcat_Cat)を使って、そのカテゴリに属するコンテンツを閲覧する権限があるかどうかをチェックします。
 +
 + //デリゲートで Xcat_Cat オブジェクトを取得
 + XCube_DelegateUtils::call(
 + 'Module.xcat.Event.GetCatManager',
 + new XCube_Ref($cat),
 + $this->mObject->get('cat_id')
 + );
 +
 + //取得した Xcat_Cat オブジェクトを使い、開こうとしているカテゴリについて、
 + //そのユーザが “VIEW” の権限を持っているかをチェック
 + //もっていなければ、エラーを表示しリダイレクト
 + if(! $cat->checkPermUser($uid, 'VIEW')){
 + $this->mRoot->mController->executeRedir​ect(
 + "./index.php?action=CqList", 1, _MD_CQA_ERROR_NOT_PERMITTED
 + );
 + }
 +
 +***使用例 2 [#jdca5a9a]
 +カテゴリツリーオブジェクト(Xcat_Tree)を使って、そのユーザが CREATE 権限を持っているカテゴリツリーを表示します。
 + $treeObj = null;
 + //デリゲートで Xcat_Tree オブジェクトを取得
 + XCube_DelegateUtils::call(
 + 'Module.xcat.Event.GetCatTree', new XCube_Ref($treeObj)
 + );
 +
 + //取得した Xcat_Tree オブジェクトを使い、
 + //カテゴリグループid =1 のカテゴリツリーを取得。
 + $tree = $treeObj->getGrTreeArray(1, 'weight');
 +
 + //カテゴリツリーから、ユーザが ’CREATE’ の権限を持たないカテゴリを除外
 + $treeFiltered = $treeObj->filterCatByUser($tree, 'CREATE', 1);
 +
 +このあと、render(表示)にまわします。$treeに対し、ブロック表示用と、select 表示用の二つの smarty が用意されています。


Front page   New List of pages Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)

Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project - xc-tokai