PHP

まさか最初がPHPになろうとは。

なぜPHPか

それは、このPukiWikiがPHPで書かれているからです。
PukiWikiはさまざまな機能を有していますが、これらの多くはPHPで記述された機能追加ファイルによって実現されています。
これをプラグインといいます。
PukiWikiのインストール時にもとから用意されているプラグインにはこれらがあります。→プラグインマニュアル
これだけでは足りず、自分独自の機能を追加したい場合、その機能を有したプラグインを作成する必要があります。

amazonプラグインを作りたい

参考ソース

ブラキチ先生に以前作っていただいたPHP

<?php
// PukiWiki - Yet another WikiWikiWeb clone.
// $Id: ruby.inc.php,v 1.6 2005/05/07 07:41:31 henoheno Exp $
//
// Ruby annotation plugin: Add a pronounciation into kanji-word or acronym(s)
// See also about ruby: http://www.w3.org/TR/ruby/
//
// NOTE:
//  Ruby tag works with MSIE only now,
//  but readable for other browsers like: 'words(pronunciation)'

define('PLUGIN_TARGET_USAGE', '&target(URL){link name};');

function plugin_target_inline()
{
	if (func_num_args() != 2) return PLUGIN_TARGET_USAGE;

	list($url, $body) = func_get_args();

	// strip_htmltag() is just for avoiding AutoLink insertion
	$body = strip_htmltag($body);

	if ($url == '' || $body == '') return PLUGIN_TARGET_USAGE;

	return '<a href="' . $url . '" target="blank">' . $body . '</a>';

}
?>

実現したいHTML

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=hinatamitsuru-22&o=9&p=8&l=as1&asins=4062633760&fc1=000000&IS2=1&lt1=_blank&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=hinatamitsuru-22&o=9&p=8&l=as1&asins=4061859765&fc1=000000&IS2=1&lt1=_blank&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

→つまり商品番号のところだけ違うわけですね。

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=hinatamitsuru-22&o=9&p=20&l=qs1&f=ifr" width="120" height="90" frameborder="0" scrolling="no"></iframe>
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=hinatamitsuru-22&o=9&p=27&l=qs1&f=ifr" width="180" height="150" frameborder="0" scrolling="no"></iframe>

作ってみたPHP

<?php
// 
//  amazonの商品個別リンク用プラグインです。
//  2007/02/14 日向充

define('PLUGIN_AMAZON_SHOUHIN_USAGE', '#amazon_shouhin(product_id)');

//function plugin_amazon_shouhin_inline()
function plugin_amazon_shouhin_convert()
{
	if (func_num_args() != 1) return PLUGIN_AMAZON_SHOUHIN_USAGE;

	list($product_id) = func_get_args();

	if ($product_id == '') return PLUGIN_AMAZON_SHOUHIN_USAGE;

	return '<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=hinatamitsuru-22&o=9&p=8&l=as1&asins=' .
	 $product_id . '&fc1=000000&IS2=1&lt1=_blank&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr"' .
	' style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>';
}
?>
できたー!→

苦労した点

  1. function plugin_amazon_shouhin_inline()ではなく、function plugin_amazon_shouhin_convert()を使うんですね。
     →他の"#"始まりのプラグインのソースを見て解決。
  2. UTF8,LFはだめで、SHIFT-JIS,CR+LFなんですね。
     →"headers already sent"などのエラーが出る。(ググって解決)

分かったこと

  1. "."は連結なんですね。
  2. func_num_args()はCのargcみたいに、プログラム名を含む訳ではないんですね。(引数が1つなら1)
  3. list($product_id) = func_get_args();で引数を変数に格納。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS