2011-12-18 11 views
0

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

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

コード内から何も出力しないでください。データを出力する(または出力する)行があります。 別のポイントは、コンテキストをチェックしていない、コードを記事、カテゴリなどのために実行したいのですか、記事のみですか? それは記事だけのためだ場合は、コンテキストが「com_content.article」に等しい場合は、チェックする必要があります:

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

最後に一つを。 "onContentPrepareForm"イベントを介して記事/カテゴリフォームにフィールドを追加していますか?あなたは "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; 
} 

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> 
    <fields name="attribs"> 
     <fieldset name="create_xml" label="Create XML"> 
      <field name="create_xml" [...]> 
      <field name="field" [...]> 
     </fieldset> 
    </fields> 
</form> 

それは助け!

+0

ありがとうございます!私は1つのことを得ていませんでしたが、私のコードの中から何も出力しないと言ったらどういう意味ですか?プラグインがxmlファイル自体を作成すべきでないことを意味しますか?私はまた、onContentPrepareFormを使用せずにこれを行う方法があるのだろうかと疑問に思っていましたか?私の問題は、Javascriptを使用してcreateElementを使用してユーザーが作成する必要があるため、フィールドの前に指定できないことです。 – ghego1

+0

こんにちは、私はこの呼び出しを変更する必要があることを意味します:echo $ doc-> save( 'xmlf /'。 'test'。 'xml');これは、$ doc-> save( 'xmlf /'。 'test'。 'xml'); htmlを出力する必要があるイベントがありますが、この場合は何も出力しないでください。私はそれが助けてうれしいです:)あなたが知らない "フィールド"については、あなたはフィールド名についてユーザーにコントロールを与えてはいけません、常に$ _POSTの具体的なパターンを検索するか、あなたが探しているすべてのフィールド名を持つ隠しフィールドを形成します。 – alghimo