KnowledgeTreeプラグイン作成3?

とりあえずプラグインが完成したので、ボチボチ解説していく。ソースは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);

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です