2016-07-08 3 views
2

多くの商品データオブジェクトを1つの請求書/見積もりデータオブジェクトに一度に追加する必要があります。したがって、基本的には、私はすべての請求書の詳細を入力し、フロントエンドからすべての製品を追加するまで、新しい製品オブジェクトを追加するボタンがあるフォームが必要です。私はシルバーストライプの知識を持っていますが、これをどのように達成できるかはわかりませんが、それが可能であることはわかっていますsilverstripe 3.3で一度に多くのDataObjectを別のDataObjectに追加できますか?

グリッドフィールドとマルチフォームは、同時に追加する必要があるオブジェクトがあります。他のすべてが追加され、一度に1つの製品を追加することはできますが、同時に複数の製品を追加することはできません。私はまた別のページ/フォームを作成して請求書に製品を追加することを考えましたが、それはチームにとっては時間がかかるでしょう

もし私が正しい方向に私を送ることができれば幸いです。ありがとう!あなたがフォームに)

1 ...私は前にこれをやったが、このコードは、それはアプローチを記述することでテストされていません注意してください...このような何かを行う必要がありますこれを達成するために

答えて

1

関数は必要な数のインスタンスを追加しますが、各フィールドの名前はインデックスで変更します。それが未完了のフィールドを非表示にするように

$fields = FieldList::create(); 

for($i=1; $i < 10; $i++) { 

    $fields->push(LiteralField::create('p'.$i,'<h1>Product '.$i.'</h1>')); 

    foreach (singleton('Product')->getFrontendFields() as $field) { 
     $fields->push($field); 
     $field->setName($field->getName().'_'.$i); 
    } 
} 

アクション/処理機能におけるその後同じ...関連する製品データオブジェクトを作成または更新...

for($i=1; $i < 10; $i++) { 
    foreach (singleton('Product')->getFrontendFields() as $field) 
     $arrProductData[$field->getName()] = $data[$field->getName().'_'.$i]; 

    if (!$product = Product::get()->ByID($arrProductData['ID'] 
     $product = Product::create(); 

    $product->update($arrProductData); 
} 

フォームJavaScriptがそれに追加されていることができますあなたが最後に完了すると、新しいものが表示されます。

また、銀ストライプフォームで多くの異なるオブジェクトタイプを使用することもできます。お役に立てれば。

+0

ありがとうございました!完全な意味合いがあり、これで間違いなく助けになります –

関連する問題