Nucleus(JP)フォーラム

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

ログインしていません。

#1 2012-09-10 12:03:56

mekyo
メンバー
登録日: 2005-11-22
投稿: 80

Re: 不具合 [~v3.64] NucleusPlugin::getOption

不具合 [~v3.64] NucleusPlugin::getOption

ずっと前に私が報告しましたが(2006.12.12 関連ページ参照)
修正済みとの返答があるので修正されていると思いコードを確認していませんでした。
どうもいまだに修正されていないようです。

※(本家のコードにも同じ不具合があります。)

不具合
・いつのまにか使っているとだんだん表示が遅くなっていく。
・'global'以外のOptionに'global'と同名がある場合は、
'global'の値を正しく取得できない

【影響を受けるバージョン】
Nucleus:  ~ 3.64 まで

※v4.0シリーズは、調べていませんので
この問題があるかは不明です。

【原因】
NucleusPlugin::getOption関数の
$queryの whereに d.ocontext='global' がないためです。

setOption deleteOption createOption
は、'global'オプションに対して動作するが
getOptionは、すべてのオプションに対して動作している。

'global'以外のデータは「1対多」の関係にあるので現状のコードでは意味がありません。
'global'以外のすべてのオプションに対して無意味な大量fetchをしています。

【修正方法】
・'global'はocontextid=0以外のデータはないので
AND o.ocontextid=0 は、無くても取得時間はほとんど変わらないようです。
・テーブルの順番を逆にした方が、ログ上では若干処理が速いようです。
-  . sql_table('plugin_option').' o , ' . sql_table('plugin_option_desc').' d '
+  . sql_table('plugin_option_desc').' d , ' . sql_table('plugin_option').' o '

◆NucleusPlugin::getOption

   sql_table('plugin_option').' o, '.
   sql_table('plugin_option_desc').' d '.
   'WHERE d.opid='. intval($this->getID()).' AND d.oid=o.oid

→ → → → → → ↓ ↓ ↓

  sql_table('plugin_option_desc').' d , '
 . sql_table('plugin_option').' o '
 . 'WHERE d.opid='. intval($this->getID())
 . " AND d.ocontext='global' AND d.oid=o.oid  AND o.ocontextid=0 "

※ オプションデータが少ないプラグインは ほとんど影響を受けません。
※ 記事数の少ないサイトでは、それほど影響を受けないので
コアの修正まで待った方がいいと思います。

※ 自分で修正をする場合は、
nucleus/libs/PLUGIN.phpを開いて
上の部分を修正します。

【関連ページ】
質問:getOption()の戻り値について : Posted: 2009.06.15 (月)
getOptionへの動作の要望 : Posted: 2006.12.12 (火)


◆個別にプラグイン側で回避するためのコード
:!: ※ V4.0からgetOption関数の上書きが禁止されているそうなので、
  なるべく下記のコードは使わないでください。
  link [4.0の開発 - 7] プラグイン用基底クラスの整備とその影響
※コアを修正すると解決するため基本的に必要ないです。
プラグイン側で対応するには
NP_プラグイン名.php に getOption関数を追加します。

public function getOption($name)
{
   if (getNucleusVersion() > 364)
     return parent::getOption($name);
    else
     return $this->_getOption('global',0,$name);
}

オフライン

#2 2014-09-03 13:37:52

yama
Administrator
登録日: 2005-07-07
投稿: 1,207
ウェブサイト

Re: 不具合 [~v3.64] NucleusPlugin::getOption

この件、日本語版・本家版ともに3.70で修正します

オフライン

Board footer