SOY CMS / SOY Shop

ブログトップ

ブログ記事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プラグインの説明は終了です。