Zend_Form als table row

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • GWTommy
  • Registratie: Mei 2008
  • Laatst online: 05-08-2023
Ik heb een tabel met drie kolommen en een Zend_Form met drie velden (laatste is een submit). Dit form moet als een rij in de tabel worden opgenomen. Ik dacht dit te doen door eens met de decorators te gaan spelen, maar nee, dit blijkt nog al lastig. Er zijn enkele tutorials over hoe je een Zend_Form in tabelvorm weer kunt geven (http://blog.kosev.net/201...-zend-framework-form.html), echter is dat niet wat ik zoek.

Ik wil het eindresultaat er zo uit laten zien:
[table]
[Th]				[Th]				[Th]
[Td]				[Td]				[Td]
[Td]				[Td]				[Td]
[Td]				[Td]				[Td]
[Td]				[Td]				[Td]
[Td]				[Td]				[Td]
[Td]				[Td]				[Td]
[Eerste veld]			[Tweede veld]			[Derde veld]
[/table]


Hierbij hoeven dus geen labels weergeven te worden (de TH tags zeggen genoeg). De Zend_Form_Decorator mogelijkheden zijn vrijwel eindeloos, maar voor mij nog iets te complex. Hoe kan ik dit het beste aanpakken? De tutorial die ik gaf aanpassen en alles één tag opschuiven (dus ipv table, tr, td > tr, td, span/whatever) doet bij mij niets anders dan het formulier buiten de tabel plaatsen (de tr wordt in de tabel gezet, maar vervolgens wordt de td niet gepakt en gewoon dd gebruikt waardoor het formulier buiten de tabel komt).

Acties:
  • 0 Henk 'm!

  • Bee.nl
  • Registratie: November 2002
  • Niet online

Bee.nl

zoemt

Dus als ik het goed begrijp wil je 3 kolommen met daarboven de kolomnaam en daaronder de invoervelden zónder label? Dat is inderdaad vrij lastig te doen met de decorators van Zend_Form. Een makkelijkere oplossing is om een partial view aan te maken waarin je zelf de presentatie van de form doet. Door in je form-class de elementen handig te groeperen in arrays kun je daar mooi doorheen loopen in je view.
 
PHP:
1
2
3
4
// view waarin je de form wilt plaatsen

// in de controller heb je $view->form = $form
echo $this->partial('form/custom.phtml', array('form' => $this->form));

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// partial view: form/custom.phtml

// de headers
foreach ($this->form->getHeaders() as $header) {
   echo "<th>{$header}</th>";
}

// de elementen
foreach ($this->form->getRowElements() as $rowElements) {

   echo '<tr>';

   foreach ($rowElements as $element) {
      echo "<td>{$element}</td>";
   }

   echo '</tr>';
}

Het is meer een presentatieprobleem, dus ik zou de oplossing ook daar zoeken.

Acties:
  • 0 Henk 'm!

  • GWTommy
  • Registratie: Mei 2008
  • Laatst online: 05-08-2023
Dat is inderdaad een goed idee. Jammer dat ik nog steeds niet echt in aanraking kom met Zend_Form_Decorators, maar het zij zo.

Waar haal jij Zend_Form::getRowElements() vandaan? Die is niet terug te vinden in de API.

Het gaat overigens maar om één rij die weergeven moet worden, dus in totaal 3 velden (waar het hele formulier uit bestaat).

Acties:
  • 0 Henk 'm!

  • Bee.nl
  • Registratie: November 2002
  • Niet online

Bee.nl

zoemt

GWTommy schreef op maandag 16 april 2012 @ 15:59:
Dat is inderdaad een goed idee. Jammer dat ik nog steeds niet echt in aanraking kom met Zend_Form_Decorators, maar het zij zo.
De decorators hebben een vrij steile leercurve en zijn -zoals je merkt- niet altijd geschikt voor custom formopmaak. Zend_Form is vooral handig vanwege de ingebouwde validatie, maar zodra het op afwijkende presentatie aankomt zijn de decorators veel te omslachtig. Daarom maak ik zelf vaak een setje form viewscripts (partial views) die ik makkelijk aan kan roepen vanuit de view. Kost mij ook nog eens minder tijd.

Zend heeft semantisch gezien wellicht gelijk met de dt/dl/dd, maar ik denk dat de meeste developers het liever omzetten naar een table of unordered list.
Waar haal jij Zend_Form::getRowElements() vandaan? Die is niet terug te vinden in de API.

Het gaat overigens maar om één rij die weergeven moet worden, dus in totaal 3 velden (waar het hele formulier uit bestaat).
Dat is een methode die je zelf aan kunt maken als je overerft van Zend_Form :P Zend_Form::addElement() gooit alle elementen achter elkaar, dus je zal op een andere plek bij moeten houden wat de rij/kolom-positie is.

Acties:
  • 0 Henk 'm!

  • curvemod
  • Registratie: Maart 2009
  • Laatst online: 06-09 20:43
GWTommy schreef op maandag 16 april 2012 @ 15:59:
Dat is inderdaad een goed idee. Jammer dat ik nog steeds niet echt in aanraking kom met Zend_Form_Decorators, maar het zij zo.
Mwa, ik vind die form decorators eigenlijk maar ondingen, het heeft inderdaad een steile leercurve en vaak kan je er toch net niet mee doen wat je wilt. Dus ik zou er niet zo'n probleem van maken dat je dat nooit gebruikt hebt ;-)