KnowledgeTreeプラグイン作成3?

| コメント(0) | トラックバック(0)

とりあえずプラグインが完成したので、ボチボチ解説していく。ソースはSubversionのリポジトリからどうぞ。
http://kazu.tv/svn/docdiff/trunk/

DocumentDiffActionには重要なメソッドが2つある。

  • do_main
  • do_viewComparison
文書を選択して、画面右のDiffをクリックした時に呼ばれるのが前者で、差分を取りたいバージョンをクリックした時に呼ばれるのが後者。

まずはdo_mainから。

このメソッドはコメントにも書いてある通り、KTDocumentVersionHistoryActionの内容をコピーして改変したもの。

最初のほうは特に修正していない。重要なのは次の行から。

    $aMetadataVersions = 
KTDocumentMetadataVersion::getByDocument($this->oDocument);
    $aVersions = array();
    foreach ($aMetadataVersions as $oVersion) {
      //$version is an instance of Document class.
      $version = Document::get($this->oDocument->getId(), $oVersion->getId());
      if($showall){
        $aVersions[] = $version;
      }else if($version->getMetadataStatusID() != VERSION_DELETED){
        $aVersions[] = $version;
      }
    }

ここでは、選択されている文書の過去のバージョンの一覧を取得している。過去のバージョンのメタデータの一覧がKTDocumentMetadataVersion::getByDocumentで取得できるので、それをループで回して、各バージョンのDocumentクラスのインスタンスをDocument::getで取得して、削除されたバージョンでなければaVersionsという配列に格納してる。

文書関連のクラスは結構沢山あって混乱しちゃいそうなので、今度クラス図にでもまとめようかと思う。

その後に、Smartyテンプレートを呼び出す際に過去のバージョン一覧をセットしている。つまり、do_mainはMVCでいうとコントローラで、Vは当然Smartyテンプレート、MはDocumentクラスの配列。

do_mainが返す文字列、つまりSmartyテンプレートをレンダーした結果が実際に画面に表示される。プラグインを作る時に、本当にこのメソッドが呼び出されてるのか?って思った時には、とりあえずreturn "testテスト"とかやって、その文字列が画面に現れるかどうかで確認できる。

    $aActions = KTDocumentActionUtil::getDocumentActionsByNames(
        array('ktcore.actions.document.view'));
    $oAction = $aActions[0];
    $oAction->setDocument($this->oDocument);

    // Data to be passed to the template.
    $aTemplateData = array(
			   'context' => $this,
			   'document_id' => $this->oDocument->getId(),
			   'document' => $this->oDocument,
			   'versions' => $aVersions,
			   'downloadaction' => $oAction,
			   'showdelete' => $bShowDelete,
			   'showall' => $showall,
			   'bShowCompare' => $bShowCompare,
			   'bShowVersionCompare' => $bShowVersionCompare,
			   'sUrl' => $sUrl
			   );
    return $oTemplate->render($aTemplateData);

トラックバック(0)

トラックバックURL: http://www.kazu.tv/blog-mgr/mt-tb.cgi/733

コメントする

このブログの作者

名前:kazu
仕事:IT関係の何でも屋
メール:kazu 後幕 kazu どと tv
詳しくはこの辺

このブログ記事について

このページは、kazuが2009年1月11日 00:40に書いたブログ記事です。

ひとつ前のブログ記事は「MinGW上でHyper Estraierのビルド」です。

次のブログ記事は「Vista Home Premiumでリモートデスクトップ接続」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ