view in class
Een vraagje. Zoals we allemaal wel weten is het niet netjes om html op te nemen in een class. Dat doen we liever in een view. Echter, stel ik heb een class van waaruit ik een html mail wil versturen, hoe moet ik dit dan aanpakken?
Ik kan natuurlijk in mijn class zoiets doen (simpel voorbeeldje voor het idee):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$html = '<html>';
$html .= '<head>';
$html .= // hier komt de css
$html .= '</head>';
$html .= '<body>';
$html .= '<p>Hier een leuk tekstje.</p>';
$html .= '</body>';
$html = '</html>';
$mail('[email protected]', 'foo foo!', $html, $headers);
?>
$html = '<html>';
$html .= '<head>';
$html .= // hier komt de css
$html .= '</head>';
$html .= '<body>';
$html .= '<p>Hier een leuk tekstje.</p>';
$html .= '</body>';
$html = '</html>';
$mail('[email protected]', 'foo foo!', $html, $headers);
?>
Niet echt heel charmant vind ik dit. Maar hoe moet ik het dan aanpakken? Een apart view bestand maken met daarin de html lay-out, en dan inlezen met file_get_contents()? Zo ja, hoe verwerk ik daar dan weer een variabele (tekst) in? Moet ik dan placeholders gebruiken, bijv. *tekst* en die vervangen met str_replace()? Graag wat advies.
Gewijzigd op 02/07/2013 01:15:57 door Ozzie PHP
Ik gebruik een template waarin de HTML staat. Die haal ik op en vervang een aantal {EIGEN_TAGS} met waardes die ik bij het verwerken bepaal. Zoals aanhef, onderwerp, het leuke tekstje, ...
Hoe je het met variabelen doet? Gewoon zoiets:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Ik neem aan dat het voorbeeld van Bas werkt met file_get_contents?
Is het één beter of handiger dan het ander? Vaak wordt ob_start() afgeraden, of kan dat in deze situatie gewoon prima?
Toevoeging op 02/07/2013 09:08:12:
P.S. Wouter, doe jij dit altijd op deze manier voor al jouw templates... het ophalen als een string? (in plaats van gelijk weergeven dmv include?)
Ik gebruik file_get_contents() idd.
Ah oké thanks. Is dat beter dan de ob_start manier van Wouter, of maakt het geen verschil?
ob_start en ob_flush worden hier afgeraden in speciale gevallen, namelijk bij headers.
Omdat ob_flush op dat moment gewoon slechte code wegmoffelt. Het blijft slechte code, maar je ziet geen warning.
Als er wel goede redenen zijn om ob_start en ob_flush te gebruiken ... waarom niet?
Okeej, dankjewel Kris!
Ozzie, ik gebruik altijd de templating engine Twig. Die doet het iets moeilijker, maar wel sneller en efficiënter dan de code van bas en mij.
Okeej, bedankt voor de tips!
In het voorbeeld hierboven van Wouter heet deze method "render". Als ik dat vertaal dan betekent het "weergeven". Maar er wordt helemaal niks weergegeven. Wat zou een betere method naam zijn? Ik dacht zelf aan "parse". Wat vinden jullie daarvan?