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: class Template implements Nette\Application\UI\ITemplate
18: {
19: use Nette\SmartObject;
20:
21:
22: private $latte;
23:
24:
25: private $file;
26:
27:
28: private $params = [];
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 = [])
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: trigger_error(__METHOD__ . '() is deprecated, use getLatte()->addFilter().', E_USER_DEPRECATED);
99: return $this->latte->addFilter($name, $callback);
100: }
101:
102:
103: 104: 105: 106:
107: public function setTranslator(Nette\Localization\ITranslator $translator = NULL)
108: {
109: $this->latte->addFilter('translate', $translator === NULL ? NULL : function (Latte\Runtime\FilterInfo $fi, ...$args) use ($translator) {
110: return $translator->translate(...$args);
111: });
112: return $this;
113: }
114:
115:
116:
117:
118:
119: 120: 121: 122: 123:
124: public function setFile($file)
125: {
126: $this->file = $file;
127: return $this;
128: }
129:
130:
131: 132: 133:
134: public function getFile()
135: {
136: return $this->file;
137: }
138:
139:
140: 141: 142: 143:
144: public function add($name, $value)
145: {
146: if (array_key_exists($name, $this->params)) {
147: throw new Nette\InvalidStateException("The variable '$name' already exists.");
148: }
149: $this->params[$name] = $value;
150: return $this;
151: }
152:
153:
154: 155: 156: 157: 158:
159: public function setParameters(array $params)
160: {
161: $this->params = $params + $this->params;
162: return $this;
163: }
164:
165:
166: 167: 168: 169:
170: public function getParameters()
171: {
172: return $this->params;
173: }
174:
175:
176: 177: 178:
179: public function __call($name, $args)
180: {
181: trigger_error('Invoking filters on Template object is deprecated, use getLatte()->invokeFilter().', E_USER_DEPRECATED);
182: return $this->latte->invokeFilter($name, $args);
183: }
184:
185:
186: 187: 188: 189:
190: public function __set($name, $value)
191: {
192: $this->params[$name] = $value;
193: }
194:
195:
196: 197: 198: 199:
200: public function &__get($name)
201: {
202: if (!array_key_exists($name, $this->params)) {
203: trigger_error("The variable '$name' does not exist in template.", E_USER_NOTICE);
204: }
205:
206: return $this->params[$name];
207: }
208:
209:
210: 211: 212: 213:
214: public function __isset($name)
215: {
216: return isset($this->params[$name]);
217: }
218:
219:
220: 221: 222: 223: 224:
225: public function __unset($name)
226: {
227: unset($this->params[$name]);
228: }
229:
230: }
231: