Login Retreive lost passwordRegister
Search

Forum Index / NL Forum / SetMask %fh_header% %fh_footer%

[ This topic is solved ]

  John Doe 29 January 10 / 09:30  
Op dit moment worden de header en footer van een form (dus <form..., maar ook de javascripts en FormHandler promotieteksten, etc.) simpelweg aan het begin en eind van het formulier toegevoegd. Zou het ook mogelijk zijn om deze middels variabelen als bijv. %fh_header% en %fh_footer% binnen een SetMask-masker te positioneren?

Indien dit mogelijk zou zijn zou dit veel code en overerving (lees: geheugengebruik) binnen veel scripts kunnen schelen. Bovendien moet ik op dit moment 2 templates aanhouden; één voor het masker en één voor de webpagina zelf. Indien bovengenoemde oplossing gerealiseerd zou kunnen worden, zou men in staat zijn het hele formulier rechtstreeks in de pagina template (o.a. Smarty templates!) op te nemen! :-)

Mocht het realiseerbaar zijn, dan geef ik hier graag nadere toelichting over op dit forum!

  Johan Wiegel (Admin) 29 January 10 / 14:29  
Changed at 29 January 10 / 14:29
Ik denk dat dat het doel van FH voorbij schiet.

Dat is heel specifiek voor jou van toepassing, maar ik betwijfel of het van nu nut is voor andere gebruikers.

Ik begrijp overigens niet goed wat je bedoeld met het in 1 keer opnemem van het hele formulier, dat is nu ook heel goed mogelijk.
Je kunt je formulier toch als string op ieder gewenste positie neer zetten?

  John Doe 03 February 10 / 15:29  
In mijn ogen is het juist zo generiek als wat en zeker voor meerdere gebruikers van FormHandler een handige feature. Het is minstens zo generiek als de %error_style% waarvoor ik enige tijd geleden code aanleverde.

Ik zal proberen hier onder in zo min mogelijk tekst toch het idee duidelijk te maken. Ik weet niet in hoeverre ik het voordeel van deze feature hiermee duidelijk kan maken, maar ga het toch proberen. Het is in mijn ogen echt iets wat zich in de praktijk moet bewijzen, maargoed hier komt ie:

Op dit moment wordt er als het goed is door menigeen zo gewerkt met FormHandler i.c.m. Smarty:

FormHandler template 'form.tpl'

<div class="fieldWrapper" %error_style%>
    <label for="%name%">%title%%seperator%</label>
    %field%
    %help%
</div>


Smarty template 'smarty.tpl'

<html>
<body>

bla bla bla html header

{$form}

bla bla bla html footer

</body>
</html>


PHP code

$form = new FormHandler();

$form->setMask('form.tpl', true);
$form->TextField('veld 1', 'field_1');
$form->TextField('veld 2', 'field_2');

$my_form = $form->flush(true);

$tpl->assign('form', $my_form);
$tpl->display('smarty.tpl');


De hierboven omschreven methode werkt op zich goed. Echter, zodra je met complexere formulieren te maken krijgt en dus hier en daar wat HTML tussen de velden door wilt gooien, zit je gelijk vast aan het setten van meerdere maskers of door de AddHTML functie te gebruiken. Maargoed, dan ben je dus alsnog met opmaak bezig binnen je PHP code en dat is nou net wat we willen vermijden...

Mocht het formulier toch wat aan de simpele kant zijn, dan nog zou het efficienter kunnen. Via de hierboven omschreven methode heb je immers te allen tijde minimaal 2 maskers nodig; 1 voor smarty en 1 voor formhandler.

Nu komt het. Zo zou het ook kunnen:

Smarty template 'smarty.tpl'

<html>
<body>

bla bla bla html header

%fh_header%

    <div class="fieldWrapper" %error_style%>
        <label for="%name%">%title%%seperator%</label>
        %field%
        %help%
    </div>

    <div class="fieldWrapper" %error_style%>
        <label for="%name%">%title%%seperator%</label>
        %field%
        %help%
    </div>

%fh_footer%

bla bla bla html footer

</body>
</html>


PHP code

$html = $tpl->fetch('smarty.tpl');

$form = new FormHandler();

$form->setMask($html, false);
$form->TextField('veld 1', 'field_1');
$form->TextField('veld 2', 'field_2');

$form->flush();


In je templates heb je op deze manier 100% controle over de layout en hoeft helemaal niets wat styling betreft geregeld te worden in de PHP code. Het enige dat hiervoor dus hoeft te gebeuren is een optie om %fh_header% en %fh_footer% in je template op te nemen. Indien deze %-variabelen in de template voorkomen, plaats je de FormHandler header en footer daar, indien ze niet voorkomen plaats je ze simpel op de oude manier boven en onderaan het formulier.

Nogmaals; dit is een voorbeeld met een heel simpel formulier. De echte kracht zou zich pas uiten op het moment dat je complexe formulieren gaat bouwen.

Ongeacht de complexiteit scheelt deze werkwijze sowieso het bijhouden van meerdere templates (maskers) voor slechts 1 pagina. Daarnaast scheelt het een hoop code.

  Johan Wiegel (Admin) 03 February 10 / 16:03  
Dit schiet echt het doel van FH voorbij.
Na intern overleg is besloten dat dit niet wordt ingebouwd.

Maar FH is opensource, je kunt altijd een eigen versie maken.

  John Doe 09 February 10 / 11:17  
Ok, jammer. Ik snap niet helemaal waarom efficiëntere code en ruimere implementatiemogelijkheden het doel van FormHandler voorbijschieten, maar die keus is uiteraard volledig aan jullie.

Het bijhouden van een eigen versie is niet echt een optie; want dan mis ik alle updates die er onderwijl door jullie aan worden gedaan. En die zijn doorgaans wel de moeite waard...

  John Doe 12 February 10 / 22:08  
Changed at 13 February 10 / 15:08
Ik heb er toch maar een eigen versie van gemaakt. Bij deze de wijzigingen die hiervoor nodig waren. Ik hoop dat jullie het nog eens zouden willen overwegen, want zoals je ziet maakt het nauwelijks verschil in de code:

Regel 3841 wijzigen in:
$fh_header =


Regel 3862 en 3863 wijzigen in:
);
$fh_footer =


Regel 3874 t/m 3878 wijzigen in:
"-->".
$this->getJavascriptCode(false);

$search = array('%fh_header%', '%fh_footer%');
$replace = array($fh_header, $fh_footer);

$new_form = str_replace($search, $replace, $form, $num_replaced);

if ($num_replaced === 2)
    return $new_form;

return $fh_header . $form . $fh_footer;


That's it!

Tip: in class.MaskLoader.php staat op meerdere plekken een preg_replace(), terwijl hetzelfde gedaan kan worden met de snellere str_replace() functie. T.b.v. performance wellicht een idee om dit om te zetten?

  Johan Wiegel (Admin) 13 February 10 / 11:52  
Ziet er goed uit. Ik zal er eens mee testen en met mijn collega overleggen.

En hoe zou je een en ander in de handleiding verwerken?
Zodat ook anderen er mee aan de slag kunnen.

  Johan Wiegel (Admin) 13 February 10 / 11:57  
even in de snelheid gekeken, maar je vergeet volgens mij de javascript toe te voegen aan het einde?

  John Doe 13 February 10 / 15:14  
Ah je hebt gelijk. Bij het schrijven van de uitleg hierboven was ik even dat stukje vergeten. Zojuist heb ik de post gewijzigd, zodat het nu zou moeten kloppen.

Wat betreft de handleiding zou ik iets vermelden als:

"Wenst u de <form> en </form> tags op een specifieke positie in uw HTML te plaatsen? Gebruik dan %fh_header% en %fh_footer% in uw template/mask. Wanneer de variabelen niet gevonden worden, zal FormHandler de tags automatisch aan het begin en eind van uw formulier invoegen."

  Johan Wiegel (Admin) 13 February 10 / 15:48  
Heb even zitten testen en een paar kleine aanpassingen gemaakt.

%header% en %footer% is meer in de lijn van de al gebruikte placeholders.

Ik heb een nieuwe versie geplaatst en de manual van setmask aangepast.

  John Doe 13 February 10 / 16:52  
Top!

NB: Heb je ook de preg_relace() --> str_replace() aanbeveling bekeken?

  Johan Wiegel (Admin) 13 February 10 / 17:01  
Nee nog niet, ik heb weekend, maar als je code aanlevert .....

  John Doe 13 February 10 / 18:25  
Changed at 13 February 10 / 18:26
class.MaskLoader.php

Regel 85 vervangen door:
return str_replace( $this->_search, $replace, $this->_subject);


Regel 114 vervangen door:
$this->_subject = str_replace ( $this->_search, $replace, $this->_subject, $limit );


class.FormHandler.php

Regel 2876 vervangen door:
$loader -> setSearch( array( '%field%', '%value%') );


Regel 2894 vervangen door:
$search[]  = '%'.$name.'%';


Regel 3529 t/m 3536 vervangen door:
'%field%',
'%error%',
'%title%',
'%seperator%',
'%name%',
'%error_id%',
'%value%',
'%help%'


Dat zou 't volgens mij al moeten zijn.

  Johan Wiegel (Admin) 13 February 10 / 18:38  
ziet er goed uit en lijkt ook inderdaad goed te werken, dus een nieuwe download beschikbaar. Ik maak er verder geen melding van dan allen in de change log

  John Doe 13 February 10 / 21:50  
Wederom dank!

  Top


powered by PHP-GLOBE   © 2004 - 2010 FormHandler. All rights reserved.   -   Open source license