classes/bfw/core/View.php
author Markus Bröker <broeker.markus@googlemail.com>
Sat, 14 Nov 2015 02:42:53 +0100
changeset 25 7fddaf017915
parent 18 95e61b581061
child 28 29a3e34acf64
permissions -rw-r--r--
Die View erzeugt das UI und nicht mehr der Dispatcher
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
     1
<?php
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
     2
7
3ed6f90e97d9 Überarbeitete MVC-Struktur, die ich jetzt auch nachvollziehen kann.
Markus Bröker <broeker.markus@googlemail.com>
parents: 1
diff changeset
     3
/**
3ed6f90e97d9 Überarbeitete MVC-Struktur, die ich jetzt auch nachvollziehen kann.
Markus Bröker <broeker.markus@googlemail.com>
parents: 1
diff changeset
     4
 * Copyright(C) 2015 Markus Bröker<broeker.markus@googlemail.com>
3ed6f90e97d9 Überarbeitete MVC-Struktur, die ich jetzt auch nachvollziehen kann.
Markus Bröker <broeker.markus@googlemail.com>
parents: 1
diff changeset
     5
 *
3ed6f90e97d9 Überarbeitete MVC-Struktur, die ich jetzt auch nachvollziehen kann.
Markus Bröker <broeker.markus@googlemail.com>
parents: 1
diff changeset
     6
 */
0
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
     7
7
3ed6f90e97d9 Überarbeitete MVC-Struktur, die ich jetzt auch nachvollziehen kann.
Markus Bröker <broeker.markus@googlemail.com>
parents: 1
diff changeset
     8
namespace bfw\core;
3ed6f90e97d9 Überarbeitete MVC-Struktur, die ich jetzt auch nachvollziehen kann.
Markus Bröker <broeker.markus@googlemail.com>
parents: 1
diff changeset
     9
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    10
use Smarty;
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    11
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    12
require_once 'library/smarty/libs/Smarty.class.php';
0
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
    13
9
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
    14
class View {
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    15
    /**
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    16
     * Statische Referenz auf die reale Template Engine, hier Smarty
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    17
     *
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    18
     * @var Smarty
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    19
     */
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    20
    private static $tpl = null;
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    21
    /**
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    22
     * @var Model
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    23
     */
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    24
    private $model;
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    25
    /**
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    26
     * @var Controller
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    27
     */
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    28
    private $controller;
0
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
    29
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    30
    /**
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    31
     * View constructor.
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    32
     *
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    33
     * @param Controller $controller
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    34
     * @param Model $model
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    35
     */
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    36
    public function __construct(Controller $controller, Model $model) {
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    37
        $this->controller = $controller;
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    38
        $this->model = $model;
0
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
    39
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    40
        self::$tpl = self::getTemplateEngine();
25
7fddaf017915 Die View erzeugt das UI und nicht mehr der Dispatcher
Markus Bröker <broeker.markus@googlemail.com>
parents: 18
diff changeset
    41
7fddaf017915 Die View erzeugt das UI und nicht mehr der Dispatcher
Markus Bröker <broeker.markus@googlemail.com>
parents: 18
diff changeset
    42
        $request = $controller->getRequest();
7fddaf017915 Die View erzeugt das UI und nicht mehr der Dispatcher
Markus Bröker <broeker.markus@googlemail.com>
parents: 18
diff changeset
    43
        $this->assign('controller', $request->get('controller', 'home'));
7fddaf017915 Die View erzeugt das UI und nicht mehr der Dispatcher
Markus Bröker <broeker.markus@googlemail.com>
parents: 18
diff changeset
    44
        $this->assign('action', $request->get('action', 'index'));
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    45
    }
0
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
    46
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    47
    /**
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    48
     * <b>Liefert ein statisches Handle auf die aktuelle Template Engine zurück</b>
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    49
     *
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    50
     * Das Singleton Pattern garantiert genau eine Instanz der Template Engine im Speicher.
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    51
     *
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    52
     *  <b>Verschiedene Skripte können so nacheinander Variablen zuweisen und diese bei Bedarf auslesen</b>
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    53
     *
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    54
     * @return Smarty
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    55
     */
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    56
    private static function getTemplateEngine() {
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    57
        if (self::$tpl == null) {
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    58
            self::$tpl = new Smarty();
0
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
    59
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    60
            $tpl = self::$tpl;
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    61
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    62
            $tpl->setCompileDir('./data/templates_c/');
7
3ed6f90e97d9 Überarbeitete MVC-Struktur, die ich jetzt auch nachvollziehen kann.
Markus Bröker <broeker.markus@googlemail.com>
parents: 1
diff changeset
    63
            $tpl->setTemplateDir('./classes/bfw/mvc/view/');
0
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
    64
        }
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
    65
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    66
        return self::$tpl;
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    67
    }
0
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
    68
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    69
    /**
9
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
    70
     * @param $template
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
    71
     * @return string
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
    72
     */
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
    73
    public function fetch($template) {
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
    74
        return self::$tpl->fetch($template);
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
    75
    }
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
    76
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
    77
    /**
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
    78
     * <b>Anzeige der komplett gerenderten Seite mit dem Layout $layout</b>
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    79
     *
9
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
    80
     * @param string $layout
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    81
     */
9
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
    82
    public function display($layout = 'layout.tpl') {
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    83
        $request = $this->controller->getRequest();
0
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
    84
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    85
        $controller = $this->controller;
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    86
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    87
        $response = $controller->getResponse();
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
    88
        $this->assign('response', $response);
0
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
    89
18
95e61b581061 Vereinfachte Model
Markus Bröker <broeker.markus@googlemail.com>
parents: 9
diff changeset
    90
        $this->assign('request', $request);
95e61b581061 Vereinfachte Model
Markus Bröker <broeker.markus@googlemail.com>
parents: 9
diff changeset
    91
95e61b581061 Vereinfachte Model
Markus Bröker <broeker.markus@googlemail.com>
parents: 9
diff changeset
    92
        $model = $controller->getModel();
95e61b581061 Vereinfachte Model
Markus Bröker <broeker.markus@googlemail.com>
parents: 9
diff changeset
    93
        $user = $model->getUser();
95e61b581061 Vereinfachte Model
Markus Bröker <broeker.markus@googlemail.com>
parents: 9
diff changeset
    94
        $group = $model->getGroup();
95e61b581061 Vereinfachte Model
Markus Bröker <broeker.markus@googlemail.com>
parents: 9
diff changeset
    95
95e61b581061 Vereinfachte Model
Markus Bröker <broeker.markus@googlemail.com>
parents: 9
diff changeset
    96
        if ($request->getKey('isLoggedIn')) {
95e61b581061 Vereinfachte Model
Markus Bröker <broeker.markus@googlemail.com>
parents: 9
diff changeset
    97
            $user->find($request->getKey('user_id'));
95e61b581061 Vereinfachte Model
Markus Bröker <broeker.markus@googlemail.com>
parents: 9
diff changeset
    98
        }
95e61b581061 Vereinfachte Model
Markus Bröker <broeker.markus@googlemail.com>
parents: 9
diff changeset
    99
7
3ed6f90e97d9 Überarbeitete MVC-Struktur, die ich jetzt auch nachvollziehen kann.
Markus Bröker <broeker.markus@googlemail.com>
parents: 1
diff changeset
   100
        $this->assign('user', $user);
3ed6f90e97d9 Überarbeitete MVC-Struktur, die ich jetzt auch nachvollziehen kann.
Markus Bröker <broeker.markus@googlemail.com>
parents: 1
diff changeset
   101
        $this->assign('group', $group);
3ed6f90e97d9 Überarbeitete MVC-Struktur, die ich jetzt auch nachvollziehen kann.
Markus Bröker <broeker.markus@googlemail.com>
parents: 1
diff changeset
   102
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
   103
        try {
9
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
   104
            self::$tpl->display($layout);
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
   105
        } catch (SmartyException $se) {
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
   106
            $response->setStatusCode(404);
0
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
   107
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
   108
            self::$tpl->display('layout.tpl');
0
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
   109
        }
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
   110
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
   111
        // Msg wieder auf Null setzen...
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
   112
        $request->setKey('msg', '');
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
   113
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
   114
        // Fehler wieder auf Null setzen...
25
7fddaf017915 Die View erzeugt das UI und nicht mehr der Dispatcher
Markus Bröker <broeker.markus@googlemail.com>
parents: 18
diff changeset
   115
        $request->setKey('error', '');
7fddaf017915 Die View erzeugt das UI und nicht mehr der Dispatcher
Markus Bröker <broeker.markus@googlemail.com>
parents: 18
diff changeset
   116
7fddaf017915 Die View erzeugt das UI und nicht mehr der Dispatcher
Markus Bröker <broeker.markus@googlemail.com>
parents: 18
diff changeset
   117
        return http_response_code();
0
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
   118
    }
1
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
   119
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
   120
    public function assign($key, $value) {
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
   121
        self::$tpl->assign($key, $value);
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
   122
    }
56e0dbd5c243 Aktualisierung des Frameworks
Markus Bröker <broeker.markus@googlemail.com>
parents: 0
diff changeset
   123
9
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
   124
    /**
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
   125
     * @param string $key
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
   126
     * @return string
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
   127
     */
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
   128
    public function get($key) {
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
   129
        return self::$tpl->getTemplateVars($key);
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
   130
    }
8c2f3735a9bd Weitere Korrekturen nach dem Aufwachen
Markus Bröker <broeker.markus@googlemail.com>
parents: 7
diff changeset
   131
0
4869aea77e21 Bröker-Framework BFW-1
Markus Bröker <broeker.markus@googlemail.com>
parents:
diff changeset
   132
}