1

I have a Magento standard admin form and it works fine for editing one collection record, but I want to make it so I can edit multiple collection records at once.

My idea was to do a for loop where it adds the fields:

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

    $fieldset->addField('start_date' . $i

and add indexes to the field names, but I don't know how to properly modify the collection query and setting form data to account for the new indexes. The table I am pulling records from and modifying is a simple custom table with extra order info in it for each product.

Any ideas? Has anyone done this before and can share their code?

1

1 Answer 1

1

I ended up setting manually the data fields like this at the top of the form. The $data will be an array if you get a collection for the form edit page:

  /**
         * Custom code to be used for $form->setValues as an array from $data
         * $valueData['data_key' . $index] = value
         */

        if (isset($data[$i]) && is_array($data[$i])) {
            $valArr = $data[$i];
        } else {
            $valArr = $data;
        }
        foreach ($valArr as $datakey => $dataitem) {
            $valueData[$datakey . $i] = $dataitem;
        }

The form fields were like this:

 $fieldset->addField(
            'start_date' . $i, 'text', array(
                'label'        => Mage::helper('payperrentals')->__('Start Date'),
                'class'        => 'required-entry startdate',
                'name'         => 'start_date' . $i,
                'title'        => $i
            )
        );

Then on the end of the form I set it with:

 $form->setValues($valueData);

Finally on the controller saveAction I used something like this:

for ($i = 0; $i < $numberOfProducts; $i++) {
$reservationOrderItem = Mage::getModel('payperrentals/reservationorders')->load($entityid);
$reservationOrderItem->setStartTurnoverBefore(ITwebexperts_Payperrentals_Helper_Date::toMysqlDate
($turnoverAr['before']))
    ->setEndTurnoverAfter(ITwebexperts_Payperrentals_Helper_Date::toMysqlDate
    ($turnoverAr['after']))
    ->setQty($data['qty' . $i])
    ->setProductId($data['product_id' . $i])
    ->setStartDate($data['start_date' . $i])
    ->setEndDate($data['end_date' . $i])
    ->setProductType('reservation')
    ->setComments($data['comments' . $i]);

if ($entityid) {
    $reservationOrderItem->setId($entityid);
}
$reservationOrderItem->save(); }
1
  • Please remember to accept your answer once you are able to close out the post Commented Dec 11, 2014 at 22:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.