我必须一次性将许多产品数据对象添加到一个发票/报价数据对象中。所以基本上 - 我需要一个表格,我输入所有发票的详细信息,然后有一个按钮添加一个新的产品对象,直到我添加了前端的所有产品。我有silverstripe知识,但不知道如何实现这一点,但我知道这是可能的
我尝试使用gridfields和multiforms,因为我还需要同时添加其他对象。所有其他人添加,我可以一次添加一个产品,但我不能一次添加多个产品。我还想过制作一个单独的页面/表格来逐个将产品添加到发票中,但这对团队来说是非常耗时的
如果可以,请向我发送正确的方向,我们将不胜感激。谢谢!
答案 0 :(得分:1)
为了达到这个目的,你需要做这样的事情......注意我之前已经做过这个但是这个代码没有经过测试就是用来描述这个方法......
1)在Form函数中添加所需数量的实例,但用索引更改每个字段的名称。
$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,以便隐藏未完成的字段,并在完成最后一个字段时显示一个新字段。
您还可以使用上述内容以silverstripe形式包含许多不同的对象类型。希望这会有所帮助。