View en template

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mark Hogeveen

Mark Hogeveen

16/06/2014 22:59:47
Quote Anchor link
Bij een MVC indeling maakt een controller een model, en een model maakt een view.
Het verschil tussen views en templates is dat een template het soort output bepaalt, dus html, json, xml en een view doet niets meer dan de data bij bewaren om dit als een soort pakketje in een template te gebruiken.
Bijvoorbeeld een html template:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<h1>Titel: <?php echo $view["title"]; ?></h1>

En de view is dan een object met de data.
Is er ook voor elk soort output een aparte view klasse nodig?
Gewijzigd op 17/06/2014 15:28:24 door Mark Hogeveen
 
PHP hulp

PHP hulp

29/03/2024 09:07:31
 
Ozzie PHP

Ozzie PHP

16/06/2014 23:21:34
Quote Anchor link
Bij een MVC indeling maakt een controller een model, en een model maakt een view.

Hoe ik MVC ken, is dat er een request binnen komt. Aan de hand van de route van dit request wordt een controller met een bepaalde action aangeroepen. Deze action (in de controller dus) maakt niet een model, maar gebruikt een model. Uit het model wordt data opgehaald. Die data wordt teruggegeven aan de controller. De controller stuurt de data vervolgens naar de view. De view is een bestand met een stukje html. De variabelen worden in deze view verwerkt.
 
Mark Hogeveen

Mark Hogeveen

17/06/2014 15:21:44
Quote Anchor link
Waar wordt een model dan gemaakt om het te gebruiken? En wanneer spreek je van een template?
Ik dacht dat alleen templates html bevatten.
 
Ozzie PHP

Ozzie PHP

17/06/2014 15:49:58
Quote Anchor link
Allereerst: wil je aub niet ineens de titel van je bericht wijzigen, want dan is het lastig om te zien dat het hetzelfde topic betreft.

Wat betreft je vraag. Jij maakt zelf een model. Jij bent immers de programmeur. Dat model wordt vervolgens door de controller aangeroepen. Voorbeeld: er komt een verzoek binnen om product 123 te tonen. De controller vraagt dan aan het model de gegevens van product 123 op. Het model stuurt deze gegevens naar de controller en de controller geeft de gegevens door aan de view/template (dit kun je als hetzelfde beschouwen).
 
Mark Hogeveen

Mark Hogeveen

17/06/2014 16:42:32
Quote Anchor link
Ik heb de titel van mijn bericht niet aangepast. Dat heeft dan waarschijnlijk een moderator gedaan. Echt waar.
 
Erwin H

Erwin H

17/06/2014 16:51:00
Quote Anchor link
Harry hogeveen op 16/06/2014 22:59:47:
Het verschil tussen views en templates

Je kan niet spreken over een verschil tussen views en templates. Als we het hebben over het MVC dan is de view het gedeelte van je applicatie die zorg draagt voor het juist tonen van de gegevens. Daarvoor kan de view een template gebruiken, maar dat hoeft niet. De view kan de html ook volledig vanaf scratch opbouwen. Of, in geval van een ajax request, kan het ook zijn dat de view serverside alleen maar een rauwe json string doorstuurt en dat javascript clientside de rest doet.
Dat javascript deel zou je dan nog tot de view kunnen rekenen overigens, maar dat is een ander verhaal.
 
Ward van der Put
Moderator

Ward van der Put

17/06/2014 18:00:06
Quote Anchor link
MVC: Maybe Viewable Content.
 
Mark Hogeveen

Mark Hogeveen

19/06/2014 18:38:34
Quote Anchor link
Nog een vraag.
Ik neem als voorbeeld een administratie systeem dat ik ben aan het maken. De routes ernaartoe beginnen allemaal met /admin/
Als ik bijvoorbeeld /admin/user heb, dan kom je op de pagina van de user om instellingen te veranderen. Op die pagina staat aan de zijkant een menu, met daarin links als: wachtwoord, email, adres etc.
Als ik daarop klik (bv. op "wachtwoord") wordt de route: /admin/user/password
Dan krijg je een soort frame effect, de hele pagina blijft hetzelfde behalve dat ik er een nieuwe view in wil laten zien, het formulier om het wachtwoord te veranderen.
Ik wil dus niet voor elke view de header, footer en andere standaard dingen kopieren en in het view bestand zetten. Ik zou het liefst alleen de html van het wachtwoord formulier als een bestand willen opslaan en dat dan includen in de totale admin view. Begrijpen jullie?
Hoe doe je dit op een niet al te rommelige manier?
Gewijzigd op 19/06/2014 18:39:16 door Mark Hogeveen
 
Erwin H

Erwin H

19/06/2014 18:49:47
Quote Anchor link
Je hebt meerder opties daarvoor. Je kan bijvoorbeeld standaard html template voor de header en voor de footer hebben, die je dan voor elke pagina invoegt.
Of je bouwt een standaard class voor de header en een standaard voor de footer die je voor elke pagina gebruikt. Die classes bouwen dan de html op (en dat kan weer vanaf scratch, of via een template).
 
Mark Hogeveen

Mark Hogeveen

19/06/2014 19:22:12
Quote Anchor link
Ik vind het juist moeilijk om alles aan elkaar te koppelen.
De AdminUserController wordt gemaakt en de action page wordt aangeroepen. In die action methode heb ik nu iets als:
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
20
21
<?php
public function page($page) {
    $username = "Harry"; // van database
    //...


    $view = new View();
    $view->set("username", $username);

    // $page is in dit geval "password"
    if($page == "password") {
        $f = "views/password-form.php";
    }
else if($page == "email") {
        $f = "views/email-form.php";
    }
else {
        $f = "views/user-general.php";
    }

    $view->set("page", $f);

    include "views/admin.php"; // De algemene totale pagina
}
?>



De standaard view (met headers, footers, css, js, etc.) is bij mij nu:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<!-- html code -->

<!-- Hier wil ik het stuk met het wachtwoord formulier in hebben -->
<?php
include $view->get("page");
?>


<!-- html code -->
Gewijzigd op 19/06/2014 19:23:23 door Mark Hogeveen
 
Mark Hogeveen

Mark Hogeveen

20/06/2014 21:31:21
Quote Anchor link
Niemand?
Gewijzigd op 20/06/2014 21:31:43 door Mark Hogeveen
 
Frank Nietbelangrijk

Frank Nietbelangrijk

21/06/2014 01:44:09
Quote Anchor link
ik denk dat je beter in deze richting kunt denken:

// in de controller
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
20
21
<?php
public function passwordAction() {
    $username = "Harry"; // van database

    $data = array(
    'username' => $username,
    );


    $this->loadView('views/admin/password.php', $data)
 }


public function emailAction() {
    $username = "Harry"; // van database

    $data = array(
    'username' => $username,
    );


    $this->loadView('views/admin/email.php', $data)
 }

?>


views/admin/password.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
include 'views/admin/header.php';

// specifieke inhoud voor password instellingen

include 'views/admin/footer.php';
?>


views/admin/email.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
include 'views/admin/header.php';

// specifieke inhoud voor email instellingen

include 'views/admin/footer.php';
?>


Toevoeging op 21/06/2014 10:40:21:

Bij template engines als Twig kun je delen van views overschrijven:

layout.html.twig
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
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
{% block stylesheets %}
    <
link href='http://fonts.googleapis.com/css?family=Open+Sans+Condensed:700' rel='stylesheet' type='text/css'>
{%
endblock %}

{%
block title 'Admin' %}

{%
block body %}
    
    <
div class="page">
        
        <
nav>
            <
ul>
                <
li>
                    Home
                </li>
                <
li>
                    About
                </li>
            <
/ul>
        <
/nav>
        
        <
div class="content">
            {%
block content %} // <---------- Hier begint het blok 'content'
                <p>Deze inhoud moet nog overschreven worden</p>
            {%
endblock %}
        <
/div>
    <
/div>
    
{%
endblock %}

?>


index.html.twig
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
{% extends 'layout.html.twig' %}

{%
block content %} // <----------- Hier overschrijven we de 'content blok' van layout.html.twig !!!
<h3>Welkom {{ username }}</h3>
{%
endblock %}
?>
Gewijzigd op 21/06/2014 10:51:56 door Frank Nietbelangrijk
 



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.