Ferreteria/v2/usage/forms/displaying: Difference between revisions

From Woozle Writes Code
< Ferreteria‎ | v2‎ | usage‎ | forms
Jump to navigation Jump to search
(note about LoadRecord())
(template example)
Line 1: Line 1:
==displaying a form==
==displaying a form==
See {{vbzcart/code|dropins/orders/order.php#L1178}} (inside function AdminPage_basic()) for a working example of a full-page form.
See {{vbzcart/code|dropins/orders/order.php#L1178|order.php AdminPage_basic()}} for a working example of a full-page form, and {{vbzcart/code|dropins/orders/order.php#L1313|order.php PageTemplate()}} for building a template.


===template example===
<php>
    private $tpPage;
    protected function PageTemplate() {
if (empty($this->tpPage)) {
    $sTplt = <<<__END__
<table>
  <tr><td align=right><b>ID</b>:</td><td>[[ID]]</td></tr>
  <tr><td align=right><b>Status</b>:</td><td>[[Status]]</td></tr>
  <tr><td align=right><b>Cart</b>:</td><td>[[Cart]]</td></tr>
</php>...<php>
  <tr><td align=right><b>Ship $ quoted</b>:</td><td>[[QuoShip]]</td></tr>
  <tr><td align=right><b>Final $ quoted</b>:</td><tr>[[QuoFinal]]</td></tr>
  <tr><td align=center colspan=2>
    <table>
    [[AmtMerch]]
    [[BalBtnsLine]]
    [[RecalcLine]]
    </table>
  </td></tr>
</table>
__END__;
    $this->tpPage = new fcTemplate_array('[[',']]',$sTplt);
}
return $this->tpPage;
</php>
===without templates===
It can also be done without templates by retrieving the control and asking it to render itself:<php>
It can also be done without templates by retrieving the control and asking it to render itself:<php>
    $oForm = $this->EditForm();  // retrieve the form object (build it if needed)
    $oForm = $this->EditForm();  // retrieve the form object (build it if needed)

Revision as of 16:46, 8 November 2015

displaying a form

See Template:Vbzcart/code for a working example of a full-page form, and Template:Vbzcart/code for building a template.

template example

<php>

   private $tpPage;
   protected function PageTemplate() {

if (empty($this->tpPage)) { $sTplt = <<<__END__

</php>...<php>

QuoFinal
ID:ID
Status:Status
Cart:Cart
Ship $ quoted:QuoShip
Final $ quoted:
AmtMerchBalBtnsLineRecalcLine

__END__; $this->tpPage = new fcTemplate_array('','',$sTplt); } return $this->tpPage; </php>

without templates

It can also be done without templates by retrieving the control and asking it to render itself:<php> $oForm = $this->EditForm(); // retrieve the form object (build it if needed) $oForm->LoadRecord(); // copy values from {memory image of record} to {form fields} $ftTag = $oForm->ControlObject('Name')->Render($doEdit); $ftCust = $oForm->ControlObject('ID_Cust')->Render($doEdit); $ftAddr = $oForm->ControlObject('ID_Addr')->Render($doEdit); $ftName = $oForm->ControlObject('ID_Name')->Render($doEdit); </php> ...(and so on), then manually plugging the rendered controls into the desired output format:<php> $out .= <<<__END__

...

ID:$id
Tag:$ftTag
Status:$ftStatus
Customer:$ftCust
Address:$ftAddr
Name:$ftName

__END__; </php> ...but note that calling LoadRecord() causes the Field objects to return TRUE from IsChanged() if the loaded value is non-NULL. This overrides POST data in $oForm->Save(), so presumably you'll need to build the update query manually or else clear the form fields somehow (currently not supported, but maybe it should be).