1: <?php
2:
3: 4: 5: 6:
7:
8: namespace Nette\Bridges\ApplicationLatte;
9:
10: use Nette,
11: 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 (\Exception $e) {
66: if (func_num_args()) {
67: throw $e;
68: }
69: trigger_error("Exception in " . __METHOD__ . "(): {$e->getMessage()} in {$e->getFile()}:{$e->getLine()}", E_USER_ERROR);
70: }
71: }
72:
73:
74:
75:
76:
77: 78: 79: 80: 81: 82:
83: public function addFilter($name, $callback)
84: {
85: return $this->latte->addFilter($name, $callback);
86: }
87:
88:
89: 90: 91: 92:
93: public function registerHelper($name, $callback)
94: {
95:
96: return $this->latte->addFilter($name, $callback);
97: }
98:
99:
100: 101: 102: 103:
104: public function registerHelperLoader($loader)
105: {
106: trigger_error(__METHOD__ . '() is deprecated, use dynamic getLatte()->addFilter().', E_USER_DEPRECATED);
107: $latte = $this->latte;
108: $this->latte->addFilter(NULL, function($name) use ($loader, $latte) {
109: if ($callback = call_user_func($loader, $name)) {
110: $latte->addFilter($name, $callback);
111: }
112: });
113: return $this;
114: }
115:
116:
117: 118: 119: 120:
121: public function setTranslator(Nette\Localization\ITranslator $translator = NULL)
122: {
123: $this->latte->addFilter('translate', $translator === NULL ? NULL : array($translator, 'translate'));
124: return $this;
125: }
126:
127:
128: 129: 130:
131: public function registerFilter($callback)
132: {
133: throw new Nette\DeprecatedException(__METHOD__ . '() is deprecated.');
134: }
135:
136:
137:
138:
139:
140: 141: 142: 143: 144:
145: public function setFile($file)
146: {
147: $this->file = $file;
148: return $this;
149: }
150:
151:
152: 153: 154:
155: public function getFile()
156: {
157: return $this->file;
158: }
159:
160:
161: 162: 163: 164:
165: public function add($name, $value)
166: {
167: if (array_key_exists($name, $this->params)) {
168: throw new Nette\InvalidStateException("The variable '$name' already exists.");
169: }
170: $this->params[$name] = $value;
171: return $this;
172: }
173:
174:
175: 176: 177: 178: 179:
180: public function setParameters(array $params)
181: {
182: $this->params = $params + $this->params;
183: return $this;
184: }
185:
186:
187: 188: 189: 190:
191: public function getParameters()
192: {
193: return $this->params;
194: }
195:
196:
197: 198: 199:
200: public function __call($name, $args)
201: {
202: trigger_error('Invoking filters on Template object is deprecated, use getLatte()->invokeFilter().', E_USER_DEPRECATED);
203: return $this->latte->invokeFilter($name, $args);
204: }
205:
206:
207: 208: 209: 210:
211: public function __set($name, $value)
212: {
213: $this->params[$name] = $value;
214: }
215:
216:
217: 218: 219: 220:
221: public function &__get($name)
222: {
223: if (!array_key_exists($name, $this->params)) {
224: trigger_error("The variable '$name' does not exist in template.", E_USER_NOTICE);
225: }
226:
227: return $this->params[$name];
228: }
229:
230:
231: 232: 233: 234:
235: public function __isset($name)
236: {
237: return isset($this->params[$name]);
238: }
239:
240:
241: 242: 243: 244: 245:
246: public function __unset($name)
247: {
248: unset($this->params[$name]);
249: }
250:
251: }
252: