Ik ben bezig met een klasse die aan de hand van een aantal variabelen automatisch een sorteerbare en gepagineerde html tabel weergeeft.
De basics zijn me al gelukt, er wordt een tabel weergegeven en bij het klikken op de headers sorteert ie in de goede volgorde. Ik kan in de array die een veld definieert een prefix en suffix opgeven zodat ik informatie toe kan voegen aan de tabel. Zo zorgt de prefix in de configuratie hieronder ervoor, dat er voor elk bedrag een euro teken komt:
Nu is het vaak het geval dat je bij het klikken op een bepaald veld, de details wilt kunnen zien. Hiervoor moet ik in de link een variabele uit de array (meestal de ID) kunnen opnemen.
Ik dacht dat het handig zou zijn om de variabele naam tussen % tekens in de zetten zoals ik in de configuratie hieronder heb gedaan:
Nu voelen jullie de bui misschien al hangen, %KlantID% moet vervangen worden door de waarde van die bepaalde row en dan het klantID veld.
Met onderstaande code wordt gekeken of de prefix en suffix geset zijn, als dit het geval is wordt de functie "prepare($string)" aangeroepen die met een regex de string evalueert en %WAARDE% vervangt door $row[$field['WAARDE']]
en in de prepare functie:
Dit returnt heel mooi:
<a href="klantenadministratie/$row[Field['KlantID']]" />
Maar php moet het stukje $row[Field['KlantID']] nog vervangen door de daadwerkelijke KlantID.
Ik heb wat geprobeerd met de functie eval(), maar vind dit nooit echt een mooie oplossing en ik krijg daar ook foutmeldingen bij... Verder heb ik geprobeerd de variabelen met extract() om te zetten naar simpelere variabelen, maar dat gaf ook niet het gewenste resultaat... Nou kan het dat een combinatie van het bovenstaande wel werkt, maar ik heb het gevoel dat ik in een loop aan het testen ben en kom er even niet meer uit...
De basics zijn me al gelukt, er wordt een tabel weergegeven en bij het klikken op de headers sorteert ie in de goede volgorde. Ik kan in de array die een veld definieert een prefix en suffix opgeven zodat ik informatie toe kan voegen aan de tabel. Zo zorgt de prefix in de configuratie hieronder ervoor, dat er voor elk bedrag een euro teken komt:
PHP:
1
2
3
4
5
| $velden[] = array('Fieldname' => 'Bedrag', 'Tablename' => 'transacties', 'THName' => 'Bedrag', 'Prefix' => '€ ', 'Datatype' => 'double'); |
Nu is het vaak het geval dat je bij het klikken op een bepaald veld, de details wilt kunnen zien. Hiervoor moet ik in de link een variabele uit de array (meestal de ID) kunnen opnemen.
Ik dacht dat het handig zou zijn om de variabele naam tussen % tekens in de zetten zoals ik in de configuratie hieronder heb gedaan:
PHP:
1
2
3
4
5
6
| $velden[] = array('Fieldname' => 'Naam', 'FieldDbName' => 'CONCAT(Achternaam, \', \', Voornaam, \' \', Tussenvoegsel)', 'THName' => 'Naam', 'Datatype' => 'string', 'Prefix' => '<a href="klantenadministratie/%KlantID%" />', 'Suffix' => '</a>'); |
Nu voelen jullie de bui misschien al hangen, %KlantID% moet vervangen worden door de waarde van die bepaalde row en dan het klantID veld.
Met onderstaande code wordt gekeken of de prefix en suffix geset zijn, als dit het geval is wordt de functie "prepare($string)" aangeroepen die met een regex de string evalueert en %WAARDE% vervangt door $row[$field['WAARDE']]
PHP:
1
2
3
| $prefix = array_key_exists('Prefix', $field) ? $this->prepare($field['Prefix']) : ''; $suffix = array_key_exists('Suffix', $field) ? $this->prepare($field['Suffix']) : ''; $table .= " <td>" . $prefix . $row[$field['Fieldname']] . $suffix . "</td> \n"; |
en in de prepare functie:
PHP:
1
| $string = preg_replace('/([^%])%([A-Za-z0-9]*)%([^%])/', '$1$row[Field[\'$2\']]$3', $string); |
Dit returnt heel mooi:
<a href="klantenadministratie/$row[Field['KlantID']]" />
Maar php moet het stukje $row[Field['KlantID']] nog vervangen door de daadwerkelijke KlantID.
Ik heb wat geprobeerd met de functie eval(), maar vind dit nooit echt een mooie oplossing en ik krijg daar ook foutmeldingen bij... Verder heb ik geprobeerd de variabelen met extract() om te zetten naar simpelere variabelen, maar dat gaf ook niet het gewenste resultaat... Nou kan het dat een combinatie van het bovenstaande wel werkt, maar ik heb het gevoel dat ik in een loop aan het testen ben en kom er even niet meer uit...