Nucleusには、RSSを取り込んで表示するプラグイン、NP_NewsFeedexがある。
これ、アイテム内に書いて使う方法と、スキンに書く方法があるのだけれど、ゲームデータベースでは、すべてのアイテムに別のRSSを読み込んでニュースとして表示する必要があるので、アイテムスキンに対応する改造をすることに。
あわせて、UTF-8への対応もやる。
まず、Tableが追加されるので宣言追加。
function getTableList() {
return array( sql_table('plug_newsfeedex'));
}
オプションの追加。
$this->createOption('flg_erase', 'uninstall drop table?', 'yesno', 'no');
mysql_query("CREATE TABLE IF NOT EXISTS ". sql_table("plug_newsfeedex")
." (
itemid INT(9) NOT NULL,
feedurl VARCHAR(255) NOT NULL DEFAULT '',
baseurl VARCHAR(255) NOT NULL DEFAULT '',
PRIMARY KEY (itemid)
)");
アンインストール時に、テーブルをドロップ。
if ($this->getOption('flg_erase') == 'yes') {
mysql_query ( "DROP table IF EXISTS ". sql_table("plug_newsfeedex") );
}
イベントの追加
function getEventList() {
return array('PreItem','PostAddItem','PreUpdateItem','AddItemFormExtras','EditItemFormExtras');
}
スキン変数の展開ルーチンに追加。
function doSkinVar($skintype, $newsfeedURL, $amount = 10) {
global $manager, $itemid;
// go get the requested newsfeed.
$param[0] = $newsfeedURL;
$param[1] = $amount;
if ($skintype == 'item') {
$item =& $manager->getItem($itemid,0,0);
$q = '';
$id = $item['itemid'];
$result = mysql_query("SELECT feedurl FROM ". sql_table("plug_newsfeedex") ." WHERE itemid='$id'");
if ($msg = mysql_fetch_array($result)) {
if ($msg['feedurl'] == "") { return;}
else{ $param[0] = $msg['feedurl'];
}
} else {
return;
}
}
echo $this->FeedJob($param);
}
//Add options to add item form/bookmarklet
function event_AddItemFormExtras($data) {
?>
<h3>NewsFeedex URLs</h3>
<p>
<label for="NewsFeedex">NewsFeed URL:</label>
<input type="text" value="" id="feedurl" name="feedurl" size="60" />
</p>
<p>
<label for="NewsBaseUrl">Base URL:</label>
<input type="text" value="" id="baseurl" name="baseurl" size="60" />
</p>
<?php
}
//Add options to edit item form/bookmarklet
function event_EditItemFormExtras($data) {
$id = $data['variables']['itemid'];
$result = mysql_query("SELECT itemid, feedurl, baseurl FROM ". sql_table("plug_newsfeedex"). " WHERE itemid='$id'");
if (@mysql_num_rows($result) > 0) {
$feedurl = mysql_result($result,0,"feedurl");
$baseurl = mysql_result($result,0,"baseurl");
}
?>
<h3>NewsFeedex URLs</h3>
<p>
<label for="NewsFeedex">NewsFeed URL:</label>
<input type="text" value="<?php echo htmlspecialchars($feedurl) ?>" id="feedurl" name="feedurl" size="60" />
</p>
<p>
<label for="NewsBaseUrl">Base URL:</label>
<input type="text" value="<?php echo htmlspecialchars($baseurl) ?>" id="baseurl" name="baseurl" size="60" />
</p>
<?php
}
//PostAddItem Event
function event_PostAddItem($data) {
$feedurl = requestVar('feedurl');
$baseurl = requestVar('baseurl');
// Nothing to do? Get out!!
if ((!$feedurl) && (!$baseurl)) return;
$itemid = $data['itemid'];
$feedurl = mysql_escape_string($feedurl);
$baseurl = mysql_escape_string($baseurl);
mysql_query("INSERT INTO ". sql_table("plug_newsfeedex") ." VALUES ('$itemid','$feedurl','$baseurl')");
}
//PreUpdateItem Event
function event_PreUpdateItem($data) {
$feedurl = requestVar('feedurl');
$baseurl = requestVar('baseurl');
$itemid = $data['itemid'];
$feedurl = mysql_escape_string($feedurl);
$baseurl = mysql_escape_string($baseurl);
$result = mysql_query("SELECT * FROM ". sql_table("plug_newsfeedex") ." WHERE itemid='$itemid'");
if (@mysql_num_rows($result) > 0) {
// Nothing to do? Delete it!!
if ((!$feedurl) && (!$baseurl)) {
mysql_query("DELETE FROM ". sql_table("plug_newsfeedex") ." WHERE itemid='$itemid'");
return;
}
mysql_query("UPDATE ". sql_table("plug_newsfeedex") ." SET feedurl='$feedurl',baseurl='$baseurl' WHERE itemid='$itemid'");
} else {
// Nothing to do? Get out!!
if ((!$feedurl) && (!$baseurl)) return;
mysql_query("INSERT INTO ". sql_table("plug_newsfeedex") ." VALUES ('$itemid','$feedurl','$baseurl')");
}
}
UTF-8への対応例
$headFormat = mb_convert_encoding($this->getOption(headFormat),"UTF-8",_CHARSET);
$footFormat = mb_convert_encoding($this->getOption(footFormat),"UTF-8",_CHARSET);
$itemFormat = mb_convert_encoding($this->getOption(itemFormat),"UTF-8",_CHARSET);
$noitemFormat = mb_convert_encoding($this->getOption(noitemFormat),"UTF-8",_CHARSET);
こんな感じで、データベースのページに表示。
コメント