view in class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

02/07/2013 01:15:13
Quote Anchor link
Ola,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>

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
 
PHP hulp

PHP hulp

30/11/2024 20:16:36
 
B a s
Beheerder

B a s

02/07/2013 08:41:44
Quote Anchor link
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, ...
 
Wouter J

Wouter J

02/07/2013 08:42:07
Quote Anchor link
Ja, een apart view bestandje. En dan je templating engine het zo laten aanpassen dat hij een string terug kan geven (eigenlijk moet een templating parser altijd een string terug geven).

Hoe je het met variabelen doet? Gewoon zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
class Engine implements EngineInterface
{
    public function render($filename, array $parameters)
    {

        if (!file_exists($filename)) {
            throw new ResourceNotFoundException($filename);
        }


        extract($parameters);

        ob_start();
        require $filename;
        ob_flush();

        return ob_get_contents();
    }
}

?>
 
Ozzie PHP

Ozzie PHP

02/07/2013 09:06:35
Quote Anchor link
Thanks mannen!

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?)
 
B a s
Beheerder

B a s

02/07/2013 09:39:23
Quote Anchor link
Ik gebruik file_get_contents() idd.
 
Ozzie PHP

Ozzie PHP

02/07/2013 09:42:53
Quote Anchor link
Ah oké thanks. Is dat beter dan de ob_start manier van Wouter, of maakt het geen verschil?
 
Kris Peeters

Kris Peeters

02/07/2013 13:20:04
Quote Anchor link
Zonder op die vraag een antwoord te geven ...

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?
 
Ozzie PHP

Ozzie PHP

02/07/2013 13:21:32
Quote Anchor link
Okeej, dankjewel Kris!
 
Wouter J

Wouter J

02/07/2013 15:50:39
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

02/07/2013 20:58:20
Quote Anchor link
Okeej, bedankt voor de tips!
 
Ozzie PHP

Ozzie PHP

12/07/2013 01:47:36
Quote Anchor link
Nog een vraagje... hoe noem je zo'n functie/method die een view inleest en een string teruggeeft?

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?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.