web-dev-qa-db-ja.com

Content Plugin loadfileはCONDITIONALフォーム/データをロードしますが、データを保存しません-なぜですか?

私は完全に困惑しています!これまでに正常に実行したように、カスタムフィールドをカテゴリにロードしようとしています。これは question/answer で説明されています。カテゴリに関するいくつかの基準に応じて別のフォームをロードしようとするまで、期待どおりに機能します。

両方の場合(条件付きと無条件)、

  1. フォームが読み込まれる
  2. 既存のデータが取得/ロードされます
  3. 保存時、$ _ POSTにはカスタムデータが含まれます

ただし、フォームが条件付きで読み込まれる場合、フォームは期待どおりに読み込まれますが、保存されません。保存されないだけでなく、元々ロードされていたデータもなくなります!

私の最初の考えは、デフォルトのフォーム名が必要であると考えていましたが、ページをロードし、データを解析して正しくポストするための正しいフォームを決定できたため、何が問題なのかはわかりません。

_$_POST_保存時の変数:(両方の場合)

_Array
(
    [category_layout] => 
    [image] => 
    [my_pse] => P
    [my_extra1] => 1
    [my_extra2] => 22
    [my_extra3] => 333
)
_

onContentPrepareFormからのコード

if(true)テストは、2つのコードブロックを簡単に切り替えるためのものです。

_if(true) {
    // Unconditional loading does everything as expected:
    // It Saves/Retrieves to/from #__categories.params
    JForm::addFormPath(__DIR__ . '/forms');
    $form->loadFile('customfields2', false);
    return true;
}else{
    // Conditional loading does everything as expected EXCEPT:
    // It does not save it #__categories.params
    if($pse=='P') {
        JForm::addFormPath(__DIR__ . '/forms');
        $form->loadFile('customfields1', false);
        return true;
    }elseif($pse=='S'){
        JForm::addFormPath(__DIR__ . '/forms');
        $form->loadFile('customfields2', false);
        return true;
    }elseif($pse=='E') {
        JForm::addFormPath(__DIR__ . '/forms');
        $form->loadFile('customfields3', false);
        return true;
    }else{
        return true;
    }
}
_
2
GDP

投稿されたとおり、質問に関連性がないと思われるコーディングエラーが原因であったため、質問は基本的に回答できません。私の最初の傾向は質問を削除することでしたが、コーディングエラーの理由は、同様の問題に遭遇する可能性がある人にとっては十分興味深いものだと思いました。

つまり、ロードしたいフォームのタイプを判別するためのコードは$dataを参照しており、保存プロセス中にJoomlaがプラグイン関数を呼び出したときに静かに次のエラーを取得していました。

Notice: Trying to get property of non-object in myplugin\myplugin.php on line 12

おそらく、これがフォームの上流への読み込みを妨げていたため、Joomlaはフォームデータの処理方法を知らなかったため、ドロップしました。

保存中にのみこのエラーが発生する理由は、$dataonContentPrepareForm関数に渡されているためです保存中に呼び出されると、空になります。これは私には「正しい」とは思えないので、そこにあったと私は思いますが、それでも警告通知が発せられたため、関数が失敗し、最終的にフォームデータが失われました。

3
GDP