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