1: <?php
2:
3: 4: 5: 6:
7:
8: namespace Nette\Bridges\ApplicationLatte;
9:
10: use Nette;
11: use Latte;
12:
13:
14: 15: 16: 17: 18:
19: class Template extends Nette\Object implements Nette\Application\UI\ITemplate
20: {
21:
22: private $latte;
23:
24:
25: private $file;
26:
27:
28: private $params = array();
29:
30:
31: public function __construct(Latte\Engine $latte)
32: {
33: $this->latte = $latte;
34: }
35:
36:
37: 38: 39:
40: public function getLatte()
41: {
42: return $this->latte;
43: }
44:
45:
46: 47: 48: 49:
50: public function render($file = NULL, array $params = array())
51: {
52: $this->latte->render($file ?: $this->file, $params + $this->params);
53: }
54:
55:
56: 57: 58: 59: 60:
61: public function __toString()
62: {
63: try {
64: return $this->latte->renderToString($this->file, $this->params);
65: } catch (\Throwable $e) {
66: } catch (\Exception $e) {
67: }
68: if (isset($e)) {
69: if (func_num_args()) {
70: throw $e;
71: }
72: trigger_error("Exception in " . __METHOD__ . "(): {$e->getMessage()} in {$e->getFile()}:{$e->getLine()}", E_USER_ERROR);
73: }
74: }
75:
76:
77:
78:
79:
80: 81: 82: 83: 84: 85:
86: public function addFilter($name, $callback)
87: {
88: return $this->latte->addFilter($name, $callback);
89: }
90:
91:
92: 93: 94: 95:
96: public function registerHelper($name, $callback)
97: {
98:
99: return $this->latte->addFilter($name, $callback);
100: }
101:
102:
103: 104: 105: 106:
107: public function registerHelperLoader($loader)
108: {
109:
110: $latte = $this->latte;
111: $this->latte->addFilter(NULL, function ($name) use ($loader, $latte) {
112: if ($callback = call_user_func($loader, $name)) {
113: $latte->addFilter($name, $callback);
114: }
115: });
116: return $this;
117: }
118:
119:
120: 121: 122: 123:
124: public function setTranslator(Nette\Localization\ITranslator $translator = NULL)
125: {
126: $this->latte->addFilter('translate', $translator === NULL ? NULL : array($translator, 'translate'));
127: return $this;
128: }
129:
130:
131: 132: 133:
134: public function registerFilter($callback)
135: {
136: throw new Nette\DeprecatedException(__METHOD__ . '() is deprecated.');
137: }
138:
139:
140:
141:
142:
143: 144: 145: 146: 147:
148: public function setFile($file)
149: {
150: $this->file = $file;
151: return $this;
152: }
153:
154:
155: 156: 157:
158: public function getFile()
159: {
160: return $this->file;
161: }
162:
163:
164: 165: 166: 167:
168: public function add($name, $value)
169: {
170: if (array_key_exists($name, $this->params)) {
171: throw new Nette\InvalidStateException("The variable '$name' already exists.");
172: }
173: $this->params[$name] = $value;
174: return $this;
175: }
176:
177:
178: 179: 180: 181: 182:
183: public function setParameters(array $params)
184: {
185: $this->params = $params + $this->params;
186: return $this;
187: }
188:
189:
190: 191: 192: 193:
194: public function getParameters()
195: {
196: return $this->params;
197: }
198:
199:
200: 201: 202:
203: public function __call($name, $args)
204: {
205: return $this->latte->invokeFilter($name, $args);
206: }
207:
208:
209: 210: 211: 212:
213: public function __set($name, $value)
214: {
215: $this->params[$name] = $value;
216: }
217:
218:
219: 220: 221: 222:
223: public function &__get($name)
224: {
225: if (!array_key_exists($name, $this->params)) {
226: trigger_error("The variable '$name' does not exist in template.", E_USER_NOTICE);
227: }
228:
229: return $this->params[$name];
230: }
231:
232:
233: 234: 235: 236:
237: public function __isset($name)
238: {
239: return isset($this->params[$name]);
240: }
241:
242:
243: 244: 245: 246: 247:
248: public function __unset($name)
249: {
250: unset($this->params[$name]);
251: }
252:
253: }
254: