new file mode 100644
--- /dev/null
+++ b/classes/bfw/mvc/view/View.php
@@ -0,0 +1,115 @@
+<?php
+
+namespace bfw\mvc\view {
+
+ use bfw\mvc\controller\Controller;
+ use bfw\mvc\model\Model;
+ use bfw\mvc\model\TGroup;
+ use bfw\mvc\model\TStatus;
+ use bfw\mvc\model\TUser;
+
+ require_once 'library/smarty/libs/Smarty.class.php';
+
+ class View extends \Smarty {
+ /**
+ * @var Model
+ */
+ private $model;
+
+ /**
+ * @var Controller
+ */
+ private $controller;
+
+ /**
+ * Statische Referenz auf die reale Template Engine, hier Smarty
+ *
+ * @var Smarty
+ */
+ private static $tpl = null;
+
+ /**
+ * View constructor.
+ *
+ * @param Controller $controller
+ * @param Model $model
+ */
+ public function __construct(Controller $controller, Model $model) {
+ $this->controller = $controller;
+ $this->model = $model;
+
+ self::$tpl = self::getTemplateEngine();
+ }
+
+ /**
+ * <b>Liefert ein statisches Handle auf die aktuelle Template Engine zurück</b>
+ *
+ * Das Singleton Pattern garantiert genau eine Instanz der Template Engine im Speicher.
+ *
+ * <b>Verschiedene Skripte können so nacheinander Variablen zuweisen und diese bei Bedarf auslesen</b>
+ *
+ * @return Smarty
+ */
+ private static function getTemplateEngine() {
+ if (self::$tpl == null) {
+ self::$tpl = new \Smarty();
+
+ $tpl = self::$tpl;
+
+ $tpl->setCompileDir('./data/templates_c/');
+ $tpl->setTemplateDir('./templates/');
+ }
+
+ return self::$tpl;
+ }
+
+ public function assign($key, $value) {
+ self::$tpl->assign($key, $value);
+ }
+
+ /**
+ * weisst automatisch eine user-instanz zu: Seiten-Effekte beachten
+ *
+ * TODO: Namensschema festlegen, damit dieser Effekt nicht auftritt
+ */
+ public function display() {
+ $tUser = new TUser();
+ $tGroup = new TGroup();
+ $tStatus = new TStatus();
+
+ $request = $this->controller->getRequest();
+
+ if ($request->getKey('isLoggedIn')) {
+ $tUser->find($request->getKey('user_id'));
+ }
+
+ $controller = $this->controller;
+
+ $response = $controller->getResponse();
+ $this->assign('response', $response);
+
+ $this->assign('tUser', $tUser);
+ $this->assign('tGroup', $tGroup);
+ $this->assign('tStatus', $tStatus);
+ $this->assign('request', $request);
+
+ try {
+ self::$tpl->display('layout.tpl');
+ } catch (SmartyException $se) {
+ $response->setStatusCode(404);
+
+ $page = 'error/error';
+ self::$tpl->assign('page', $page);
+
+ self::$tpl->display('layout.tpl');
+ }
+
+ // Msg wieder auf Null setzen...
+ $request->setKey('msg', '');
+
+ // Fehler wieder auf Null setzen...
+ $request->setKey('fehler', '');
+ }
+
+ }
+}