JoomlaのOnContentBeforeデータをXMLに保存できません

フォームからデータを取得してxmlファイルに保存するプラグインを設定しました。コード自体を試してみましたが、それはうまくいきましたが、onContentBeforeSaveメソッドを使ってプラグインに挿入すると、もう動作しません。 ここにプラグインのコードはありますが、私は何がうまくいかないのか分かりません!

defined('_JEXEC') or die();

jimport('joomla.plugin.plugin');

class plgContentsave2xml extends JPlugin
{
  public function __construct($subject, $config)
  { parent::__construct($subject, $config);
  }

  function onContentBeforeSave($context, &$article, $isNew)
  { global $mainframe;

if(isset($_POST['create_xml']))
{

    $doc = new DOMDocument('1.0');
   //Formatting the file
    $doc->formatOutput = true;
    $doc->encoding = "Utf-8";

    $field = $_POST['field'];
    $field = utf8_encode($field);

    $part = $doc->createElement('part');
    $part = $doc->appendChild($part);

    $field = $doc->createElement('field');
    $field = $part->appendChild($field);
    $text = $doc->createTextNode($field);
    $text = $field->appendChild($text);
    }


echo $doc->save('xmlf/' . 'test' . '.xml');
}

    return true;
  }
}
?>
0

1 答え

私はあなたのコード内から何も出力すべきではないと思うし、データを出力する(または出力するかもしれない)行があると思います。 別のポイントは、コンテキストをチェックしていないこと、記事、カテゴリなどのコードを実行するか、記事のみを実行することですか? 記事のみの場合は、コンテキストが "com_content.article"に等しいかどうかを確認する必要があります:

if ( $context != "com_content.article" ) { return; }

最後に一つだけ。 "onContentPrepareForm"イベントを介して記事/カテゴリフォームにフィールドを追加していますか?

もしそうなら、次のようにデータを取得する必要があります:

function onContentBeforeSave( $context, &$row, $isNew ) {       
   if ( $context != "com_content.article" ) {
      return;
   }
   jimport( 'joomla.html.parameter' );
   $params = new JParameter( $row->attribs );
   $create_xml = $params->get( 'create_xml', false );
   if ( $create_xml ) {
      $field = $params->get( 'field', '');
     //The rest of your code here...
      //If you don't want these fields to be stored with the params of the article:
      $params->set( 'field', '' );
      $params->set( 'create_xml', '' );
   }
   $row->attribs = (string)$params;
   return;
}

また、 "onContentPrepareForm"を使用していない場合は、次のように実装できます。

function onContentPrepareForm($form, $data)
{
   $return = true;
   if (!($form instanceof JForm))
   {
      $this->_subject->setError('JERROR_NOT_A_FORM');
      $return = false;
   } elseif ( $form->getName() != 'com_content.article' ) { 
      $return = true;
   } else {
     //Add the registration fields to the form.
      JForm::addFormPath( __DIR__ . DIRECTORY_SEPARATOR . 'form' );
      $form->loadFile('your_file', false);
      $return = true;
   }

   return $return;
}

plugin_folder/form/your_file.xmlというプラグインフォルダ内に、次の形式のファイルが必要です。

<?xml version="1.0" encoding="utf-8"?>
<form>
    
        
</form>

私はそれが助けて欲しい!

0
追加された
本当にありがとう!私は1つのことを得ていませんでしたが、私のコードの中から何も出力しないと言ったらどういう意味ですか?プラグインがxmlファイル自体を作成すべきでないことを意味しますか?私はまた、onContentPrepareFormを使用せずにこれを行う方法があるのだろうかと疑問に思っていましたか?私の問題は、Javascriptを使用してcreateElementを使用してユーザーが作成する必要があるため、フィールドの前に指定できないことです。
追加された 著者 ghego1,
こんにちは、私は、例えば、この呼び出しを変更する必要があります:echo $ doc-> save( 'xmlf /'。 'test'。 'xml');これは、$ doc-> save( 'xmlf /'。 'test'。 'xml'); htmlを出力する必要があるイベントがありますが、この場合は何も出力しないでください。私はそれが助けてうれしいです:)あなたが知らない "フィールド"については、あなたはフィールド名についてユーザーにコントロールを与えてはいけません、常に$ _POSTの具体的なパターンを検索するか、あなたが探しているすべてのフィールド名を持つ隠しフィールドを形成します。
追加された 著者 alghimo,