moja klasa dziala w oparciu o szablony, a konkretnie o smarty.
wygląda to tak:
pola definiuje w php. metoda klasay: AddInput.
Natomiast umiejscowiam je w szablonie o tak: {input name="nazwapola"}
Mozliwe jest to dzieki temu, iz definiuje prefilter w smartym, dzieki czemu najpierw parsuje szablon, a pozniej wystąpienia moich pol zamieniam na pluginy. wszystko proste i przejrzyste

przykladowy kod php:
<?php
$form=new Formr(); //stworzenie obiektu
$form->SetErrorMethod('blad');//ustawienie metody obsługującej komunikaty błędu
$form->errorClass='error'; //klasa css dla wyświetlania błędów
//dodanie pola
'type'=>'text',
'id'=>'id1',
'label'=>'x',
));
'type'=>'text',
'id'=>'id11',
'label'=>'x',
));
'type'=>'textarea',
'id'=>'id2',
'label'=>'x',
));
'type'=>'checkbox',
'id'=>'id3',
'label'=>'x',
));
'type'=>'submit',
'id'=>'go',
'label'=>'x',
));
$verify=array();//tablica z polami błędnymi if ($form->WasSubmit('go')) //czy wciśnięto go
{
$form->SetValues();//przypisanie wartości do pól
$error=$form->Validate($verify);
if (!$error && !$form->WasThisOperation())
{//action
}
}
$form->AssignData($template);//przypisanie niezbędnych danych do obiektu smarty'ego
$template->assign('mark','<span style="color: red">[Popraw]</span>');//przypisanie komunikatu błędu
$template->assign_by_ref('verify',$verify);//przypisanie tablicy z błędnymi polami
$template->register_prefilter('smarty_prefilter_formr');//załadowanie prefiltru
?>
To jest bardzo podstawowy i uproszczony kod

szablon:
{form_start}
<td>{label for="id1"}
</td> <td>{input name="id1"}
</td> <td>{label for="id11"}
</td> <td>{input name="id11"}
</td> <td>{label for="id2"}
</td> <td>{input name="id2"}
</td> <td>{label for="id3"}
</td> <td>{input name="id3"}
</td> <td colspan="2">{input name="go"}
</td>
{form_end}
Tylko nie gancze mnie za <Table> - to stary kod