web-dev-qa-db-ja.com

カスタム動的フィールド-モデルおよびデータ情報フィールドのSimpleXMLElement

おはようございます、

質問があります。自分のコンポーネントに自分のフィールドを作成します。 「SimpleXMLElement」クラスを使用しています。フォームはgetFormを介して完全に生成します:

$newfieldset = new SimpleXMLElement('<fieldset></fieldset>');
$newfieldset->addAttribute('name', 'case_customfields');

foreach($customfields as $customfield) 
{
    $field = $newfieldset->addChild('field');
    $field->addAttribute('name', $customfield->field_name . '-' . $customfield->id);
    $field->addAttribute('type', $customfield->field_type);
    $field->addAttribute('default', $customfield->field_default_value);
    $field->addAttribute('label', $customfield->field_label);
    $field->addAttribute('description', $customfield->field_description);

}

$form->setField($newfieldset);

return $form;  

自分のフィールドの値を返すgetItem関数も変更しました。

    $customfields_value = $this->getCustomFieldsValues($pk);

    foreach($customfields_value as $customfield_value) 
    {
        $singleCustomField = $this->getSingleCustomFields($customfield_value->custom_fields_id);
        $field_id = $singleCustomField['id'];
        $field_name = $singleCustomField['field_name'];

        $field = $field_name . '-' . $field_id;
        $item->$field = $customfield_value->value;

    }

    return $item;

完璧にも働きます。

問題は、編集フォームにカスタム値が表示されないことです。 XMLで静的フォーム(モデル/フォーム)を作成すると、データが作成されます。 「SimpleXMLElement」で作成されたフィールドの場合-データはフォームにありません。

もちろん、getFormの「SimpleXMLElement」クラスを介してフォームにデータをロードすることはできますが、それは悪い方法のようです。

どこで間違えますか?よろしくお願いします。

1
K.I.D.

私のせい。注文間違い。正しくは:1.最初に-フォームを作成し、SimpleXMLElementに変換します。

$ formXml = new SimpleXMLElement(file_get_contents(JPATH_COMPONENT.'path to xml file '));

  1. 子要素をフォームに追加します
  2. SimpleXMLElementを新しいXMLに変換する
  3. $ formとしての新しいXML(子を含む)
  4. $フォームを返す
1
K.I.D.