農場主の日常

なんちゃってエンジニアの日常をつらづらと

NP_NewsFeedexを個別アイテムで別のRSSを読み込むように改造。

 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);


 こんな感じで、データベースのページに表示。


関連記事[getItem bookmarklet Nucleus

前後の記事 - [Nucleus]::タイトル一覧

コメント


コメントはありません。



コメントの追加


トラックバック

このエントリにトラックバックはありません
このトラックバックURLを使ってこの記事にトラックバックを送ることができます。

↑ PAGE TOP