Difference between revisions of "Ferreteria/v2/usage/forms/displaying"

from HTYP, the free directory anyone can edit if they can prove to me that they're not a spambot
< Ferreteria‎ | v2‎ | usage‎ | forms
Jump to navigation Jump to search
(extracted from parent page)
 
m (markup updates)
 
(6 intermediate revisions by the same user not shown)
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 {{l/vc/code|dropins/orders/order.php#L1178|order.php AdminPage_basic()}} for a working example of a full-page form, and {{l/vc/code|dropins/orders/order.php#L1313|order.php PageTemplate()}} for building a template.
  
It can also be done without templates by retrieving the control and asking it to render itself:<php>
+
===template example===
    $oForm = $this->EditForm();
+
<source lang=php>
    $oForm->LoadRecord();
+
    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;
 +
</source>
 +
===without templates===
 +
It can also be done without templates by retrieving the control and asking it to render itself:<source lang=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);
 
    $ftTag = $oForm->ControlObject('Name')->Render($doEdit);
 
    $ftCust = $oForm->ControlObject('ID_Cust')->Render($doEdit);
 
    $ftCust = $oForm->ControlObject('ID_Cust')->Render($doEdit);
 
    $ftAddr = $oForm->ControlObject('ID_Addr')->Render($doEdit);
 
    $ftAddr = $oForm->ControlObject('ID_Addr')->Render($doEdit);
 
    $ftName = $oForm->ControlObject('ID_Name')->Render($doEdit);
 
    $ftName = $oForm->ControlObject('ID_Name')->Render($doEdit);
</php>
+
</source>
...(and so on), then manually plugging the rendered controls into the desired output format:<php>
+
...(and so on), then manually plugging the rendered controls into the desired output format:<source lang=php>
 
$out .= <<<__END__
 
$out .= <<<__END__
 
<table>
 
<table>
Line 22: Line 49:
 
</table>
 
</table>
 
__END__;
 
__END__;
</php>
+
</source>
 +
...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).

Latest revision as of 13:19, 15 January 2020

displaying a form

See order.php AdminPage_basic() for a working example of a full-page form, and order.php PageTemplate() for building a template.

template example

    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;

without templates

It can also be done without templates by retrieving the control and asking it to render itself:

	    $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);

...(and so on), then manually plugging the rendered controls into the desired output format:

	$out .= <<<__END__
<table>
  <tr><td align=right><b>ID</b>:</td><td>$id</td></tr>
  <tr><td align=right><b>Tag</b>:</td><td>$ftTag</td></tr>
  <tr><td align=right><b>Status</b>:</td><td>$ftStatus</td></tr>
  <tr><td align=right><b>Customer</b>:</td><td>$ftCust</td></tr>
  <tr><td align=right><b>Address</b>:</td><td>$ftAddr</td></tr>
  <tr><td align=right><b>Name</b>:</td><td>$ftName</td></tr>
...
</table>
__END__;

...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).