plugindev:event:prepluginoptionsedit

event_PrePluginOptionsEdit

  • (v2.0b) 各プラグインのオプション入力フォームを生成する過程で実行
  • (v2.2) パラメータ追加
  • (v3.2) 各オプションにパラメータ追加

呼出元

  • ADMIN.php(プラグインオプションフォーム生成時)
            $manager->notify(
                'PrePluginOptionsEdit',
                array(
                    'context' => 'global', 
                    'plugid' => $pid, 
                    'options'=>&$aOptions
                )
            );
  • ADMIN.php(プラグインのblogオプションなどの各オプションフォームの生成時)
            $manager->notify(
                'PrePluginOptionsEdit',
                array(
                    'context' => $context, 
                    'contextid' => $contextid, 
                    'options'=>&$aOptions
                )
            );

渡されるデータの内容

  • context – (v2.2) どの種類のプラグインオプションであるか。(global, blog, member, item, categoryのいずれか )
  • options – 次のインデックスをもつ連想配列:
    • name (オプションの名前)
    • value (オプションの値)
    • oid (オプションのid)
    • description (オプションの説明)
    • type (オプションの型)
    • typeinfo (select option型などで使う、その他のデータ)
    • contextid (コンテクストid)
    • extra (空)
      追加オプションをここに加えることも可能(それらで何かの処理をするときはPostPluginOptionsUpdateの記述も必要)extraフィールドを用いて、オプションに追加HTML(たとえばフォームのコントロール)を追加できます。もしそうする場合、 extra に追加する前に pid と getID() を比較し、さらに name をチェックすべきです。
  • plugid(contextがglobalの場合のみ) – プラグインid。
  • contextid – コンテクストid (blogid, memberid, catid, itemid コンテクストによる)

使用例

動作確認用プラグインNP_PluginOptionsExtras.php

<?php
class NP_PluginOptionsExtras extends NucleusPlugin {
	function getName() { return 'PluginOptionsExtras'; }
	function getAuthor() { return 'nakahara21'; }
	function getURL() { return ''; }
	function getVersion() { return '0.0'; }
	function getDescription() {
		return 'samples for PluginOptions Extras';
	}
	function install() {
		$this->createOption('g_extra','BlogOption', 'text', '');
		$this->createBlogOption('b_extra','BlogOption', 'text', '');
		$this->createCategoryOption('c_extra','CategoryOption', 'text', '');
		$this->createMemberOption('m_extra','MemberOption', 'text', '');
		$this->createItemOption('i_extra','ItemOption', 'text', '');
	}
	function supportsFeature($what){
		switch ($what){
			case 'SqlTablePrefix':
				return 1;
			default:
				return 0;
		}
	}
	function getEventList() { return array('PrePluginOptionsEdit'); } 
	function event_PrePluginOptionsEdit($data) {
		$extraString = '<div style="color:red;">*Input '.$data['context'].' values for NP_PluginOptionsExtras</div>';
 
		$context = $data['context'];
		$optionNamesForExtra = array(
			'global' => 'g_extra',
			'category' => 'c_extra',
			'item' => 'i_extra',
			'blog' => 'b_extra',
			'member' => 'm_extra'
		);
		$oid = $this->_getOID($context, $optionNamesForExtra[$context]);
 
		switch ($context){
			case 'global':
				$data['options'][$oid]['extra'] = $extraString;
				break;
			case 'category':
			case 'item':
			case 'blog':
			case 'member':
				for($i=0;$i<count($data['options']);$i++){
					if($data['options'][$i]['oid'] == $oid && $data['options'][$i]['name'] == $optionNamesForExtra[$context]){
						$data['options'][$i]['extra'] = $extraString;
					}
				}
				break;
			default:
				break;
		}
	}
}
?>

各オプション入力エリアに赤字でメッセージを出力する例。
メッセージに限らず、これを応用すれば、javascriptによる入力支援や入力規則の制限などにも使用できます。

 
plugindev/event/prepluginoptionsedit.txt · 最終更新: 2011/03/23 21:28 (外部編集)