I've been very hard to get this working but I have no idea if it's even possible. It feels as though it should be though.
I have created a block that extends widget form and renders a form in the admin panel.
The issue that I'm having is that I have a section of this form that's been created in a custom template file. Rather than creating forcing the entire form to be a template file, is there a way for me to append this data within the form itself?
I am easily able to add the template to the page, the only issue is that it's not contained within the `<form></form>` tags. Causing it to not submit the data that's in that template.
Here's my block class:
<?php
class Darkhorse_Onsite_Block_Adminhtml_PurchaseOrder_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
{
protected function _prepareForm()
{
$form = new Varien_Data_Form(array(
'id' => 'edit_form',
'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))),
'method' => 'post',
'enctype' => 'multipart/form-data'
));
$purchaseOrder = Mage::registry('current_purchaseOrder');
if ($purchaseOrder->getId()) {
$form->addField('id', 'hidden', array(
'name' => 'id',
));
}
$form->addField('job_id', 'hidden', array(
'name' => 'job_id',
));
$fieldset = $form->addFieldset('base_fieldset', array('legend' => Mage::helper('onsite')->__('Purchase Order Settings')));
$fieldset->addField('order_number', 'text', array(
'label' => Mage::helper('onsite')->__('Order Number'),
'title' => Mage::helper('onsite')->__('Order Number'),
'name' => 'order_number',
'required' => true,
));
$fieldset->addField('vendor_id', 'select', array(
'label' => Mage::helper('onsite')->__('Vendor'),
'title' => Mage::helper('onsite')->__('Vendor'),
'name' => 'vendor_id',
'values' => Mage::getModel('onsite/vendor')->getCollection()->toOptionArray()
));
$fieldset->addField('tracking', 'text', array(
'label' => Mage::helper('onsite')->__('Tracking Number'),
'title' => Mage::helper('onsite')->__('Tracking Number'),
'name' => 'tracking',
));
$fieldset->addField('status_id', 'select', array(
'label' => Mage::helper('onsite')->__('Status'),
'title' => Mage::helper('onsite')->__('Status'),
'name' => 'status_id',
'values' => Mage::getModel('onsite/purchaseOrder_status')->getCollection()->toOptionArray(),
));
$form->setUseContainer(true);
$form->addValues($purchaseOrder->getData());
$this->setForm($form);
return parent::_prepareForm();
}
protected function _prepareLayout()
{
$items = $this->getLayout()->createBlock('onsite/adminhtml_purchaseOrder_item');
$this->setChild('items', $items);
return parent::_prepareLayout();
}
public function getFormHtml()
{
return parent::getFormHtml().$this->getChildHtml('items');
}
}And the template:
<?php
$items = Mage::getModel('onsite/purchaseOrder_item')->getCollection();
$items->addFieldToFilter('purchaseOrder_id', Mage::registry('current_purchaseOrder')->getId());
?>
<style>
.form-list tr .value input.small-input {width:50px;}
</style>
<div class="entry-edit">
<div class="entry-edit-head">
<h4 class="icon-head head-edit-form fieldset-legend">Purchase Order Items</h4>
<button class="save" style="float:right;" onclick="addItem()">Add Item +</button>
</div>
<div class="fieldset">
<table class="form-list">
<tbody id="testing123">
<tr>
<td class="value"><strong>Part Number</strong></td>
<td class="value"><strong>Description</strong></td>
<td class="value"><strong>Quantity</strong></td>
<td class="value"><strong>Status</strong></td>
<td class="value"><strong>Price</strong></td>
<td class="value"><strong>Line Total</strong></td>
</tr>
<?php foreach ($items as $item): ?>
<tr>
<td class="value">
<input type="text" class="input-text" name="item[<?= $item->getId() ?>][sku]" value="<?= $item->getSku() ?>">
</td>
<td class="value">
<input type="text" class="input-text" name="item[<?= $item->getId() ?>][description]" value="<?= $item->getDescription() ?>">
</td>
<td class="value">
<input type="text" class="input-text small-input" name="item[<?= $item->getId() ?>][qty]" value="<?= ($item->getQty() ? $item->getQty() : '1') ?>">
</td>
<td class="value">
<select class="select" name="item[<?= $item->getId() ?>][status]">
<option>-- Please Select --</option>
<?= Mage::getModel('onsite/purchaseOrder_status')->getCollection()->toOptionsHtml($item->getStatusId()); ?>
</select>
<td class="value">
<input type="text" class="input-text small-input price-input" name="item[<?= $item->getId() ?>][price]" value="<?= $item->getPrice() ?>">
</td>
<td class="value" style="text-align:right">
<strong><?= Mage::helper('core')->currency(($item->getQty() ? $item->getPrice()*$item->getQty() : $item->getPrice())) ?></strong>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<div class="clear" style="border-top:1px solid #000; margin:5px;"></div>
<div style="margin-left:5px">
<h3>Total</h3>
<h3 id="total"></h3>
</div>
</div>
</div>
<script>
var i = 0;
var addItem = function()
{
var html = '<tr>' +
'<td class="value">' +
'<input type="text" class="input-text" name="item[add][' + i + '][sku]" value="">' +
'</td>' +
'<td class="value">' +
'<input type="text" class="input-text" name="item[add][' + i + '][description]" value="">' +
'</td>' +
'<td class="value">' +
'<input type="text" class="input-text small-input" name="item[add][' + i + '][qty]" value="">' +
'</td>' +
'<td class="value">' +
'<select name="item[add][' + i + '][status]">' +
'<option>-- Please Select --</option>' +
'<?= Mage::getModel('onsite/purchaseOrder_status')->getCollection()->toOptionsHtml(); ?>' +
'</select>' +
'<td class="value">' +
'<input type="text" class="input-text small-input" name="item[add][' + i + '][price]" value="">' +
'</td>' +
'<td class="value">' +
'</td>' +
'</tr>';
jQuery('#testing123').append(html);
i++;
}
jQuery(document).ready(function(){
var total = 0;
jQuery('.price-input').each(function(){
total += +jQuery(this).val();
});
jQuery('#total').html(total.toFixed(2));
});
</script>