Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2011-08-17 11:12:30

neohiro
メンバー
登録日: 2004-06-25
投稿: 150

Re: プラグイン作成時の変数の受け渡しについて

ご指導よろしくお願い致します。

今回自分専用の簡単なプラグインを作ってみました。
実は外部読み込み(include)していたPHPファイルをそっくりそのまま
「doTemplateVar(&$item)」以下に記述しただけなのですが...(恥っ)

下記は、そのPHP文の冒頭部分なのですが、

function doTemplateVar(&$item)
    {
        $keyword = "%e5%8a%a0%e8%97%a4%e9%b7%b9%e3%82%aa%e3%83%aa%e3%82%b8%e3%83%8a%e3%83%ab%e3%83%95%e3%82%a7%e3%83%ad%e3%83%a2%e3%83%b3%e9%a6%99%e6%b0%b4";

上記の赤色の部分をアイテムごとに違うもの(変数)を入れたいと思っています。
この場合、このプラグイン用の「データベース・テーブル」を作る記述(ソース)する必要があるのでしょうか?

現在「NP_znItemFieldEX.php」を大変重宝に使わせていただいているのですが、
こちらで設定した『<%znItemFieldEX(hoge)%>』などを、利用することは可能なのでしょうか?イメージとしては、

function doTemplateVar(&$item)
    {
        $keyword = "<%znItemFieldEX(hoge)%>";

の様な感じです。
もちろん直接書き込めることができないことは理解しているのですが…
何か似たような方法がございましたらご指導願えないでしょうか?

プラグイン作成のマニュアルなども参考にさせていただいたのですが、
力尽きてしまいフォーラムへ投稿させて頂いた次第です。

何卒、ご指導、ご教授よろしくお願い致します。

オフライン

#2 2011-08-17 18:52:27

Mocchi
メンバー
登録日: 2006-11-19
投稿: 438

Re: プラグイン作成時の変数の受け渡しについて

neohiro さんの発言:

上記の赤色の部分をアイテムごとに違うもの(変数)を入れたいと思っています。
この場合、このプラグイン用の「データベース・テーブル」を作る記述(ソース)する必要があるのでしょうか?

NP_znItemFieldEX.phpを使わずとも、プラグインAPIの「createItemOption」でオプションを設け、アイテムの編集時に値を入力、「getItemOption」でプラグイン内からその値を取得という作り方ができるかなと思いました。

自分専用ということもありますが、ソースを公開していただければ、もう少し具体的なアドバイスが出来るかなと思います。

オフライン

#3 2011-08-17 19:55:32

neohiro
メンバー
登録日: 2004-06-25
投稿: 150

Re: プラグイン作成時の変数の受け渡しについて

Mocchi さん、お世話になります。

Mocchi さんの発言:

自分専用ということもありますが、ソースを公開していただければ、もう少し具体的なアドバイスが出来るかなと思います。

今作成しようとしているプラグインは、楽天や電脳卸、Yahooショッピング、Amazon、などのWebサービスから項目を引っ張ってきて表示させようとしているものです。下記がソースになります。

function doTemplateVar(&$item)
    {
      $keyword = "%e5%8a%a0%e8%97%a4%e9%b7%b9%e3%82%aa%e3%83%aa%e3%82%b8%e3%83%8a%e3%83%ab%e3%83%95%e3%82%a7%e3%83%ad%e3%83%a2%e3%83%b3%e9%a6%99%e6%b0%b4";
     
      //ベースURL
      $apiurl = "<セキュリティの問題を回避するため消去しました>";
     
      //XMLデータ取得用リクエストURL生成
      $apiurl .= "&keyword=".$keyword;
    
      $req = file_get_contents($apiurl);
      $req = str_replace('header:Header', 'Header', $req);
      $req = str_replace('itemSearch:ItemSearch', 'ItemSearch', $req);
   
     //XMLファイルをパースし、オブジェクトを取得
      $xml = simplexml_load_string($req)
      or die("XMLパースエラー");
     
     //$xmlオブジェクトの中身を確認する場合は、以下のコメントを外す
     //echo "<pre>";
     // var_dump ($xml);
     //echo "</pre>";
    
      $ret = '<table>';
      $ret .= '<tr>';
      $ret .= '<td>';
      $ret .='<img src="http://www.phero-perfume.net/images/logo_rakuten.gif" width="40" height="20" alt="楽天市場のロゴ" />';
      $ret .='</td>';
      $ret .='<td>「楽天市場」の最安値は、 <span class="price">'.$xml->Body->ItemSearch->Items->Item->itemPrice.'円</span> です!</span></td>';
    
      $ret .='<td><a class="button" href="'.$xml->Body->ItemSearch->Items->Item->affiliateUrl.'" title="{$row.itemName}の詳細はこちらからどうぞ!" target="_blank"><span>詳細はこちら</span></a></td>';
      $ret .='</tr>';
      $ret .='</table>';
      
      echo $ret;
    }

こちらのソースはネット上で拾ってきたものを、勝手に該当箇所を置き換えたものです。とりあえず、こちらで目的の値は表示されましたので、後は指摘させて頂きました赤色の検索用箇所をアイテムごとに変更できないものかと試行錯誤しておりました。

Mocchi さんのおっしゃるような

Mocchi さんの発言:

プラグインAPIの「createItemOption」でオプションを設け、アイテムの編集時に値を入力、「getItemOption」でプラグイン内からその値を取得という作り方

お手数ですが、こちらのご教授を何卒よろしくお願い致します。

オフライン

#4 2011-08-17 20:53:12

Mocchi
メンバー
登録日: 2006-11-19
投稿: 438

Re: プラグイン作成時の変数の受け渡しについて

ぱっと見、以下のような実装方法があるのかなと思いました。

1. 「doTemplateVar」APIでtable要素を出力して、データは「createItemOption」で保持しアイテム投稿時に入力して「getItemOption」で取得する。

2. 「doItemVar」APIでtable要素を出力。データはアイテムに記述するタグからAPIに渡す。

NucleusPlugin クラスの概要 > プラグイン API @ japan.nucleuscms.org

「doTemplateVar」APIを使う場合はタグをテンプレートに記述するため、毎回記述する必要がない代わりに、アイテム別にするには別途プラグインオプションでキーワードを保持する必要があります。また、基本的にひとつのアイテムに対してひとつのキーワードしかもたせられないため、ひとつの出力しか作れません。

対して、「doItemVar」APIを使う場合は、タグをアイテムのタイトル/本文/続きに毎回記述する必要がある代わりに、その記述内容にキーワードを含めることが出来るため、プラグインオプションを使う必要がありませんし、ひとつのアイテムに対して複数のキーワードを含めることができます。

neohiroさんの場合は、どっちが都合がいいでしょうか?

オフライン

#5 2011-08-17 21:40:51

neohiro
メンバー
登録日: 2004-06-25
投稿: 150

Re: プラグイン作成時の変数の受け渡しについて

Mocchi さん、お世話になります。

Mocchi さんの発言:

ぱっと見、以下のような実装方法があるのかなと思いました。

1. 「doTemplateVar」APIでtable要素を出力して、データは「createItemOption」で保持しアイテム投稿時に入力して「getItemOption」で取得する。

2. 「doItemVar」APIでtable要素を出力。データはアイテムに記述するタグからAPIに渡す。
neohiroさんの場合は、どっちが都合がいいでしょうか?

なるほど、実装方法も複数あるのですね。
どっちの方が都合がいいのか、自分でもいまいち分かりかねるのが本音です。 :oops:

ソースは楽天の場合のみでしたが、電脳卸やAmazonなどを複数表示させて価格比較ができないものかと考えております。

理想と致しましては、

●このプラグインでやりたいこと
1)アイテム投稿時に検索ワードを記述できるテキストエリアを実装。
2)入力した値から検索して各アフィリエイトASPから、商品名、価格などを表示

「doTemplateVar」APIでよろしいかと思います。
お手数をおかけいたしますが、よろしくお願い致します。

オフライン

#6 2011-08-17 22:50:25

Mocchi
メンバー
登録日: 2006-11-19
投稿: 438

Re: プラグイン作成時の変数の受け渡しについて

了解しました。doTemplateVarを使って、こんな感じでいかがでしょう?

public function install ()
{
	...
	$this->createItemOption('keyword', 'APIに与えるキーワードを記述', 'text', '');

	...
	return;
}

public function doTemplateVar($item)
{
	$keyword = $this->getItemOption($item->itemid, 'keyword');
	...
	return;
}

インストールすると、アイテム編集画面にオプションのテキストフィールドが出現します。
テンプレート変数はこのテキストフィールドに入力した値を使ってURLからXMLを取得します。

オフライン

#7 2011-08-18 01:19:39

neohiro
メンバー
登録日: 2004-06-25
投稿: 150

Re: プラグイン作成時の変数の受け渡しについて

Mocchiさん、お世話になります。

先ほどご指導いただいとおりにソースを書き換えインストールしました。
お陰さまでイメージどおりに出来ました。
本当にありがとうございました。

一点なのですが、アイテムの編集の際に保存をクリック後に以下のようなerrorが出てしまいます。

mySQL error with query DELETE FROM nucleus_plugin_rectime WHERE up_id = 3013: Table 'db_kuchikomi_2.nucleus_plugin_rectime' doesn't exist
mySQL error with query INSERT INTO nucleus_plugin_rectime (up_id, updatetime) VALUES (3013, "2011-08-18 01:04:55"): Table 'db_kuchikomi_2.nucleus_plugin_rectime' doesn't exist

アイテムが更新されました

アイテムが更新されました

ウィンドウを閉じる

値はちゃんと渡されていて、意図したとおりに表示はされているのですが...
ちなみにこのプラグインを実装したNucleusのバージョンは3.3です。
バージョンが古いからなのでしょうか?

オフライン

#8 2011-08-21 23:05:48

Mocchi
メンバー
登録日: 2006-11-19
投稿: 438

Re: プラグイン作成時の変数の受け渡しについて

出力を見る限り

1. プラグイン内で、テーブル「nucleus_plugin_rectime」を参照するようなクエリを発行している
2. しかし、テーブル「nucleus_plugin_rectime」を作成するようなコードをプラグインに含めていない
3. 結果、クエリのエラーをMySQLサーバーが返す

といった感じかと。プラグインに色々とコピペされたようなので、まずはコピー箇所でこう言ったクエリを発行していないかどうか確認してみるといいかもしれません。

今回のプラグインはNucleus CMSのプラグインオプション機能でデータを保存するので、独自にテーブルを設ける必要はないと思います。

オフライン

#9 2011-08-22 00:44:18

neohiro
メンバー
登録日: 2004-06-25
投稿: 150

Re: プラグイン作成時の変数の受け渡しについて

Mocchiさん、お世話になっております。

実はver3.3のこのブログは、何年も放置していたサイトなのです。 :oops:
久しぶりに手を加えようと、今回あれやこれやといじっておりました。

エラーの件なのですが、どうやら今回のプラグインは関係なかったようです。
今回のプラグインを削除してから保存しなおしたのですが、それでも同じerrorが出てしまいました。大変お騒がせ致しました。 :oops:

冒頭に申しましたように今回いじり倒すつもりでしたので、いい機会ですので最新バージョンに移行して、各プラグイン、スキン、など全面的に改装しようと思います。

Mocchiさん、今回も本当にお世話になりました。
お陰さまでプラグインの作り方が少し分かってきました。 wink
ご指導、ご助言、本当にありがとうございました。 big_smile

オフライン

Board footer