ブログトップ
ブログ記事SEOプラグイン開発について3
2010年01月05日
前回、記事作成画面にカスタムフィールドを追加し、カスタムフィールドに入れた値をDBに挿入するところまで行いました。
ブログ記事SEOプラグイン開発について2
今回はDBに入れた値を公開側の記事毎ページのメタ情報に表示させることについて説明します。
プラグイン初期化時の公開側設定に、公開側ページを表示したときに動作するメソッドを追加します。
function init(){
    if(CMSPlugin::activeCheck($this->getId())){
        //管理画面側設定
        if(!defined("_SITE_ROOT_")){
            CMSPlugin::setEvent('onEntryUpdate',$this->getId(),array($this,"onEntryUpdate"));
            CMSPlugin::setEvent('onEntryCreate',$this->getId(),array($this,"onEntryUpdate"));
            CMSPlugin::addCustomFieldFunction($this->getId(),"Entry.Detail",array($this,"onCallCustomField"));
            CMSPlugin::addCustomFieldFunction($this->getId(),"Blog.Entry", array($this, "onCallCustomField_inBlog"));
        //公開側設定
        }else{
           //公開側のページを表示させたときに、メタデータを表示する
           CMSPlugin::setEvent('onPageOutput',$this->getId(),array($this,"onPageOutput"));
        }
    }else{
        CMSPlugin::setEvent('onActive',$this->getId(),array($this,"createTable"));
    }
}
今回も、カテゴリー詳細表示プラグインと同様に、公開側のページを表示したときに動作するonPageOutputメソッドを作成します。
カテゴリー詳細表示プラグイン開発について
function onPageOutput($obj){
	//ブログではない時は動作しません
	if(false == ($obj instanceof CMSBlogPage)){
		return;
	}
	//エントリー表示画面以外では動作しません
	if($obj->mode != CMSBlogPage::MODE_ENTRY){
		return;
	}
	$entry = $obj->entry;
	if(is_null($entry))$entry = new Entry();
	//データ取得
	list($keyword,$description) = $this->getEntryInfo($entry->getId());
	$obj->createAdd("entry_keyword","HTMLModel",array(
		"soy2prefix" => "b_block",
		"attr:name" => "keywords",
		"attr:content" => $keyword
	));
	$obj->createAdd("entry_description","HTMLModel",array(
		"soy2prefix" => "b_block",
		"attr:name" => "description",
		"attr:content" => $description
	));
} 
createAddメソッドはカテゴリー詳細表示プラグインでも使われたので、概要は省略します。
前回と異なる点は、
前回はテンプレートに
<span b_block:id="category_description"></span>
と記述したら、
<span>ここに文字が挿入される</span>
というように<span>タグで挟まれた箇所に文字列が挿入されたが、
今回は、
<meta name="keywords" content="入力した文字列">
のように<meta>タグの属性値として挿入されなければならない。
今回のソースコードを見ると
$obj->createAdd("entry_keyword","HTMLModel",array(
	"soy2prefix" => "b_block",
	"attr:name" => "keywords",
	"attr:content" => $keyword
));
createAddメソッドの第二引数がHTMLModelになっており、
連想配列でのindexが attr:name と属性として表示するものになっている。
表示に必要な属性とその値を設定すれば、
<meta b_block:id="entry_keyword">
というタグをテンプレートで使用出来るようになります。
これでブログ記事SEOプラグインの説明は終了です。

