NP_BlogInfo - <%blogsetting%>をテンプレートでも使う

このサイトは、複数blogでひとつのサイトを構成しています。その為随所に、これに対応する為の手直しをしています。RSSもそのひとつ。「えふぇめらクロニクル」トップページRSSは、Nucleusのスキン内でNP_ShowBlogsを使って呼び出すblogを選択し表示しています。

但し、このままではタイトルが並ぶのみで日記なのかゲームレポートなのかの判別がつかないので、blog情報をタイトルに添付しようと考えました。スキン内ならば、この機能を提供する便利な変数<%blogsetting%>が存在します。けれどもテンプレートでは使えないので別途プラグインを利用する事にします。

使えそうなのは、NP_BlogInfoとNP_BlogSetting。

残念な事にBlogInfoは、blogid=1のブログの中にblogid=2や3のitemを表示していた場合、テンプレート内で<%BlogInfo()%>と記述すると、2や3ではなく全て1として扱われました。コード内で「global $blogid」によるblog指定をしている為、常に親blogのidである1が代入されている模様。NP_BlogSettingの様に、アイテムから毎回blogidを探す「getBlogIDFromItemID($item->itemid)」を使わなければならないみたい。

最近PHPの解説本を買って勉強したから、ソースコードの造りが何となく判ってきました。勉強がてら、NP_BlogInfoとNP_BlogSettingを改良してみる事にしました。その上でRSSのテンプレート内でこれを使用します。


作ったNucleus Plugin「NP_BlogInfo」のソース:
(以下の文をコピーしても付属ファイルがないので正常には動かない。プラグインはNucleus(JP)フォーラムのviewtopic23237に掲載)

<?php

/*
■「変数の機能をテンプレート内でも使える様に」とソースを考えた方々
2004-07-22 NP_BlogSetting Ver.0.1.0 (Taka) ソースを最初にリリース:
http://japan.nucleuscms.org/bb/viewtopic.php?p=2765#2765
2005-10-23 NP_BlogInfo Ver.0.1.0 (ava) ソースを最初にリリース:
http://japan.nucleuscms.org/bb/viewtopic.php?p=9382#9382
2006-03-01 NP_BlogSetting Ver.0.1.1 (cha_cya) 機能を追加:
http://japan.nucleuscms.org/bb/viewtopic.php?p=11252#11252
2008-08-19 NP_BlogInfo Ver.0.1.1 (ephemera) NP_BlogInfo と NP_BlogSettingを統合:
http://japan.nucleuscms.org/bb/viewtopic.php?p=23237#23237
*/

class NP_BlogInfo extends NucleusPlugin {

// ▼プラグインの基本コード
function getName() {
return 'BlogInfo';
}

function getEventList() {
return array();
}

function getAuthor() {
return 'Taka + cha_cya + ava + Ephemera';
}

function getURL() {
return 'http://japan.nucleuscms.org/bb/viewtopic.php?p=2765#2765';
}

function getVersion() {
return '0.1.1';
}

function supportsFeature($what) {
switch($what){
case 'SqlTablePrefix':
return 1;
default:
return 0;
}
}
// ▲

// ▼ブログの文字エンコーディングに対応した解説を呼び出す
// ▽ブログの文字エンコーディング名をファイル名にセット
function init() {
$language = ereg_replace( '[\\|/]', '', getLanguageName());
if (file_exists($this->getDirectory().$language.'.php')) {
include_once($this->getDirectory().$language.'.php');
} else {
include_once($this->getDirectory().'english.php');
}
}
// ▽解説を読み込む
function getDescription() {
return _BLOGINFO_Description;
}
// ▲

// ▼本体。
// ▽テンプレートからの呼出。引数をModeSelectへ転送
function doTemplateVar(&$item, $mode, $m_blogid='') {
$this->ModeSelect($item, $mode, $m_blogid, 0);
}
// ▽スキンからの呼出。引数をModeSelectへ転送
function doSkinVar($skinType, $mode, $m_blogid='') {
$this->ModeSelect($skinType, $mode, $m_blogid, 1);
}
// ▽
function ModeSelect($item, $mode, $m_blogid, $st){

global $CONF, $blogid, $manager;
if($st){ // 1=スキン、0=テンプレート
$bid = $blogid; // 呼出元のblogidを$bidにセット
}else{
$itemid = $item->itemid;
$bid = getBlogIDFromItemID($itemid); // 表示するアイテムのblogidをセット
}

if($m_blogid){ // 指定時、引数のblogidを$bidにセット
$bid = $m_blogid;
}

$b =& $manager->getBlog($bid); // =&って何だっけ?
switch ($mode) {
case 'id':
echo $bid;
break;
case 'name':
echo $b->getName();
break;
case 'desc':
echo $b->getDescription();
break;
case 'short':
echo $b->getShortName();
break;
case 'url':
echo $b->getURL();
break;

/* ----------
// Taka氏作成「urlの末尾にindex.phpを付加するコード」
case 'url':
if ($CONF['URLMode'] == 'pathinfo'){
$link = $CONF['BlogURL'] . '/blog/' . $blogid;
}else{
$blogurl = $b->getURL();
if(!$blogurl){
$blogurl = $CONF['BlogURL'];
}
if(substr($blogurl, -4) != '.php'){
if(substr($blogurl, -1) != '/') $blogurl .= '/';
$blogurl .= 'index.php';
}
$link = $blogurl . '?blogid=' .$b->getID();
}
echo $link;
break;
---------- */
default:
break;
}
}
// ▲
}
?>

テンプレート内の記述:

<item>
<title><![CDATA[<%title%>/<%BlogInfo(name)%>]]></title>
<link><%blogurl%>index.php?itemid=<%itemid%></link>
<description><![CDATA[<%body%><%more%>]]></description>
<category></category>
<comments><%blogurl%>index.php?itemid=<%itemid%></comments>
<pubDate><%date(rfc822)%></pubDate>
</item>

2008年08月27日:H_プラグインephemera

Comments

コメント (0)

Add coments

このアイテムは閲覧専用です。コメントの投稿、投票はできません。