Commit | Line | Data |
---|---|---|
d9cdc0cc TD |
1 | <!DOCTYPE html> |
2 | <head> | |
3 | <meta charset="utf-8"> | |
4 | <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
5 | <meta name="viewport" content="width=device-width, initial-scale=1"> | |
6 | <meta name="description" content=""> | |
7 | <meta name="keywords" content=" "> | |
8 | <title>Template Plugins | WoltLab Suite 5.3 Documentation</title> | |
9 | ||
e2f8eee7 | 10 | <link rel="stylesheet" href="https://docs.woltlab.com/5.3/css/syntax.css"> |
d9cdc0cc | 11 | <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,300,600"> |
e2f8eee7 | 12 | <link rel="stylesheet" href="https://docs.woltlab.com/5.3/css/font-awesome.min.css"> |
d9cdc0cc | 13 | <!--<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">--> |
e2f8eee7 TD |
14 | <link rel="stylesheet" href="https://docs.woltlab.com/5.3/css/modern-business.css"> |
15 | <link rel="stylesheet" href="https://docs.woltlab.com/5.3/css/lavish-bootstrap.css"> | |
16 | <link rel="stylesheet" href="https://docs.woltlab.com/5.3/css/customstyles.css"> | |
17 | <link rel="stylesheet" href="https://docs.woltlab.com/5.3/css/theme-blue.css?v=3"> | |
d9cdc0cc | 18 | |
e2f8eee7 TD |
19 | <script src="https://docs.woltlab.com/5.3/js/jquery.min.js"></script> |
20 | <script src="https://docs.woltlab.com/5.3/js/jquery.cookie.min.js"></script> | |
21 | <script src="https://docs.woltlab.com/5.3/js/jquery.navgoco.min.js"></script> | |
22 | <script src="https://docs.woltlab.com/5.3/js/bootstrap.min.js"></script> | |
23 | <script src="https://docs.woltlab.com/5.3/js/anchor.min.js"></script> | |
24 | <script src="https://docs.woltlab.com/5.3/js/toc.js"></script> | |
25 | <script src="https://docs.woltlab.com/5.3/js/customscripts.js"></script> | |
d9cdc0cc | 26 | |
e2f8eee7 | 27 | <link rel="shortcut icon" href="https://docs.woltlab.com/5.3/images/favicon.ico"> |
d9cdc0cc | 28 | |
e2f8eee7 | 29 | <link rel="alternate" type="application/rss+xml" title="woltlab.github.io" href="https://docs.woltlab.com/5.3feed.xml"> |
d9cdc0cc TD |
30 | |
31 | <script> | |
32 | $(document).ready(function() { | |
33 | // Initialize navgoco with default options | |
34 | $("#mysidebar").navgoco({ | |
35 | caretHtml: '', | |
36 | accordion: true, | |
37 | openClass: 'active', // open | |
38 | save: false, // leave false or nav highlighting doesn't work right | |
39 | cookie: { | |
40 | name: 'navgoco', | |
41 | expires: false, | |
42 | path: '/' | |
43 | }, | |
44 | slide: { | |
45 | duration: 400, | |
46 | easing: 'swing' | |
47 | } | |
48 | }); | |
49 | ||
50 | $("#collapseAll").click(function(e) { | |
51 | e.preventDefault(); | |
52 | $("#mysidebar").navgoco('toggle', false); | |
53 | }); | |
54 | ||
55 | $("#expandAll").click(function(e) { | |
56 | e.preventDefault(); | |
57 | $("#mysidebar").navgoco('toggle', true); | |
58 | }); | |
59 | ||
60 | }); | |
61 | ||
62 | </script> | |
63 | <script> | |
64 | $(function () { | |
65 | $('[data-toggle="tooltip"]').tooltip() | |
66 | }) | |
67 | </script> | |
68 | ||
69 | ||
70 | </head> | |
71 | <body> | |
72 | <!-- Navigation --> | |
73 | <nav class="navbar navbar-inverse navbar-fixed-top"> | |
74 | <div class="container topnavlinks"> | |
75 | <div class="navbar-header"> | |
76 | <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> | |
77 | <span class="sr-only">Toggle navigation</span> | |
78 | <span class="icon-bar"></span> | |
79 | <span class="icon-bar"></span> | |
80 | <span class="icon-bar"></span> | |
81 | </button> | |
82 | <a class="fa fa-home fa-lg navbar-brand" href="index.html"> <span class="projectTitle"> WoltLab Suite 5.3 Documentation</span></a> | |
83 | </div> | |
84 | <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> | |
85 | <ul class="nav navbar-nav navbar-right"> | |
86 | <!-- entries without drop-downs appear here --> | |
87 | ||
88 | ||
89 | ||
90 | <li><a href="https://www.woltlab.com" target="_blank">woltlab.com</a></li> | |
91 | ||
92 | ||
93 | ||
94 | ||
95 | ||
96 | <li><a href="https://github.com/WoltLab/WCF/" target="_blank">Code on github.com</a></li> | |
97 | ||
98 | ||
99 | ||
100 | <!-- entries with drop-downs appear here --> | |
101 | <!-- conditional logic to control which topnav appears for the audience defined in the configuration file.--> | |
102 | ||
103 | ||
104 | <!--comment out this block if you want to hide search--> | |
105 | <li> | |
106 | <!--start search--> | |
107 | <div id="search-demo-container"> | |
108 | <input type="text" id="search-input" placeholder="search..."> | |
109 | <ul id="results-container"></ul> | |
110 | </div> | |
e2f8eee7 | 111 | <script src="https://docs.woltlab.com/5.3/js/jekyll-search.js" type="text/javascript"></script> |
d9cdc0cc TD |
112 | <script type="text/javascript"> |
113 | SimpleJekyllSearch.init({ | |
114 | searchInput: document.getElementById('search-input'), | |
115 | resultsContainer: document.getElementById('results-container'), | |
e2f8eee7 | 116 | dataSource: 'https://docs.woltlab.com/5.3/search.json', |
d9cdc0cc TD |
117 | searchResultTemplate: '<li><a href="{url}" title="Template Plugins">{title}</a></li>', |
118 | noResultsText: 'No results found.', | |
119 | limit: 10, | |
120 | fuzzy: true, | |
121 | }) | |
122 | </script> | |
123 | <!--end search--> | |
124 | </li> | |
125 | </ul> | |
126 | </div> | |
127 | </div> | |
128 | <!-- /.container --> | |
129 | </nav> | |
130 | ||
131 | ||
132 | <div class="container"> | |
133 | <div class="col-lg-12"> </div> | |
134 | ||
135 | <div class="row"> | |
136 | <div class="col-md-3"> | |
137 | ||
138 | ||
139 | ||
140 | <ul id="mysidebar" class="nav"> | |
141 | <li class="sidebarTitle">WoltLab Suite 5.3</li> | |
142 | ||
143 | ||
144 | ||
145 | <li> | |
146 | <a href="#">Getting Started</a> | |
147 | <ul> | |
148 | ||
149 | ||
150 | ||
151 | ||
152 | <li data-identifier="index"><a href="index.html">Introduction</a></li> | |
153 | ||
154 | ||
155 | ||
156 | ||
157 | ||
158 | ||
159 | ||
160 | ||
161 | <li data-identifier="getting-started_quick-start"><a href="getting-started_quick-start.html">Quick Start</a></li> | |
162 | ||
163 | ||
164 | ||
165 | ||
166 | ||
167 | </ul> | |
168 | </li> | |
169 | ||
170 | <li> | |
171 | <a href="#">PHP API</a> | |
172 | <ul> | |
173 | ||
174 | ||
175 | ||
176 | ||
177 | <li data-identifier="php_pages"><a href="php_pages.html">Pages</a></li> | |
178 | ||
179 | ||
180 | ||
181 | ||
182 | ||
183 | ||
184 | ||
185 | ||
186 | <li data-identifier="php_database-objects"><a href="php_database-objects.html">Database Objects</a></li> | |
187 | ||
188 | ||
189 | ||
190 | ||
191 | ||
192 | ||
193 | ||
194 | ||
195 | <li data-identifier="php_database-access"><a href="php_database-access.html">Database Access</a></li> | |
196 | ||
197 | ||
198 | ||
199 | ||
200 | ||
201 | ||
202 | ||
203 | ||
204 | <li data-identifier="php_exceptions"><a href="php_exceptions.html">Exceptions</a></li> | |
205 | ||
206 | ||
207 | ||
208 | ||
209 | ||
210 | ||
211 | ||
212 | ||
213 | <li class="subfolders"> | |
214 | <a href="#">API</a> | |
215 | <ul> | |
216 | ||
217 | ||
218 | ||
219 | <li data-identifier="php_api_caches"><a href="php_api_caches.html">Caches</a></li> | |
220 | ||
221 | ||
222 | ||
223 | ||
224 | <li data-identifier="php_api_comments"><a href="php_api_comments.html">Comments</a></li> | |
225 | ||
226 | ||
227 | ||
228 | ||
229 | <li data-identifier="php_api_cronjobs"><a href="php_api_cronjobs.html">Cronjobs</a></li> | |
230 | ||
231 | ||
232 | ||
233 | ||
234 | <li data-identifier="php_api_events"><a href="php_api_events.html">Events</a></li> | |
235 | ||
236 | ||
237 | ||
238 | ||
239 | <li data-identifier="php_api_form_builder"><a href="php_api_form_builder.html">Form Builder</a></li> | |
240 | ||
241 | ||
242 | ||
243 | ||
244 | <li data-identifier="php_api_package_installation_plugins"><a href="php_api_package_installation_plugins.html">Package Installation Plugins</a></li> | |
245 | ||
246 | ||
247 | ||
248 | ||
249 | <li data-identifier="php_api_user_activity_points"><a href="php_api_user_activity_points.html">User Activity Points</a></li> | |
250 | ||
251 | ||
252 | ||
253 | ||
254 | <li data-identifier="php_api_user_notifications"><a href="php_api_user_notifications.html">User Notifications</a></li> | |
255 | ||
256 | ||
257 | ||
258 | ||
259 | <li data-identifier="php_api_sitemaps"><a href="php_api_sitemaps.html">Sitemaps</a></li> | |
260 | ||
261 | ||
262 | </ul> | |
263 | </li> | |
264 | ||
265 | ||
266 | ||
267 | ||
268 | ||
269 | <li data-identifier="php_code-style"><a href="php_code-style.html">Code Style</a></li> | |
270 | ||
271 | ||
272 | ||
273 | ||
274 | ||
275 | ||
276 | ||
277 | ||
278 | <li data-identifier="php_apps"><a href="php_apps.html">Apps</a></li> | |
279 | ||
280 | ||
281 | ||
282 | ||
283 | ||
284 | ||
285 | ||
286 | ||
287 | <li data-identifier="php_gdpr"><a href="php_gdpr.html">GDPR</a></li> | |
288 | ||
289 | ||
290 | ||
291 | ||
292 | ||
293 | </ul> | |
294 | </li> | |
295 | ||
296 | <li> | |
297 | <a href="#">Languages, Templates & CSS</a> | |
298 | <ul> | |
299 | ||
300 | ||
301 | ||
302 | ||
303 | <li data-identifier="view_languages"><a href="view_languages.html">Languages</a></li> | |
304 | ||
305 | ||
306 | ||
307 | ||
308 | ||
309 | ||
310 | ||
311 | ||
312 | <li data-identifier="view_templates"><a href="view_templates.html">Templates</a></li> | |
313 | ||
314 | ||
315 | ||
316 | ||
317 | ||
318 | ||
319 | ||
320 | ||
321 | <li data-identifier="view_css"><a href="view_css.html">CSS</a></li> | |
322 | ||
323 | ||
324 | ||
325 | ||
326 | ||
327 | </ul> | |
328 | </li> | |
329 | ||
330 | <li> | |
331 | <a href="#">JavaScript API</a> | |
332 | <ul> | |
333 | ||
334 | ||
335 | ||
336 | ||
337 | <li data-identifier="javascript_general-usage"><a href="javascript_general-usage.html">General Usage</a></li> | |
338 | ||
339 | ||
340 | ||
341 | ||
342 | ||
343 | ||
344 | ||
345 | ||
346 | <li class="subfolders"> | |
347 | <a href="#">New API</a> | |
348 | <ul> | |
349 | ||
350 | ||
351 | ||
352 | <li data-identifier="javascript_new-api_writing-a-module"><a href="javascript_new-api_writing-a-module.html">Writing a module</a></li> | |
353 | ||
354 | ||
355 | ||
356 | ||
357 | <li data-identifier="javascript_new-api_data-structures"><a href="javascript_new-api_data-structures.html">Data Structures</a></li> | |
358 | ||
359 | ||
360 | ||
361 | ||
362 | <li data-identifier="javascript_new-api_core"><a href="javascript_new-api_core.html">Core Functions</a></li> | |
363 | ||
364 | ||
365 | ||
366 | ||
367 | <li data-identifier="javascript_new-api_dom"><a href="javascript_new-api_dom.html">DOM</a></li> | |
368 | ||
369 | ||
370 | ||
371 | ||
372 | <li data-identifier="javascript_new-api_events"><a href="javascript_new-api_events.html">Event Handling</a></li> | |
373 | ||
374 | ||
375 | ||
376 | ||
377 | <li data-identifier="javascript_new-api_ajax"><a href="javascript_new-api_ajax.html">Ajax</a></li> | |
378 | ||
379 | ||
380 | ||
381 | ||
382 | <li data-identifier="javascript_new-api_dialogs"><a href="javascript_new-api_dialogs.html">Dialogs</a></li> | |
383 | ||
384 | ||
385 | ||
386 | ||
387 | <li data-identifier="javascript_new-api_browser"><a href="javascript_new-api_browser.html">Browser and Screen Sizes</a></li> | |
388 | ||
389 | ||
390 | ||
391 | ||
392 | <li data-identifier="javascript_new-api_ui"><a href="javascript_new-api_ui.html">User Interface</a></li> | |
393 | ||
394 | ||
395 | </ul> | |
396 | </li> | |
397 | ||
398 | ||
399 | ||
400 | ||
401 | ||
402 | <li data-identifier="javascript_legacy-api"><a href="javascript_legacy-api.html">Legacy API</a></li> | |
403 | ||
404 | ||
405 | ||
406 | ||
407 | ||
408 | ||
409 | ||
410 | ||
411 | <li data-identifier="javascript_helper-functions"><a href="javascript_helper-functions.html">Helper Functions</a></li> | |
412 | ||
413 | ||
414 | ||
415 | ||
416 | ||
417 | ||
418 | ||
419 | ||
420 | <li data-identifier="javascript_code-snippets"><a href="javascript_code-snippets.html">Code Snippets</a></li> | |
421 | ||
422 | ||
423 | ||
424 | ||
425 | ||
426 | </ul> | |
427 | </li> | |
428 | ||
429 | <li> | |
430 | <a href="#">Package Components</a> | |
431 | <ul> | |
432 | ||
433 | ||
434 | ||
435 | ||
436 | <li data-identifier="package_package-xml"><a href="package_package-xml.html">package.xml</a></li> | |
437 | ||
438 | ||
439 | ||
440 | ||
441 | ||
442 | ||
443 | ||
444 | ||
445 | <li data-identifier="package_pip"><a href="package_pip.html">PIPs</a></li> | |
446 | ||
447 | ||
448 | ||
449 | ||
450 | ||
451 | </ul> | |
452 | </li> | |
453 | ||
454 | <li> | |
455 | <a href="#">Migration</a> | |
456 | <ul> | |
457 | ||
458 | ||
459 | ||
460 | ||
461 | <li class="subfolders"> | |
462 | <a href="#">Migrating from WSC 5.2</a> | |
463 | <ul> | |
464 | ||
465 | ||
466 | ||
467 | <li data-identifier="migration_wsc-52_php"><a href="migration_wsc-52_php.html">PHP API</a></li> | |
468 | ||
469 | ||
470 | ||
471 | ||
472 | <li data-identifier="migration_wsc-52_templates"><a href="migration_wsc-52_templates.html">Templates and Languages</a></li> | |
473 | ||
474 | ||
475 | ||
476 | ||
477 | <li data-identifier="migration_wsc-52_libraries"><a href="migration_wsc-52_libraries.html">Third Party Libraries</a></li> | |
478 | ||
479 | ||
480 | </ul> | |
481 | </li> | |
482 | ||
483 | <li class="subfolders"> | |
484 | <a href="#">Migrating from WSC 3.1</a> | |
485 | <ul> | |
486 | ||
487 | ||
488 | ||
489 | <li data-identifier="migration_wsc-31_php"><a href="migration_wsc-31_php.html">PHP API</a></li> | |
490 | ||
491 | ||
492 | </ul> | |
493 | </li> | |
494 | ||
495 | <li class="subfolders"> | |
496 | <a href="#">Migrating from WSC 3.0</a> | |
497 | <ul> | |
498 | ||
499 | ||
500 | ||
501 | <li data-identifier="migration_wsc-30_php"><a href="migration_wsc-30_php.html">PHP API</a></li> | |
502 | ||
503 | ||
504 | ||
505 | ||
506 | <li data-identifier="migration_wsc-30_javascript"><a href="migration_wsc-30_javascript.html">JavaScript API</a></li> | |
507 | ||
508 | ||
509 | ||
510 | ||
511 | <li data-identifier="migration_wsc-30_templates"><a href="migration_wsc-30_templates.html">Templates</a></li> | |
512 | ||
513 | ||
514 | ||
515 | ||
516 | <li data-identifier="migration_wsc-30_css"><a href="migration_wsc-30_css.html">CSS</a></li> | |
517 | ||
518 | ||
519 | ||
520 | ||
521 | <li data-identifier="migration_wsc-30_package"><a href="migration_wsc-30_package.html">Package Components</a></li> | |
522 | ||
523 | ||
524 | </ul> | |
525 | </li> | |
526 | ||
527 | <li class="subfolders"> | |
528 | <a href="#">Migrating from WCF 2.1</a> | |
529 | <ul> | |
530 | ||
531 | ||
532 | ||
533 | <li data-identifier="migration_wcf-21_php"><a href="migration_wcf-21_php.html">PHP API</a></li> | |
534 | ||
535 | ||
536 | ||
537 | ||
538 | <li data-identifier="migration_wcf-21_templates"><a href="migration_wcf-21_templates.html">Templates</a></li> | |
539 | ||
540 | ||
541 | ||
542 | ||
543 | <li data-identifier="migration_wcf-21_css"><a href="migration_wcf-21_css.html">CSS</a></li> | |
544 | ||
545 | ||
546 | ||
547 | ||
548 | <li data-identifier="migration_wcf-21_package"><a href="migration_wcf-21_package.html">Package Components</a></li> | |
549 | ||
550 | ||
551 | </ul> | |
552 | </li> | |
553 | ||
554 | ||
555 | </ul> | |
556 | </li> | |
557 | ||
558 | <li> | |
559 | <a href="#">Tutorials</a> | |
560 | <ul> | |
561 | ||
562 | ||
563 | ||
564 | ||
565 | <li data-identifier="tutorial_tutorial-series"><a href="tutorial_tutorial-series.html">Tutorial Series</a></li> | |
566 | ||
567 | ||
568 | ||
569 | ||
570 | ||
571 | </ul> | |
572 | </li> | |
573 | ||
574 | ||
575 | </ul> | |
576 | ||
577 | <script> | |
578 | (function() { | |
579 | var sidebar = $('#mysidebar'); | |
580 | var item = sidebar.find('.active'); | |
581 | if (item.length === 0) { | |
582 | var parent = 'view_templates'; | |
583 | if (parent) { | |
584 | sidebar.find('li[data-identifier="' + parent + '"]').addClass('active'); | |
585 | } | |
586 | } | |
587 | ||
588 | sidebar.find(".active").parents('li').toggleClass("active"); | |
589 | })(); | |
590 | </script> | |
591 | ||
592 | </div> | |
593 | ||
594 | <div class="col-md-9"> | |
595 | <div class="post-header"> | |
596 | <h1 class="post-title-main">Template Plugins</h1> | |
597 | </div> | |
598 | ||
599 | ||
600 | ||
601 | <div class="post-content"> | |
602 | ||
603 | ||
604 | ||
605 | ||
606 | ||
607 | <!-- this handles the automatic toc. use ## for subheads to auto-generate the on-page minitoc. if you use html tags, you must supply an ID for the heading element in order for it to appear in the minitoc. --> | |
608 | <script> | |
609 | $( document ).ready(function() { | |
610 | // Handler for .ready() called. | |
611 | ||
612 | $('#toc').toc({ minimumHeaders: 0, listType: 'ul', showSpeed: 0, headers: 'h2,h3,h4' }); | |
613 | ||
614 | /* this offset helps account for the space taken up by the floating toolbar. */ | |
615 | $('#toc').on('click', 'a', function() { | |
616 | var target = $(this.getAttribute('href')) | |
617 | , scroll_target = target.offset().top | |
618 | ||
619 | $(window).scrollTop(scroll_target - 10); | |
620 | return false | |
621 | }) | |
622 | ||
623 | }); | |
624 | </script> | |
625 | ||
626 | <div id="toc"></div> | |
627 | ||
628 | ||
629 | ||
630 | <h2 id="53-anchor"><span class="label label-info">5.3+</span> <code class="language-plaintext highlighter-rouge">anchor</code></h2> | |
631 | ||
632 | <p>The <code class="language-plaintext highlighter-rouge">anchor</code> template plugin creates <code class="language-plaintext highlighter-rouge">a</code> HTML elements. | |
633 | The easiest way to use the template plugin is to pass it an instance of <code class="language-plaintext highlighter-rouge">ITitledLinkObject</code>:</p> | |
634 | ||
635 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="na">anchor</span> <span class="na">object</span><span class="o">=</span><span class="nv">$object</span><span class="k">}</span> | |
636 | </code></pre></div></div> | |
637 | ||
638 | <p>generates the same output as</p> | |
639 | ||
640 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt"><a</span> <span class="na">href=</span><span class="s">"</span><span class="k">{</span><span class="nv">$object</span><span class="o">-></span><span class="na">getLink</span><span class="o">()</span><span class="k">}</span><span class="s">"</span><span class="nt">></span><span class="k">{</span><span class="nv">$object</span><span class="o">-></span><span class="na">getTitle</span><span class="o">()</span><span class="k">}</span><span class="nt"></a></span> | |
641 | </code></pre></div></div> | |
642 | ||
643 | <p>Instead of an <code class="language-plaintext highlighter-rouge">object</code> parameter, a <code class="language-plaintext highlighter-rouge">link</code> and <code class="language-plaintext highlighter-rouge">content</code> parameter can be used:</p> | |
644 | ||
645 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="na">anchor</span> <span class="na">link</span><span class="o">=</span><span class="nv">$linkObject</span> <span class="na">content</span><span class="o">=</span><span class="nv">$content</span><span class="k">}</span> | |
646 | </code></pre></div></div> | |
647 | ||
648 | <p>where <code class="language-plaintext highlighter-rouge">$linkObject</code> implements <code class="language-plaintext highlighter-rouge">ILinkableObject</code> and <code class="language-plaintext highlighter-rouge">$content</code> is either an object implementing <code class="language-plaintext highlighter-rouge">ITitledObject</code> or having a <code class="language-plaintext highlighter-rouge">__toString()</code> method or <code class="language-plaintext highlighter-rouge">$content</code> is a string or a number.</p> | |
649 | ||
650 | <p>The last special attribute is <code class="language-plaintext highlighter-rouge">append</code> whose contents are appended to the <code class="language-plaintext highlighter-rouge">href</code> attribute of the generated anchor element.</p> | |
651 | ||
652 | <p>All of the other attributes matching <code class="language-plaintext highlighter-rouge">~^[a-z]+([A-z]+)+$~</code>, expect for <code class="language-plaintext highlighter-rouge">href</code> which is disallowed, are added as attributes to the anchor element.</p> | |
653 | ||
654 | <p>If an <code class="language-plaintext highlighter-rouge">object</code> attribute is present, the object also implements <code class="language-plaintext highlighter-rouge">IPopoverObject</code> and if the return value of <code class="language-plaintext highlighter-rouge">IPopoverObject::getPopoverLinkClass()</code> is included in the <code class="language-plaintext highlighter-rouge">class</code> attribute of the <code class="language-plaintext highlighter-rouge">anchor</code> tag, <code class="language-plaintext highlighter-rouge">data-object-id</code> is automatically added. | |
655 | This functionality makes it easy to generate links with popover support. | |
656 | Instead of</p> | |
657 | ||
658 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt"><a</span> <span class="na">href=</span><span class="s">"</span><span class="k">{</span><span class="nv">$entry</span><span class="o">-></span><span class="na">getLink</span><span class="o">()</span><span class="k">}</span><span class="s">"</span> <span class="na">class=</span><span class="s">"blogEntryLink"</span> <span class="na">data-object-id=</span><span class="s">"{@$entry->entryID}"</span><span class="nt">></span><span class="k">{</span><span class="nv">$entry</span><span class="o">-></span><span class="na">subject</span><span class="k">}</span><span class="nt"></a></span> | |
659 | </code></pre></div></div> | |
660 | ||
661 | <p>using</p> | |
662 | ||
663 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="na">anchor</span> <span class="na">object</span><span class="o">=</span><span class="nv">$entry</span> <span class="na">class</span><span class="o">=</span><span class="s1">'blogEntryLink'</span><span class="k">}</span> | |
664 | </code></pre></div></div> | |
665 | ||
666 | <p>is sufficient if <code class="language-plaintext highlighter-rouge">Entry::getPopoverLinkClass()</code> returns <code class="language-plaintext highlighter-rouge">blogEntryLink</code>.</p> | |
667 | ||
668 | <h2 id="53-anchorattributes"><span class="label label-info">5.3+</span> <code class="language-plaintext highlighter-rouge">anchorAttributes</code></h2> | |
669 | ||
670 | <p><code class="language-plaintext highlighter-rouge">anchorAttributes</code> compliments the <code class="language-plaintext highlighter-rouge">StringUtil::getAnchorTagAttributes(string, bool): string</code> method. | |
671 | It allows to easily generate the necessary attributes for an anchor tag based off the destination URL.</p> | |
672 | ||
673 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt"><a</span> <span class="na">href=</span><span class="s">"https://www.example.com"</span> <span class="k">{</span><span class="na">anchorAttributes</span> <span class="na">url</span><span class="o">=</span><span class="s1">'https://www.example.com'</span> <span class="na">appendHref</span><span class="o">=</span><span class="kc">false</span> <span class="na">appendClassname</span><span class="o">=</span><span class="kc">true</span> <span class="na">isUgc</span><span class="o">=</span><span class="kc">true</span><span class="k">}</span><span class="nt">></span> | |
674 | </code></pre></div></div> | |
675 | ||
676 | <table> | |
677 | <thead> | |
678 | <tr> | |
679 | <th>Attribute</th> | |
680 | <th>Description</th> | |
681 | </tr> | |
682 | </thead> | |
683 | <tbody> | |
684 | <tr> | |
685 | <td><code class="language-plaintext highlighter-rouge">url</code></td> | |
686 | <td>destination URL</td> | |
687 | </tr> | |
688 | <tr> | |
689 | <td><code class="language-plaintext highlighter-rouge">appendHref</code></td> | |
690 | <td>whether the <code class="language-plaintext highlighter-rouge">href</code> attribute should be generated; <code class="language-plaintext highlighter-rouge">true</code> by default</td> | |
691 | </tr> | |
692 | <tr> | |
693 | <td><code class="language-plaintext highlighter-rouge">isUgc</code></td> | |
694 | <td>whether the <code class="language-plaintext highlighter-rouge">rel="ugc"</code> attribute should be generated; <code class="language-plaintext highlighter-rouge">false</code> by default</td> | |
695 | </tr> | |
696 | <tr> | |
697 | <td><code class="language-plaintext highlighter-rouge">appendClassname</code></td> | |
698 | <td>whether the <code class="language-plaintext highlighter-rouge">class="externalURL"</code> attribute should be generated; <code class="language-plaintext highlighter-rouge">true</code> by default</td> | |
699 | </tr> | |
700 | </tbody> | |
701 | </table> | |
702 | ||
703 | <h2 id="append"><code class="language-plaintext highlighter-rouge">append</code></h2> | |
704 | ||
705 | <p>If a string should be appended to the value of a variable, <code class="language-plaintext highlighter-rouge">append</code> can be used:</p> | |
706 | ||
707 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nb">assign</span> <span class="na">var</span><span class="o">=</span><span class="na">templateVariable</span> <span class="na">value</span><span class="o">=</span><span class="s1">'newValue'</span><span class="k">}</span> | |
708 | ||
709 | <span class="k">{</span><span class="nv">$templateVariable</span><span class="k">}</span> <span class="c">{* prints 'newValue *}</span> | |
710 | ||
711 | <span class="k">{</span><span class="nb">append</span> <span class="na">var</span><span class="o">=</span><span class="na">templateVariable</span> <span class="na">value</span><span class="o">=</span><span class="s1">'2'</span><span class="k">}</span> | |
712 | ||
713 | <span class="k">{</span><span class="nv">$templateVariable</span><span class="k">}</span> <span class="c">{* now prints 'newValue2 *}</span> | |
714 | </code></pre></div></div> | |
715 | ||
716 | <p>If the variables does not exist yet, <code class="language-plaintext highlighter-rouge">append</code> creates a new one with the given value. | |
717 | If <code class="language-plaintext highlighter-rouge">append</code> is used on an array as the variable, the value is appended to all elements of the array.</p> | |
718 | ||
719 | <h2 id="assign"><code class="language-plaintext highlighter-rouge">assign</code></h2> | |
720 | ||
721 | <p>New template variables can be declared and new values can be assigned to existing template variables using <code class="language-plaintext highlighter-rouge">assign</code>:</p> | |
722 | ||
723 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nb">assign</span> <span class="na">var</span><span class="o">=</span><span class="na">templateVariable</span> <span class="na">value</span><span class="o">=</span><span class="s1">'newValue'</span><span class="k">}</span> | |
724 | ||
725 | <span class="k">{</span><span class="nv">$templateVariable</span><span class="k">}</span> <span class="c">{* prints 'newValue *}</span> | |
726 | </code></pre></div></div> | |
727 | ||
728 | <h2 id="capture"><code class="language-plaintext highlighter-rouge">capture</code></h2> | |
729 | ||
730 | <p>In some situations, <code class="language-plaintext highlighter-rouge">assign</code> is not sufficient to assign values to variables in templates if the value is complex. | |
731 | Instead, <code class="language-plaintext highlighter-rouge">capture</code> can be used:</p> | |
732 | ||
733 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nb">capture</span> <span class="na">var</span><span class="o">=</span><span class="na">templateVariable</span><span class="k">}</span> | |
734 | <span class="k">{</span><span class="nb">if</span> <span class="nv">$foo</span><span class="k">}</span> | |
735 | <span class="nt"><p></span><span class="k">{</span><span class="nv">$bar</span><span class="k">}</span><span class="nt"></p></span> | |
736 | <span class="k">{</span><span class="nb">else</span><span class="k">}</span> | |
737 | <span class="nt"><small></span><span class="k">{</span><span class="nv">$baz</span><span class="k">}</span><span class="nt"></small></span> | |
738 | <span class="k">{/</span><span class="nb">if</span><span class="k">}</span> | |
739 | <span class="k">{/</span><span class="nb">capture</span><span class="k">}</span> | |
740 | </code></pre></div></div> | |
741 | ||
742 | <h2 id="concat"><code class="language-plaintext highlighter-rouge">concat</code></h2> | |
743 | ||
744 | <p><code class="language-plaintext highlighter-rouge">concat</code> is a modifier used to concatenate multiple strings:</p> | |
745 | ||
746 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nb">assign</span> <span class="na">var</span><span class="o">=</span><span class="na">foo</span> <span class="na">value</span><span class="o">=</span><span class="s1">'foo'</span><span class="k">}</span> | |
747 | ||
748 | <span class="k">{</span><span class="nb">assign</span> <span class="na">var</span><span class="o">=</span><span class="na">templateVariable</span> <span class="na">value</span><span class="o">=</span><span class="s1">'bar'</span><span class="o">|</span><span class="na">concat</span><span class="o">:</span><span class="nv">$foo</span><span class="k">}</span> | |
749 | ||
750 | <span class="k">{</span><span class="nv">$templateVariable</span><span class="k">}</span> <span class="c">{* prints 'foobar *}</span> | |
751 | </code></pre></div></div> | |
752 | ||
753 | <h2 id="counter"><code class="language-plaintext highlighter-rouge">counter</code></h2> | |
754 | ||
755 | <p><code class="language-plaintext highlighter-rouge">counter</code> can be used to generate and optionally print a counter:</p> | |
756 | ||
757 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nb">counter</span> <span class="na">name</span><span class="o">=</span><span class="na">fooCounter</span> <span class="na">print</span><span class="o">=</span><span class="kc">true</span><span class="k">}</span> <span class="c">{* prints '1' *}</span> | |
758 | ||
759 | <span class="k">{</span><span class="nb">counter</span> <span class="na">name</span><span class="o">=</span><span class="na">fooCounter</span> <span class="na">print</span><span class="o">=</span><span class="kc">true</span><span class="k">}</span> <span class="c">{* prints '2' now *}</span> | |
760 | ||
761 | <span class="k">{</span><span class="nb">counter</span> <span class="na">name</span><span class="o">=</span><span class="na">fooCounter</span><span class="k">}</span> <span class="c">{* prints nothing, but counter value is '3' now internally *}</span> | |
762 | ||
763 | <span class="k">{</span><span class="nb">counter</span> <span class="na">name</span><span class="o">=</span><span class="na">fooCounter</span> <span class="na">print</span><span class="o">=</span><span class="kc">true</span><span class="k">}</span> <span class="c">{* prints '4' *}</span> | |
764 | </code></pre></div></div> | |
765 | ||
766 | <p>Counter supports the following attributes:</p> | |
767 | ||
768 | <table> | |
769 | <thead> | |
770 | <tr> | |
771 | <th>Attribute</th> | |
772 | <th>Description</th> | |
773 | </tr> | |
774 | </thead> | |
775 | <tbody> | |
776 | <tr> | |
777 | <td><code class="language-plaintext highlighter-rouge">assign</code></td> | |
778 | <td>optional name of the template variable the current counter value is assigned to</td> | |
779 | </tr> | |
780 | <tr> | |
781 | <td><code class="language-plaintext highlighter-rouge">direction</code></td> | |
782 | <td>counting direction, either <code class="language-plaintext highlighter-rouge">up</code> or <code class="language-plaintext highlighter-rouge">down</code>; <code class="language-plaintext highlighter-rouge">up</code> by default</td> | |
783 | </tr> | |
784 | <tr> | |
785 | <td><code class="language-plaintext highlighter-rouge">name</code></td> | |
786 | <td>name of the counter, relevant if multiple counters are used simultaneously</td> | |
787 | </tr> | |
788 | <tr> | |
789 | <td><code class="language-plaintext highlighter-rouge">print</code></td> | |
790 | <td>if <code class="language-plaintext highlighter-rouge">true</code>, the current counter value is printed; <code class="language-plaintext highlighter-rouge">false</code> by default</td> | |
791 | </tr> | |
792 | <tr> | |
793 | <td><code class="language-plaintext highlighter-rouge">skip</code></td> | |
794 | <td>positive counting increment; <code class="language-plaintext highlighter-rouge">1</code> by default</td> | |
795 | </tr> | |
796 | <tr> | |
797 | <td><code class="language-plaintext highlighter-rouge">start</code></td> | |
798 | <td>start counter value; <code class="language-plaintext highlighter-rouge">1</code> by default</td> | |
799 | </tr> | |
800 | </tbody> | |
801 | </table> | |
802 | ||
803 | <h2 id="currency"><code class="language-plaintext highlighter-rouge">currency</code></h2> | |
804 | ||
805 | <p><code class="language-plaintext highlighter-rouge">currency</code> is a modifier used to format currency values with two decimals using language dependent thousands separators and decimal point:</p> | |
806 | ||
807 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nb">assign</span> <span class="na">var</span><span class="o">=</span><span class="na">currencyValue</span> <span class="na">value</span><span class="o">=</span><span class="m">12.345</span><span class="k">}</span> | |
808 | ||
809 | <span class="k">{</span><span class="nv">$currencyValue</span><span class="o">|</span><span class="na">currency</span><span class="k">}</span> <span class="c">{* prints '12.34' *}</span> | |
810 | </code></pre></div></div> | |
811 | ||
812 | <h2 id="cycle"><code class="language-plaintext highlighter-rouge">cycle</code></h2> | |
813 | ||
814 | <p><code class="language-plaintext highlighter-rouge">cycle</code> can be used to cycle between different values:</p> | |
815 | ||
816 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nb">cycle</span> <span class="na">name</span><span class="o">=</span><span class="na">fooCycle</span> <span class="na">values</span><span class="o">=</span><span class="s1">'bar,baz'</span><span class="k">}</span> <span class="c">{* prints 'bar' *}</span> | |
817 | ||
818 | <span class="k">{</span><span class="nb">cycle</span> <span class="na">name</span><span class="o">=</span><span class="na">fooCycle</span><span class="k">}</span> <span class="c">{* prints 'baz' *}</span> | |
819 | ||
820 | <span class="k">{</span><span class="nb">cycle</span> <span class="na">name</span><span class="o">=</span><span class="na">fooCycle</span> <span class="na">advance</span><span class="o">=</span><span class="kc">false</span><span class="k">}</span> <span class="c">{* prints 'baz' again *}</span> | |
821 | ||
822 | <span class="k">{</span><span class="nb">cycle</span> <span class="na">name</span><span class="o">=</span><span class="na">fooCycle</span><span class="k">}</span> <span class="c">{* prints 'bar' *}</span> | |
823 | </code></pre></div></div> | |
824 | ||
825 | <div class="bs-callout bs-callout-info">The values attribute only has to be present for the first call. If <code class="language-plaintext highlighter-rouge">cycle</code> is used in a loop, the presence of the same values in consecutive calls has no effect. Only once the values change, the cycle is reset.</div> | |
826 | ||
827 | <table> | |
828 | <thead> | |
829 | <tr> | |
830 | <th>Attribute</th> | |
831 | <th>Description</th> | |
832 | </tr> | |
833 | </thead> | |
834 | <tbody> | |
835 | <tr> | |
836 | <td><code class="language-plaintext highlighter-rouge">advance</code></td> | |
837 | <td>if <code class="language-plaintext highlighter-rouge">true</code>, the current cycle value is advanced to the next value; <code class="language-plaintext highlighter-rouge">true</code> by default</td> | |
838 | </tr> | |
839 | <tr> | |
840 | <td><code class="language-plaintext highlighter-rouge">assign</code></td> | |
841 | <td>optional name of the template variable the current cycle value is assigned to; if used, <code class="language-plaintext highlighter-rouge">print</code> is set to <code class="language-plaintext highlighter-rouge">false</code></td> | |
842 | </tr> | |
843 | <tr> | |
844 | <td><code class="language-plaintext highlighter-rouge">delimiter</code></td> | |
845 | <td>delimiter between the different cycle values; <code class="language-plaintext highlighter-rouge">,</code> by default</td> | |
846 | </tr> | |
847 | <tr> | |
848 | <td><code class="language-plaintext highlighter-rouge">name</code></td> | |
849 | <td>name of the cycle, relevant if multiple cycles are used simultaneously</td> | |
850 | </tr> | |
851 | <tr> | |
852 | <td><code class="language-plaintext highlighter-rouge">print</code></td> | |
853 | <td>if <code class="language-plaintext highlighter-rouge">true</code>, the current cycle value is printed, <code class="language-plaintext highlighter-rouge">false</code> by default</td> | |
854 | </tr> | |
855 | <tr> | |
856 | <td><code class="language-plaintext highlighter-rouge">reset</code></td> | |
857 | <td>if <code class="language-plaintext highlighter-rouge">true</code>, the current cycle value is set to the first value, <code class="language-plaintext highlighter-rouge">false</code> by default</td> | |
858 | </tr> | |
859 | <tr> | |
860 | <td><code class="language-plaintext highlighter-rouge">values</code></td> | |
861 | <td>string containing the different cycles values, also see <code class="language-plaintext highlighter-rouge">delimiter</code></td> | |
862 | </tr> | |
863 | </tbody> | |
864 | </table> | |
865 | ||
866 | <h2 id="date"><code class="language-plaintext highlighter-rouge">date</code></h2> | |
867 | ||
868 | <p><code class="language-plaintext highlighter-rouge">date</code> generated a formatted date using <code class="language-plaintext highlighter-rouge">wcf\util\DateUtil::format()</code> with <code class="language-plaintext highlighter-rouge">DateUtil::DATE_FORMAT</code> internally.</p> | |
869 | ||
870 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nv">$timestamp</span><span class="o">|</span><span class="na">date</span><span class="k">}</span> | |
871 | </code></pre></div></div> | |
872 | ||
873 | <h2 id="31-dateinterval"><span class="label label-info">3.1+</span> <code class="language-plaintext highlighter-rouge">dateInterval</code></h2> | |
874 | ||
875 | <p><code class="language-plaintext highlighter-rouge">dateInterval</code> calculates the difference between two unix timestamps and generated a textual date interval.</p> | |
876 | ||
877 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="na">dateInterval</span> <span class="na">start</span><span class="o">=</span><span class="nv">$startTimestamp</span> <span class="na">end</span><span class="o">=</span><span class="nv">$endTimestamp</span> <span class="na">full</span><span class="o">=</span><span class="kc">true</span> <span class="na">format</span><span class="o">=</span><span class="s1">'sentence'</span><span class="k">}</span> | |
878 | </code></pre></div></div> | |
879 | ||
880 | <table> | |
881 | <thead> | |
882 | <tr> | |
883 | <th>Attribute</th> | |
884 | <th>Description</th> | |
885 | </tr> | |
886 | </thead> | |
887 | <tbody> | |
888 | <tr> | |
889 | <td><code class="language-plaintext highlighter-rouge">end</code></td> | |
890 | <td>end of the time interval; current timestamp by default (though either <code class="language-plaintext highlighter-rouge">start</code> or <code class="language-plaintext highlighter-rouge">end</code> has to be set)</td> | |
891 | </tr> | |
892 | <tr> | |
893 | <td><code class="language-plaintext highlighter-rouge">format</code></td> | |
894 | <td>output format, either <code class="language-plaintext highlighter-rouge">default</code>, <code class="language-plaintext highlighter-rouge">sentence</code>, or <code class="language-plaintext highlighter-rouge">plain</code>; defaults to <code class="language-plaintext highlighter-rouge">default</code>, see <code class="language-plaintext highlighter-rouge">wcf\util\DateUtil::FORMAT_*</code> constants</td> | |
895 | </tr> | |
896 | <tr> | |
897 | <td><code class="language-plaintext highlighter-rouge">full</code></td> | |
898 | <td>if <code class="language-plaintext highlighter-rouge">true</code>, full difference in minutes is shown; if <code class="language-plaintext highlighter-rouge">false</code>, only the longest time interval is shown; <code class="language-plaintext highlighter-rouge">false</code> by default</td> | |
899 | </tr> | |
900 | <tr> | |
901 | <td><code class="language-plaintext highlighter-rouge">start</code></td> | |
902 | <td>start of the time interval; current timestamp by default (though either <code class="language-plaintext highlighter-rouge">start</code> or <code class="language-plaintext highlighter-rouge">end</code> has to be set)</td> | |
903 | </tr> | |
904 | </tbody> | |
905 | </table> | |
906 | ||
907 | <h2 id="encodejs"><code class="language-plaintext highlighter-rouge">encodeJS</code></h2> | |
908 | ||
909 | <p><code class="language-plaintext highlighter-rouge">encodeJS</code> encodes a string to be used as a single-quoted string in JavaScript by replacing <code class="language-plaintext highlighter-rouge">\\</code> with <code class="language-plaintext highlighter-rouge">\\\\</code>, <code class="language-plaintext highlighter-rouge">'</code> with <code class="language-plaintext highlighter-rouge">\'</code>, linebreaks with <code class="language-plaintext highlighter-rouge">\n</code>, and <code class="language-plaintext highlighter-rouge">/</code> with <code class="language-plaintext highlighter-rouge">\/</code>.</p> | |
910 | ||
911 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt"><script></span> | |
912 | <span class="kd">var</span> <span class="nx">foo</span> <span class="o">=</span> <span class="dl">'</span><span class="s1">{@$foo|encodeJS}</span><span class="dl">'</span><span class="p">;</span> | |
913 | <span class="nt"></script></span> | |
914 | </code></pre></div></div> | |
915 | ||
916 | <h2 id="encodejson"><code class="language-plaintext highlighter-rouge">encodeJSON</code></h2> | |
917 | ||
918 | <p><code class="language-plaintext highlighter-rouge">encodeJSON</code> encodes a JSON string to be used as a single-quoted string in JavaScript by replacing <code class="language-plaintext highlighter-rouge">\\</code> with <code class="language-plaintext highlighter-rouge">\\\\</code>, <code class="language-plaintext highlighter-rouge">'</code> with <code class="language-plaintext highlighter-rouge">&#39;</code>, linebreaks with <code class="language-plaintext highlighter-rouge">\n</code>, and <code class="language-plaintext highlighter-rouge">/</code> with <code class="language-plaintext highlighter-rouge">\/</code>. | |
919 | Additionally, <code class="language-plaintext highlighter-rouge">htmlspecialchars</code> is applied to the string.</p> | |
920 | ||
921 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code>'{@$foo|encodeJSON}' | |
922 | </code></pre></div></div> | |
923 | ||
924 | <h2 id="escapecdata"><code class="language-plaintext highlighter-rouge">escapeCDATA</code></h2> | |
925 | ||
926 | <p><code class="language-plaintext highlighter-rouge">escapeCDATA</code> encodes a string to be used in a <code class="language-plaintext highlighter-rouge">CDATA</code> element by replacing <code class="language-plaintext highlighter-rouge">]]></code> with <code class="language-plaintext highlighter-rouge">]]]]><![CDATA[></code>.</p> | |
927 | ||
928 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp"><![CDATA[{@$foo|encodeCDATA}]]></span> | |
929 | </code></pre></div></div> | |
930 | ||
931 | <h2 id="event"><code class="language-plaintext highlighter-rouge">event</code></h2> | |
932 | ||
933 | <p><code class="language-plaintext highlighter-rouge">event</code> provides extension points in templates that <a href="package_pip_template-listener.html">template listeners</a> can use.</p> | |
934 | ||
935 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="na">event</span> <span class="na">name</span><span class="o">=</span><span class="s1">'foo'</span><span class="k">}</span> | |
936 | </code></pre></div></div> | |
937 | ||
938 | <h2 id="fetch"><code class="language-plaintext highlighter-rouge">fetch</code></h2> | |
939 | ||
940 | <p><code class="language-plaintext highlighter-rouge">fetch</code> fetches the contents of a file using <code class="language-plaintext highlighter-rouge">file_get_contents</code>.</p> | |
941 | ||
942 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nb">fetch</span> <span class="na">file</span><span class="o">=</span><span class="s1">'foo.html'</span><span class="k">}</span> <span class="c">{* prints the contents of `foo.html` *}</span> | |
943 | ||
944 | <span class="k">{</span><span class="nb">fetch</span> <span class="na">file</span><span class="o">=</span><span class="s1">'bar.html'</span> <span class="nb">assign</span><span class="o">=</span><span class="na">bar</span><span class="k">}</span> <span class="c">{* assigns the contents of `foo.html` to `$bar`; does not print the contents *}</span> | |
945 | </code></pre></div></div> | |
946 | ||
947 | <h2 id="filesizebinary"><code class="language-plaintext highlighter-rouge">filesizeBinary</code></h2> | |
948 | ||
949 | <p><code class="language-plaintext highlighter-rouge">filesizeBinary</code> formats the filesize using binary filesize (in bytes).</p> | |
950 | ||
951 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nv">$filesize</span><span class="o">|</span><span class="na">filesizeBinary</span><span class="k">}</span> | |
952 | </code></pre></div></div> | |
953 | ||
954 | <h2 id="filesize"><code class="language-plaintext highlighter-rouge">filesize</code></h2> | |
955 | ||
956 | <p><code class="language-plaintext highlighter-rouge">filesize</code> formats the filesize using filesize (in bytes).</p> | |
957 | ||
958 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nv">$filesize</span><span class="o">|</span><span class="na">filesize</span><span class="k">}</span> | |
959 | </code></pre></div></div> | |
960 | ||
961 | <h2 id="hascontent"><code class="language-plaintext highlighter-rouge">hascontent</code></h2> | |
962 | ||
963 | <p>In many cases, conditional statements can be used to determine if a certain section of a template is shown:</p> | |
964 | ||
965 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nb">if</span> <span class="nv">$foo</span> <span class="o">===</span> <span class="s1">'bar'</span><span class="k">}</span> | |
966 | only shown if $foo is bar | |
967 | <span class="k">{/</span><span class="nb">if</span><span class="k">}</span> | |
968 | </code></pre></div></div> | |
969 | ||
970 | <p>In some situations, however, such conditional statements are not sufficient. | |
971 | One prominent example is a template event:</p> | |
972 | ||
973 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nb">if</span> <span class="nv">$foo</span> <span class="o">===</span> <span class="s1">'bar'</span><span class="k">}</span> | |
974 | <span class="nt"><ul></span> | |
975 | <span class="k">{</span><span class="nb">if</span> <span class="nv">$foo</span> <span class="o">===</span> <span class="s1">'bar'</span><span class="k">}</span> | |
976 | <span class="nt"><li></span>Bar<span class="nt"></li></span> | |
977 | <span class="k">{/</span><span class="nb">if</span><span class="k">}</span> | |
978 | ||
979 | <span class="k">{</span><span class="na">event</span> <span class="na">name</span><span class="o">=</span><span class="s1">'listItems'</span><span class="k">}</span> | |
980 | <span class="nt"></li></span> | |
981 | <span class="k">{/</span><span class="nb">if</span><span class="k">}</span> | |
982 | </code></pre></div></div> | |
983 | ||
984 | <p>In this example, if <code class="language-plaintext highlighter-rouge">$foo !== 'bar'</code>, the list will not be shown, regardless of the additional template code provided by template listeners. | |
985 | In such a situation, <code class="language-plaintext highlighter-rouge">hascontent</code> has to be used:</p> | |
986 | ||
987 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="na">hascontent</span><span class="k">}</span> | |
988 | <span class="nt"><ul></span> | |
989 | <span class="k">{</span><span class="na">content</span><span class="k">}</span> | |
990 | <span class="k">{</span><span class="nb">if</span> <span class="nv">$foo</span> <span class="o">===</span> <span class="s1">'bar'</span><span class="k">}</span> | |
991 | <span class="nt"><li></span>Bar<span class="nt"></li></span> | |
992 | <span class="k">{/</span><span class="nb">if</span><span class="k">}</span> | |
993 | ||
994 | <span class="k">{</span><span class="na">event</span> <span class="na">name</span><span class="o">=</span><span class="s1">'listItems'</span><span class="k">}</span> | |
995 | <span class="k">{/</span><span class="na">content</span><span class="k">}</span> | |
996 | <span class="nt"></ul></span> | |
997 | <span class="k">{/</span><span class="na">hascontent</span><span class="k">}</span> | |
998 | </code></pre></div></div> | |
999 | ||
1000 | <p>If the part of the template wrapped in the <code class="language-plaintext highlighter-rouge">content</code> tags has any (trimmed) content, the part of the template wrapped by <code class="language-plaintext highlighter-rouge">hascontent</code> tags is shown (including the part wrapped by the <code class="language-plaintext highlighter-rouge">content</code> tags), otherwise nothing is shown. | |
1001 | Thus, this construct avoids an empty list compared to the <code class="language-plaintext highlighter-rouge">if</code> solution above.</p> | |
1002 | ||
1003 | <p>Like <code class="language-plaintext highlighter-rouge">foreach</code>, <code class="language-plaintext highlighter-rouge">hascontent</code> also supports an <code class="language-plaintext highlighter-rouge">else</code> part:</p> | |
1004 | ||
1005 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="na">hascontent</span><span class="k">}</span> | |
1006 | <span class="nt"><ul></span> | |
1007 | <span class="k">{</span><span class="na">content</span><span class="k">}</span> | |
1008 | <span class="c">{* … *}</span> | |
1009 | <span class="k">{/</span><span class="na">content</span><span class="k">}</span> | |
1010 | <span class="nt"></ul></span> | |
1011 | <span class="k">{</span><span class="na">hascontentelse</span><span class="k">}</span> | |
1012 | no list | |
1013 | <span class="k">{/</span><span class="na">hascontent</span><span class="k">}</span> | |
1014 | </code></pre></div></div> | |
1015 | ||
1016 | <h2 id="htmlcheckboxes"><code class="language-plaintext highlighter-rouge">htmlCheckboxes</code></h2> | |
1017 | ||
1018 | <p><code class="language-plaintext highlighter-rouge">htmlCheckboxes</code> generates a list of HTML checkboxes.</p> | |
1019 | ||
1020 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="na">htmlCheckboxes</span> <span class="na">name</span><span class="o">=</span><span class="na">foo</span> <span class="na">options</span><span class="o">=</span><span class="nv">$fooOptions</span> <span class="na">selected</span><span class="o">=</span><span class="nv">$currentFoo</span><span class="k">}</span> | |
1021 | ||
1022 | <span class="k">{</span><span class="na">htmlCheckboxes</span> <span class="na">name</span><span class="o">=</span><span class="na">bar</span> <span class="na">output</span><span class="o">=</span><span class="nv">$barLabels</span> <span class="na">values</span><span class="o">=</span><span class="nv">$barValues</span> <span class="na">selected</span><span class="o">=</span><span class="nv">$currentBar</span><span class="k">}</span> | |
1023 | </code></pre></div></div> | |
1024 | ||
1025 | <table> | |
1026 | <thead> | |
1027 | <tr> | |
1028 | <th>Attribute</th> | |
1029 | <th>Description</th> | |
1030 | </tr> | |
1031 | </thead> | |
1032 | <tbody> | |
1033 | <tr> | |
1034 | <td><span class="label label-info">5.2+</span> <code class="language-plaintext highlighter-rouge">disabled</code></td> | |
1035 | <td>if <code class="language-plaintext highlighter-rouge">true</code>, all checkboxes are disabled</td> | |
1036 | </tr> | |
1037 | <tr> | |
1038 | <td><code class="language-plaintext highlighter-rouge">disableEncoding</code></td> | |
1039 | <td>if <code class="language-plaintext highlighter-rouge">true</code>, the values are not passed through <code class="language-plaintext highlighter-rouge">wcf\util\StringUtil::encodeHTML()</code>; <code class="language-plaintext highlighter-rouge">false</code> by default</td> | |
1040 | </tr> | |
1041 | <tr> | |
1042 | <td><code class="language-plaintext highlighter-rouge">name</code></td> | |
1043 | <td><code class="language-plaintext highlighter-rouge">name</code> attribute of the <code class="language-plaintext highlighter-rouge">input</code> checkbox element</td> | |
1044 | </tr> | |
1045 | <tr> | |
1046 | <td><code class="language-plaintext highlighter-rouge">output</code></td> | |
1047 | <td>array used as keys and values for <code class="language-plaintext highlighter-rouge">options</code> if present; not present by default</td> | |
1048 | </tr> | |
1049 | <tr> | |
1050 | <td><code class="language-plaintext highlighter-rouge">options</code></td> | |
1051 | <td>array selectable options with the key used as <code class="language-plaintext highlighter-rouge">value</code> attribute and the value as the checkbox label</td> | |
1052 | </tr> | |
1053 | <tr> | |
1054 | <td><code class="language-plaintext highlighter-rouge">selected</code></td> | |
1055 | <td>current selected value(s)</td> | |
1056 | </tr> | |
1057 | <tr> | |
1058 | <td><code class="language-plaintext highlighter-rouge">separator</code></td> | |
1059 | <td>separator between the different checkboxes in the generated output; empty string by default</td> | |
1060 | </tr> | |
1061 | <tr> | |
1062 | <td><code class="language-plaintext highlighter-rouge">values</code></td> | |
1063 | <td>array with values used in combination with <code class="language-plaintext highlighter-rouge">output</code>, where <code class="language-plaintext highlighter-rouge">output</code> is only used as keys for <code class="language-plaintext highlighter-rouge">options</code></td> | |
1064 | </tr> | |
1065 | </tbody> | |
1066 | </table> | |
1067 | ||
1068 | <h2 id="htmloptions"><code class="language-plaintext highlighter-rouge">htmlOptions</code></h2> | |
1069 | ||
1070 | <p><code class="language-plaintext highlighter-rouge">htmlOptions</code> generates an <code class="language-plaintext highlighter-rouge">select</code> HTML element.</p> | |
1071 | ||
1072 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="na">htmlOptions</span> <span class="na">name</span><span class="o">=</span><span class="s1">'foo'</span> <span class="na">options</span><span class="o">=</span><span class="nv">$options</span> <span class="na">selected</span><span class="o">=</span><span class="nv">$selected</span><span class="k">}</span> | |
1073 | ||
1074 | <span class="nt"><select</span> <span class="na">name=</span><span class="s">"bar"</span><span class="nt">></span> | |
1075 | <span class="nt"><option</span> <span class="na">value=</span><span class="s">""</span><span class="k">{</span><span class="nb">if</span> <span class="o">!</span><span class="nv">$selected</span><span class="k">}</span> <span class="na">selected</span><span class="k">{/</span><span class="nb">if</span><span class="k">}</span><span class="nt">></span><span class="k">{</span><span class="na">lang</span><span class="k">}</span>foo.bar.default<span class="k">{/</span><span class="na">lang</span><span class="k">}</span><span class="nt"></option></span> | |
1076 | <span class="k">{</span><span class="na">htmlOptions</span> <span class="na">options</span><span class="o">=</span><span class="nv">$options</span> <span class="na">selected</span><span class="o">=</span><span class="nv">$selected</span><span class="k">}</span> <span class="c">{* no `name` attribute *}</span> | |
1077 | <span class="nt"></select></span> | |
1078 | </code></pre></div></div> | |
1079 | ||
1080 | <table> | |
1081 | <thead> | |
1082 | <tr> | |
1083 | <th>Attribute</th> | |
1084 | <th>Description</th> | |
1085 | </tr> | |
1086 | </thead> | |
1087 | <tbody> | |
1088 | <tr> | |
1089 | <td><code class="language-plaintext highlighter-rouge">disableEncoding</code></td> | |
1090 | <td>if <code class="language-plaintext highlighter-rouge">true</code>, the values are not passed through <code class="language-plaintext highlighter-rouge">wcf\util\StringUtil::encodeHTML()</code>; <code class="language-plaintext highlighter-rouge">false</code> by default</td> | |
1091 | </tr> | |
1092 | <tr> | |
1093 | <td><code class="language-plaintext highlighter-rouge">object</code></td> | |
1094 | <td>optional instance of <code class="language-plaintext highlighter-rouge">wcf\data\DatabaseObjectList</code> that provides the selectable options (overwrites <code class="language-plaintext highlighter-rouge">options</code> attribute internally)</td> | |
1095 | </tr> | |
1096 | <tr> | |
1097 | <td><code class="language-plaintext highlighter-rouge">name</code></td> | |
1098 | <td><code class="language-plaintext highlighter-rouge">name</code> attribute of the <code class="language-plaintext highlighter-rouge">select</code> element; if not present, only the <strong>contents</strong> of the <code class="language-plaintext highlighter-rouge">select</code> element are printed</td> | |
1099 | </tr> | |
1100 | <tr> | |
1101 | <td><code class="language-plaintext highlighter-rouge">output</code></td> | |
1102 | <td>array used as keys and values for <code class="language-plaintext highlighter-rouge">options</code> if present; not present by default</td> | |
1103 | </tr> | |
1104 | <tr> | |
1105 | <td><code class="language-plaintext highlighter-rouge">values</code></td> | |
1106 | <td>array with values used in combination with <code class="language-plaintext highlighter-rouge">output</code>, where <code class="language-plaintext highlighter-rouge">output</code> is only used as keys for <code class="language-plaintext highlighter-rouge">options</code></td> | |
1107 | </tr> | |
1108 | <tr> | |
1109 | <td><code class="language-plaintext highlighter-rouge">options</code></td> | |
1110 | <td>array selectable options with the key used as <code class="language-plaintext highlighter-rouge">value</code> attribute and the value as the option label; if a value is an array, an <code class="language-plaintext highlighter-rouge">optgroup</code> is generated with the array key as the <code class="language-plaintext highlighter-rouge">optgroup</code> label</td> | |
1111 | </tr> | |
1112 | <tr> | |
1113 | <td><code class="language-plaintext highlighter-rouge">selected</code></td> | |
1114 | <td>current selected value(s)</td> | |
1115 | </tr> | |
1116 | </tbody> | |
1117 | </table> | |
1118 | ||
1119 | <p>All additional attributes are added as attributes of the <code class="language-plaintext highlighter-rouge">select</code> HTML element.</p> | |
1120 | ||
1121 | <h2 id="implode"><code class="language-plaintext highlighter-rouge">implode</code></h2> | |
1122 | ||
1123 | <p><code class="language-plaintext highlighter-rouge">implodes</code> transforms an array into a string and prints it.</p> | |
1124 | ||
1125 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="na">implode</span> <span class="na">from</span><span class="o">=</span><span class="nv">$array</span> <span class="na">key</span><span class="o">=</span><span class="na">key</span> <span class="na">item</span><span class="o">=</span><span class="na">item</span> <span class="na">glue</span><span class="o">=</span><span class="s2">";"</span><span class="k">}{</span><span class="nv">$key</span><span class="k">}</span>: <span class="k">{</span><span class="nv">$value</span><span class="k">}{/</span><span class="na">implode</span><span class="k">}</span> | |
1126 | </code></pre></div></div> | |
1127 | ||
1128 | <table> | |
1129 | <thead> | |
1130 | <tr> | |
1131 | <th>Attribute</th> | |
1132 | <th>Description</th> | |
1133 | </tr> | |
1134 | </thead> | |
1135 | <tbody> | |
1136 | <tr> | |
1137 | <td><code class="language-plaintext highlighter-rouge">from</code></td> | |
1138 | <td>array with the imploded values</td> | |
1139 | </tr> | |
1140 | <tr> | |
1141 | <td><code class="language-plaintext highlighter-rouge">glue</code></td> | |
1142 | <td>separator between the different array values; <code class="language-plaintext highlighter-rouge">', '</code> by default</td> | |
1143 | </tr> | |
1144 | <tr> | |
1145 | <td><code class="language-plaintext highlighter-rouge">item</code></td> | |
1146 | <td>template variable name where the current array value is stored during the iteration</td> | |
1147 | </tr> | |
1148 | <tr> | |
1149 | <td><code class="language-plaintext highlighter-rouge">key</code></td> | |
1150 | <td>optional template variable name where the current array key is stored during the iteration</td> | |
1151 | </tr> | |
1152 | </tbody> | |
1153 | </table> | |
1154 | ||
1155 | <h2 id="52-ipsearch"><span class="label label-info">5.2+</span> <code class="language-plaintext highlighter-rouge">ipSearch</code></h2> | |
1156 | ||
1157 | <p><code class="language-plaintext highlighter-rouge">ipSearch</code> generates a link to search for an IP address.</p> | |
1158 | ||
1159 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="s2">"127.0.0.1"</span><span class="o">|</span><span class="na">ipSearch</span><span class="k">}</span> | |
1160 | </code></pre></div></div> | |
1161 | ||
1162 | <h2 id="30-js"><span class="label label-info">3.0+</span> <code class="language-plaintext highlighter-rouge">js</code></h2> | |
1163 | ||
1164 | <p><code class="language-plaintext highlighter-rouge">js</code> generates script tags based on whether <code class="language-plaintext highlighter-rouge">ENABLE_DEBUG_MODE</code> and <code class="language-plaintext highlighter-rouge">VISITOR_USE_TINY_BUILD</code> are enabled.</p> | |
1165 | ||
1166 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="na">js</span> <span class="na">application</span><span class="o">=</span><span class="s1">'wbb'</span> <span class="na">file</span><span class="o">=</span><span class="s1">'WBB'</span><span class="k">}</span> <span class="c">{* generates 'http://example.com/js/WBB.js' *}</span> | |
1167 | ||
1168 | <span class="k">{</span><span class="na">js</span> <span class="na">application</span><span class="o">=</span><span class="s1">'wcf'</span> <span class="na">file</span><span class="o">=</span><span class="s1">'WCF.Like'</span> <span class="na">bundle</span><span class="o">=</span><span class="s1">'WCF.Combined'</span><span class="k">}</span> | |
1169 | <span class="c">{* generates 'http://example.com/wcf/js/WCF.Like.js' if ENABLE_DEBUG_MODE=1 *}</span> | |
1170 | <span class="c">{* generates 'http://example.com/wcf/js/WCF.Combined.min.js' if ENABLE_DEBUG_MODE=0 *}</span> | |
1171 | ||
1172 | <span class="k">{</span><span class="na">js</span> <span class="na">application</span><span class="o">=</span><span class="s1">'wcf'</span> <span class="na">lib</span><span class="o">=</span><span class="s1">'jquery'</span><span class="k">}</span> | |
1173 | <span class="c">{* generates 'http://example.com/wcf/js/3rdParty/jquery.js' *}</span> | |
1174 | ||
1175 | <span class="k">{</span><span class="na">js</span> <span class="na">application</span><span class="o">=</span><span class="s1">'wcf'</span> <span class="na">lib</span><span class="o">=</span><span class="s1">'jquery-ui'</span> <span class="na">file</span><span class="o">=</span><span class="s1">'awesomeWidget'</span><span class="k">}</span> | |
1176 | <span class="c">{* generates 'http://example.com/wcf/js/3rdParty/jquery-ui/awesomeWidget.js' *}</span> | |
1177 | ||
1178 | <span class="k">{</span><span class="na">js</span> <span class="na">application</span><span class="o">=</span><span class="s1">'wcf'</span> <span class="na">file</span><span class="o">=</span><span class="s1">'WCF.Like'</span> <span class="na">bundle</span><span class="o">=</span><span class="s1">'WCF.Combined'</span> <span class="na">hasTiny</span><span class="o">=</span><span class="kc">true</span><span class="k">}</span> | |
1179 | <span class="c">{* generates 'http://example.com/wcf/js/WCF.Like.js' if ENABLE_DEBUG_MODE=1 *}</span> | |
1180 | <span class="c">{* generates 'http://example.com/wcf/js/WCF.Combined.min.js' (ENABLE_DEBUG_MODE=0 *}</span> | |
1181 | <span class="c">{* generates 'http://example.com/wcf/js/WCF.Combined.tiny.min.js' if ENABLE_DEBUG_MODE=0 and VISITOR_USE_TINY_BUILD=1 *}</span> | |
1182 | </code></pre></div></div> | |
1183 | ||
1184 | <h2 id="53-jslang"><span class="label label-info">5.3+</span> <code class="language-plaintext highlighter-rouge">jslang</code></h2> | |
1185 | ||
1186 | <p><code class="language-plaintext highlighter-rouge">jslang</code> works like <a href="#lang"><code class="language-plaintext highlighter-rouge">lang</code></a> with the difference that the resulting string is automatically passed through <a href="#encodejs"><code class="language-plaintext highlighter-rouge">encodeJS</code></a>.</p> | |
1187 | ||
1188 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code>require(['Language', /* … */], function(Language, /* … */) { | |
1189 | Language.addObject({ | |
1190 | 'app.foo.bar': '<span class="k">{</span><span class="na">jslang</span><span class="k">}</span>app.foo.bar<span class="k">{/</span><span class="na">jslang</span><span class="k">}</span>', | |
1191 | }); | |
1192 | ||
1193 | // … | |
1194 | }); | |
1195 | </code></pre></div></div> | |
1196 | ||
1197 | <h2 id="lang"><code class="language-plaintext highlighter-rouge">lang</code></h2> | |
1198 | ||
1199 | <p><code class="language-plaintext highlighter-rouge">lang</code> replaces a language items with its value.</p> | |
1200 | ||
1201 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="na">lang</span><span class="k">}</span>foo.bar.baz<span class="k">{/</span><span class="na">lang</span><span class="k">}</span> | |
1202 | ||
1203 | <span class="k">{</span><span class="na">lang</span> <span class="na">__literal</span><span class="o">=</span><span class="kc">true</span><span class="k">}</span>foo.bar.baz<span class="k">{/</span><span class="na">lang</span><span class="k">}</span> | |
1204 | ||
1205 | <span class="k">{</span><span class="na">lang</span> <span class="na">foo</span><span class="o">=</span><span class="s1">'baz'</span><span class="k">}</span>foo.bar.baz<span class="k">{/</span><span class="na">lang</span><span class="k">}</span> | |
1206 | ||
1207 | <span class="k">{</span><span class="na">lang</span><span class="k">}</span>foo.bar.baz.<span class="k">{</span><span class="nv">$action</span><span class="k">}{/</span><span class="na">lang</span><span class="k">}</span> | |
1208 | </code></pre></div></div> | |
1209 | ||
1210 | <table> | |
1211 | <thead> | |
1212 | <tr> | |
1213 | <th>Attribute</th> | |
1214 | <th>Description</th> | |
1215 | </tr> | |
1216 | </thead> | |
1217 | <tbody> | |
1218 | <tr> | |
1219 | <td><code class="language-plaintext highlighter-rouge">__encode</code></td> | |
1220 | <td>if <code class="language-plaintext highlighter-rouge">true</code>, the output will be passed through <code class="language-plaintext highlighter-rouge">StringUtil::encodeHTML()</code></td> | |
1221 | </tr> | |
1222 | <tr> | |
1223 | <td><code class="language-plaintext highlighter-rouge">__literal</code></td> | |
1224 | <td>if <code class="language-plaintext highlighter-rouge">true</code>, template variables will not resolved but printed as they are in the language item; <code class="language-plaintext highlighter-rouge">false</code> by default</td> | |
1225 | </tr> | |
1226 | <tr> | |
1227 | <td><code class="language-plaintext highlighter-rouge">__optional</code></td> | |
1228 | <td>if <code class="language-plaintext highlighter-rouge">true</code> and the language item does not exist, an empty string is printed; <code class="language-plaintext highlighter-rouge">false</code> by default</td> | |
1229 | </tr> | |
1230 | </tbody> | |
1231 | </table> | |
1232 | ||
1233 | <p>All additional attributes are available when parsing the language item.</p> | |
1234 | ||
1235 | <h2 id="language"><code class="language-plaintext highlighter-rouge">language</code></h2> | |
1236 | ||
1237 | <p><code class="language-plaintext highlighter-rouge">language</code> replaces a language items with its value. | |
1238 | If the template variable <code class="language-plaintext highlighter-rouge">__language</code> exists, this language object will be used instead of <code class="language-plaintext highlighter-rouge">WCF::getLanguage()</code>. | |
1239 | This modifier is useful when assigning the value directly to a variable.</p> | |
1240 | ||
1241 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nv">$languageItem</span><span class="o">|</span><span class="na">language</span><span class="k">}</span> | |
1242 | ||
1243 | <span class="k">{</span><span class="nb">assign</span> <span class="na">var</span><span class="o">=</span><span class="na">foo</span> <span class="na">value</span><span class="o">=</span><span class="nv">$languageItem</span><span class="o">|</span><span class="na">language</span><span class="k">}</span> | |
1244 | </code></pre></div></div> | |
1245 | ||
1246 | <h2 id="link"><code class="language-plaintext highlighter-rouge">link</code></h2> | |
1247 | ||
1248 | <p><code class="language-plaintext highlighter-rouge">link</code> generates internal links using <code class="language-plaintext highlighter-rouge">LinkHandler</code>.</p> | |
1249 | ||
1250 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt"><a</span> <span class="na">href=</span><span class="s">"</span><span class="k">{</span><span class="na">link</span> <span class="na">controller</span><span class="o">=</span><span class="s1">'FooList'</span> <span class="na">application</span><span class="o">=</span><span class="s1">'bar'</span><span class="k">}</span><span class="s">param1=2&param2=A</span><span class="k">{/</span><span class="na">link</span><span class="k">}</span><span class="s">"</span><span class="nt">></span>Foo<span class="nt"></a></span> | |
1251 | </code></pre></div></div> | |
1252 | ||
1253 | <table> | |
1254 | <thead> | |
1255 | <tr> | |
1256 | <th>Attribute</th> | |
1257 | <th>Description</th> | |
1258 | </tr> | |
1259 | </thead> | |
1260 | <tbody> | |
1261 | <tr> | |
1262 | <td><code class="language-plaintext highlighter-rouge">application</code></td> | |
1263 | <td>abbreviation of the application the controller belongs to; <code class="language-plaintext highlighter-rouge">wcf</code> by default</td> | |
1264 | </tr> | |
1265 | <tr> | |
1266 | <td><code class="language-plaintext highlighter-rouge">controller</code></td> | |
1267 | <td>name of the controller; if not present, the landing page is linked in the frontend and the index page in the ACP</td> | |
1268 | </tr> | |
1269 | <tr> | |
1270 | <td><code class="language-plaintext highlighter-rouge">encode</code></td> | |
1271 | <td>if <code class="language-plaintext highlighter-rouge">true</code>, the generated link is passed through <code class="language-plaintext highlighter-rouge">wcf\util\StringUtil::encodeHTML()</code>; <code class="language-plaintext highlighter-rouge">true</code> by default</td> | |
1272 | </tr> | |
1273 | <tr> | |
1274 | <td><code class="language-plaintext highlighter-rouge">isEmail</code></td> | |
1275 | <td>sets <code class="language-plaintext highlighter-rouge">encode=false</code> and forces links to link to the frontend</td> | |
1276 | </tr> | |
1277 | </tbody> | |
1278 | </table> | |
1279 | ||
1280 | <p>Additional attributes are passed to <code class="language-plaintext highlighter-rouge">LinkHandler::getLink()</code>.</p> | |
1281 | ||
1282 | <h2 id="newlinetobreak"><code class="language-plaintext highlighter-rouge">newlineToBreak</code></h2> | |
1283 | ||
1284 | <p><code class="language-plaintext highlighter-rouge">newlineToBreak</code> transforms newlines into HTML <code class="language-plaintext highlighter-rouge"><br></code> elements after encoding the content via <code class="language-plaintext highlighter-rouge">wcf\util\StringUtil::encodeHTML()</code>.</p> | |
1285 | ||
1286 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nv">$foo</span><span class="o">|</span><span class="na">newlineToBreak</span><span class="k">}</span> | |
1287 | </code></pre></div></div> | |
1288 | ||
1289 | <h2 id="30-page"><span class="label label-info">3.0+</span> <code class="language-plaintext highlighter-rouge">page</code></h2> | |
1290 | ||
1291 | <p><code class="language-plaintext highlighter-rouge">page</code> generates an internal link to a CMS page.</p> | |
1292 | ||
1293 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="na">page</span><span class="k">}</span>com.woltlab.wcf.CookiePolicy<span class="k">{/</span><span class="na">page</span><span class="k">}</span> | |
1294 | ||
1295 | <span class="k">{</span><span class="na">page</span> <span class="na">pageID</span><span class="o">=</span><span class="m">1</span><span class="k">}{/</span><span class="na">page</span><span class="k">}</span> | |
1296 | ||
1297 | <span class="k">{</span><span class="na">page</span> <span class="na">language</span><span class="o">=</span><span class="s1">'de'</span><span class="k">}</span>com.woltlab.wcf.CookiePolicy<span class="k">{/</span><span class="na">page</span><span class="k">}</span> | |
1298 | ||
1299 | <span class="k">{</span><span class="na">page</span> <span class="na">languageID</span><span class="o">=</span><span class="m">2</span><span class="k">}</span>com.woltlab.wcf.CookiePolicy<span class="k">{/</span><span class="na">page</span><span class="k">}</span> | |
1300 | </code></pre></div></div> | |
1301 | ||
1302 | <table> | |
1303 | <thead> | |
1304 | <tr> | |
1305 | <th>Attribute</th> | |
1306 | <th>Description</th> | |
1307 | </tr> | |
1308 | </thead> | |
1309 | <tbody> | |
1310 | <tr> | |
1311 | <td><code class="language-plaintext highlighter-rouge">pageID</code></td> | |
1312 | <td>unique id of the page (cannot be used together with a page identifier as value)</td> | |
1313 | </tr> | |
1314 | <tr> | |
1315 | <td><code class="language-plaintext highlighter-rouge">languageID</code></td> | |
1316 | <td>id of the page language (cannot be used together with <code class="language-plaintext highlighter-rouge">language</code>)</td> | |
1317 | </tr> | |
1318 | <tr> | |
1319 | <td><code class="language-plaintext highlighter-rouge">language</code></td> | |
1320 | <td>language code of the page language (cannot be used together with <code class="language-plaintext highlighter-rouge">languageID</code>)</td> | |
1321 | </tr> | |
1322 | </tbody> | |
1323 | </table> | |
1324 | ||
1325 | <h2 id="pages"><code class="language-plaintext highlighter-rouge">pages</code></h2> | |
1326 | ||
1327 | <p><code class="language-plaintext highlighter-rouge">pages</code> generates a pagination.</p> | |
1328 | ||
1329 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="na">pages</span> <span class="na">controller</span><span class="o">=</span><span class="s1">'FooList'</span> <span class="na">link</span><span class="o">=</span><span class="s2">"pageNo=%d"</span> <span class="na">print</span><span class="o">=</span><span class="kc">true</span> <span class="nb">assign</span><span class="o">=</span><span class="na">pagesLinks</span><span class="k">}</span> <span class="c">{* prints pagination *}</span> | |
1330 | ||
1331 | {@$pagesLinks} <span class="c">{* prints same pagination again *}</span> | |
1332 | </code></pre></div></div> | |
1333 | ||
1334 | <table> | |
1335 | <thead> | |
1336 | <tr> | |
1337 | <th>Attribute</th> | |
1338 | <th>Description</th> | |
1339 | </tr> | |
1340 | </thead> | |
1341 | <tbody> | |
1342 | <tr> | |
1343 | <td><code class="language-plaintext highlighter-rouge">assign</code></td> | |
1344 | <td>optional name of the template variable the pagination is assigned to</td> | |
1345 | </tr> | |
1346 | <tr> | |
1347 | <td><code class="language-plaintext highlighter-rouge">controller</code></td> | |
1348 | <td>controller name of the generated links</td> | |
1349 | </tr> | |
1350 | <tr> | |
1351 | <td><code class="language-plaintext highlighter-rouge">link</code></td> | |
1352 | <td>additional link parameter where <code class="language-plaintext highlighter-rouge">%d</code> will be replaced with the relevant page number</td> | |
1353 | </tr> | |
1354 | <tr> | |
1355 | <td><code class="language-plaintext highlighter-rouge">pages</code></td> | |
1356 | <td>maximum number of of pages; by default, the template variable <code class="language-plaintext highlighter-rouge">$pages</code> is used</td> | |
1357 | </tr> | |
1358 | <tr> | |
1359 | <td><code class="language-plaintext highlighter-rouge">print</code></td> | |
1360 | <td>if <code class="language-plaintext highlighter-rouge">false</code> and <code class="language-plaintext highlighter-rouge">assign=true</code>, the pagination is not printed</td> | |
1361 | </tr> | |
1362 | <tr> | |
1363 | <td><code class="language-plaintext highlighter-rouge">application</code>, <code class="language-plaintext highlighter-rouge">id</code>, <code class="language-plaintext highlighter-rouge">object</code>, <code class="language-plaintext highlighter-rouge">title</code></td> | |
1364 | <td>additional parameters passed to <code class="language-plaintext highlighter-rouge">LinkHandler::getLink()</code> to generate page links</td> | |
1365 | </tr> | |
1366 | </tbody> | |
1367 | </table> | |
1368 | ||
1369 | <h2 id="plaintime"><code class="language-plaintext highlighter-rouge">plainTime</code></h2> | |
1370 | ||
1371 | <p><code class="language-plaintext highlighter-rouge">plainTime</code> formats a timestamp to include year, month, day, hour, and minutes. | |
1372 | The exact formatting depends on the current language (via the language items <code class="language-plaintext highlighter-rouge">wcf.date.dateTimeFormat</code>, <code class="language-plaintext highlighter-rouge">wcf.date.dateFormat</code>, and <code class="language-plaintext highlighter-rouge">wcf.date.timeFormat</code>).</p> | |
1373 | ||
1374 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nv">$timestamp</span><span class="o">|</span><span class="na">plainTime</span><span class="k">}</span> | |
1375 | </code></pre></div></div> | |
1376 | ||
1377 | <h2 id="53-plural"><span class="label label-info">5.3+</span> <code class="language-plaintext highlighter-rouge">plural</code></h2> | |
1378 | ||
1379 | <p><code class="language-plaintext highlighter-rouge">plural</code> allows to easily select the correct plural form of a phrase based on a given <code class="language-plaintext highlighter-rouge">value</code>. | |
1380 | The pluralization logic follows the <a href="https://unicode-org.github.io/cldr-staging/charts/37/supplemental/language_plural_rules.html">Unicode Language Plural Rules</a> for cardinal numbers.</p> | |
1381 | ||
1382 | <p>The <code class="language-plaintext highlighter-rouge">#</code> placeholder within the resulting phrase is replaced by the <code class="language-plaintext highlighter-rouge">value</code>. | |
1383 | It is automatically formatted using <code class="language-plaintext highlighter-rouge">StringUtil::formatNumeric</code>.</p> | |
1384 | ||
1385 | <p>English:</p> | |
1386 | ||
1387 | <p>Note the use of <code class="language-plaintext highlighter-rouge">1</code> if the number (<code class="language-plaintext highlighter-rouge">#</code>) is not used within the phrase and the use of <code class="language-plaintext highlighter-rouge">one</code> otherwise. | |
1388 | They are equivalent for English, but following this rule generalizes better to other languages, helping the translator.</p> | |
1389 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nb">assign</span> <span class="na">var</span><span class="o">=</span><span class="na">numberOfWorlds</span> <span class="na">value</span><span class="o">=</span><span class="m">2</span><span class="k">}</span> | |
1390 | <span class="nt"><h1></span>Hello <span class="k">{</span><span class="na">plural</span> <span class="na">value</span><span class="o">=</span><span class="nv">$numberOfWorlds</span> <span class="m">1</span><span class="o">=</span><span class="s1">'World'</span> <span class="na">other</span><span class="o">=</span><span class="s1">'Worlds'</span><span class="k">}</span>!<span class="nt"></h1></span> | |
1391 | <span class="nt"><p></span>There <span class="k">{</span><span class="na">plural</span> <span class="na">value</span><span class="o">=</span><span class="nv">$numberOfWorlds</span> <span class="m">1</span><span class="o">=</span><span class="s1">'is one world'</span> <span class="na">other</span><span class="o">=</span><span class="s1">'are # worlds'</span><span class="k">}</span>!<span class="nt"></p></span> | |
1392 | <span class="nt"><p></span>There <span class="k">{</span><span class="na">plural</span> <span class="na">value</span><span class="o">=</span><span class="nv">$numberOfWorlds</span> <span class="na">one</span><span class="o">=</span><span class="s1">'is # world'</span> <span class="na">other</span><span class="o">=</span><span class="s1">'are # worlds'</span><span class="k">}</span>!<span class="nt"></p></span> | |
1393 | </code></pre></div></div> | |
1394 | ||
1395 | <p>German:</p> | |
1396 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nb">assign</span> <span class="na">var</span><span class="o">=</span><span class="na">numberOfWorlds</span> <span class="na">value</span><span class="o">=</span><span class="m">2</span><span class="k">}</span> | |
1397 | <span class="nt"><h1></span>Hallo <span class="k">{</span><span class="na">plural</span> <span class="na">value</span><span class="o">=</span><span class="nv">$numberOfWorlds</span> <span class="m">1</span><span class="o">=</span><span class="s1">'Welt'</span> <span class="na">other</span><span class="o">=</span><span class="s1">'Welten'</span><span class="k">}</span>!<span class="nt"></h1></span> | |
1398 | <span class="nt"><p></span>Es gibt <span class="k">{</span><span class="na">plural</span> <span class="na">value</span><span class="o">=</span><span class="nv">$numberOfWorlds</span> <span class="m">1</span><span class="o">=</span><span class="s1">'eine Welt'</span> <span class="na">other</span><span class="o">=</span><span class="s1">'# Welten'</span><span class="k">}</span>!<span class="nt"></p></span> | |
1399 | <span class="nt"><p></span>Es gibt <span class="k">{</span><span class="na">plural</span> <span class="na">value</span><span class="o">=</span><span class="nv">$numberOfWorlds</span> <span class="na">one</span><span class="o">=</span><span class="s1">'# Welt'</span> <span class="na">other</span><span class="o">=</span><span class="s1">'# Welten'</span><span class="k">}</span>!<span class="nt"></p></span> | |
1400 | </code></pre></div></div> | |
1401 | ||
1402 | <p>Romanian:</p> | |
1403 | ||
1404 | <p>Note the additional use of <code class="language-plaintext highlighter-rouge">few</code> which is not required in English or German.</p> | |
1405 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nb">assign</span> <span class="na">var</span><span class="o">=</span><span class="na">numberOfWorlds</span> <span class="na">value</span><span class="o">=</span><span class="m">2</span><span class="k">}</span> | |
1406 | <span class="nt"><h1></span>Salut <span class="k">{</span><span class="na">plural</span> <span class="na">value</span><span class="o">=</span><span class="nv">$numberOfWorlds</span> <span class="m">1</span><span class="o">=</span><span class="s1">'lume'</span> <span class="na">other</span><span class="o">=</span><span class="s1">'lumi'</span><span class="k">}</span>!<span class="nt"></h1></span> | |
1407 | <span class="nt"><p></span>Există <span class="k">{</span><span class="na">plural</span> <span class="na">value</span><span class="o">=</span><span class="nv">$numberOfWorlds</span> <span class="m">1</span><span class="o">=</span><span class="s1">'o lume'</span> <span class="na">few</span><span class="o">=</span><span class="s1">'# lumi'</span> <span class="na">other</span><span class="o">=</span><span class="s1">'# de lumi'</span><span class="k">}</span>!<span class="nt"></p></span> | |
1408 | <span class="nt"><p></span>Există <span class="k">{</span><span class="na">plural</span> <span class="na">value</span><span class="o">=</span><span class="nv">$numberOfWorlds</span> <span class="na">one</span><span class="o">=</span><span class="s1">'# lume'</span> <span class="na">few</span><span class="o">=</span><span class="s1">'# lumi'</span> <span class="na">other</span><span class="o">=</span><span class="s1">'# de lumi'</span><span class="k">}</span>!<span class="nt"></p></span> | |
1409 | </code></pre></div></div> | |
1410 | ||
1411 | <p>Russian:</p> | |
1412 | ||
1413 | <p>Note the difference between <code class="language-plaintext highlighter-rouge">1</code> (exactly <code class="language-plaintext highlighter-rouge">1</code>) and <code class="language-plaintext highlighter-rouge">one</code> (ending in <code class="language-plaintext highlighter-rouge">1</code>, except ending in <code class="language-plaintext highlighter-rouge">11</code>).</p> | |
1414 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nb">assign</span> <span class="na">var</span><span class="o">=</span><span class="na">numberOfWorlds</span> <span class="na">value</span><span class="o">=</span><span class="m">2</span><span class="k">}</span> | |
1415 | <span class="nt"><h1></span>Привет <span class="k">{</span><span class="na">plural</span> <span class="na">value</span><span class="o">=</span><span class="nv">$numberOfWorld</span> <span class="m">1</span><span class="o">=</span><span class="s1">'мир'</span> <span class="na">other</span><span class="o">=</span><span class="s1">'миры'</span><span class="k">}</span>!<span class="nt"></h1></span> | |
1416 | <span class="nt"><p></span>Есть <span class="k">{</span><span class="na">plural</span> <span class="na">value</span><span class="o">=</span><span class="nv">$numberOfWorlds</span> <span class="m">1</span><span class="o">=</span><span class="s1">'мир'</span> <span class="na">one</span><span class="o">=</span><span class="s1">'# мир'</span> <span class="na">few</span><span class="o">=</span><span class="s1">'# мира'</span> <span class="na">many</span><span class="o">=</span><span class="s1">'# миров'</span> <span class="na">other</span><span class="o">=</span><span class="s1">'# миров'</span><span class="k">}</span>!<span class="nt"></p></span> | |
1417 | </code></pre></div></div> | |
1418 | ||
1419 | <table> | |
1420 | <thead> | |
1421 | <tr> | |
1422 | <th>Attribute</th> | |
1423 | <th>Description</th> | |
1424 | </tr> | |
1425 | </thead> | |
1426 | <tbody> | |
1427 | <tr> | |
1428 | <td>value</td> | |
1429 | <td>The value that is used to select the proper phrase.</td> | |
1430 | </tr> | |
1431 | <tr> | |
1432 | <td>other</td> | |
1433 | <td>The phrase that is used when no other selector matches.</td> | |
1434 | </tr> | |
1435 | <tr> | |
1436 | <td>Any Category Name</td> | |
1437 | <td>The phrase that is used when <code class="language-plaintext highlighter-rouge">value</code> belongs to the named category. Available categories depend on the language.</td> | |
1438 | </tr> | |
1439 | <tr> | |
1440 | <td>Any Integer</td> | |
1441 | <td>The phrase that is used when <code class="language-plaintext highlighter-rouge">value</code> is that exact integer.</td> | |
1442 | </tr> | |
1443 | </tbody> | |
1444 | </table> | |
1445 | ||
1446 | <h2 id="prepend"><code class="language-plaintext highlighter-rouge">prepend</code></h2> | |
1447 | ||
1448 | <p>If a string should be prepended to the value of a variable, <code class="language-plaintext highlighter-rouge">prepend</code> can be used:</p> | |
1449 | ||
1450 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nb">assign</span> <span class="na">var</span><span class="o">=</span><span class="na">templateVariable</span> <span class="na">value</span><span class="o">=</span><span class="s1">'newValue'</span><span class="k">}</span> | |
1451 | ||
1452 | <span class="k">{</span><span class="nv">$templateVariable</span><span class="k">}</span> <span class="c">{* prints 'newValue *}</span> | |
1453 | ||
1454 | <span class="k">{</span><span class="na">prepend</span> <span class="na">var</span><span class="o">=</span><span class="na">templateVariable</span> <span class="na">value</span><span class="o">=</span><span class="s1">'2'</span><span class="k">}</span> | |
1455 | ||
1456 | <span class="k">{</span><span class="nv">$templateVariable</span><span class="k">}</span> <span class="c">{* now prints '2newValue' *}</span> | |
1457 | </code></pre></div></div> | |
1458 | ||
1459 | <p>If the variables does not exist yet, <code class="language-plaintext highlighter-rouge">prepend</code> creates a new one with the given value. | |
1460 | If <code class="language-plaintext highlighter-rouge">prepend</code> is used on an array as the variable, the value is prepended to all elements of the array.</p> | |
1461 | ||
1462 | <h2 id="shortunit"><code class="language-plaintext highlighter-rouge">shortUnit</code></h2> | |
1463 | ||
1464 | <p><code class="language-plaintext highlighter-rouge">shortUnit</code> shortens numbers larger than 1000 by using unit suffixes:</p> | |
1465 | ||
1466 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="m">10000</span><span class="o">|</span><span class="na">shortUnit</span><span class="k">}</span> <span class="c">{* prints 10k *}</span> | |
1467 | <span class="k">{</span><span class="m">5400000</span><span class="o">|</span><span class="na">shortUnit</span><span class="k">}</span> <span class="c">{* prints 5.4M *}</span> | |
1468 | </code></pre></div></div> | |
1469 | ||
1470 | <h2 id="smallpages"><code class="language-plaintext highlighter-rouge">smallpages</code></h2> | |
1471 | ||
1472 | <p><code class="language-plaintext highlighter-rouge">smallpages</code> generates a smaller version of <code class="language-plaintext highlighter-rouge">pages</code> by using adding the <code class="language-plaintext highlighter-rouge">small</code> CSS class to the generated <code class="language-plaintext highlighter-rouge"><nav></code> element and only showing 7 instead of 9 links.</p> | |
1473 | ||
1474 | <h2 id="tablewordwrap"><code class="language-plaintext highlighter-rouge">tableWordwrap</code></h2> | |
1475 | ||
1476 | <p><code class="language-plaintext highlighter-rouge">tableWordwrap</code> inserts zero width spaces every 30 characters in words longer than 30 characters.</p> | |
1477 | ||
1478 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nv">$foo</span><span class="o">|</span><span class="na">tableWordwrap</span><span class="k">}</span> | |
1479 | </code></pre></div></div> | |
1480 | ||
1481 | <h2 id="time"><code class="language-plaintext highlighter-rouge">time</code></h2> | |
1482 | ||
1483 | <p><code class="language-plaintext highlighter-rouge">time</code> generates an HTML <code class="language-plaintext highlighter-rouge">time</code> elements based on a timestamp that shows a relative time or the absolute time if the timestamp more than six days ago.</p> | |
1484 | ||
1485 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nv">$timestamp</span><span class="o">|</span><span class="na">time</span><span class="k">}</span> <span class="c">{* prints a '<time>' element *}</span> | |
1486 | </code></pre></div></div> | |
1487 | ||
1488 | <h2 id="truncate"><code class="language-plaintext highlighter-rouge">truncate</code></h2> | |
1489 | ||
1490 | <p><code class="language-plaintext highlighter-rouge">truncate</code> truncates a long string into a shorter one:</p> | |
1491 | ||
1492 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="nv">$foo</span><span class="o">|</span><span class="nb">truncate</span><span class="o">:</span><span class="m">35</span><span class="k">}</span> | |
1493 | ||
1494 | <span class="k">{</span><span class="nv">$foo</span><span class="o">|</span><span class="nb">truncate</span><span class="o">:</span><span class="m">35</span><span class="o">:</span><span class="s1">'_'</span><span class="o">:</span><span class="kc">true</span><span class="k">}</span> | |
1495 | </code></pre></div></div> | |
1496 | ||
1497 | <table> | |
1498 | <thead> | |
1499 | <tr> | |
1500 | <th>Parameter Number</th> | |
1501 | <th>Description</th> | |
1502 | </tr> | |
1503 | </thead> | |
1504 | <tbody> | |
1505 | <tr> | |
1506 | <td>0</td> | |
1507 | <td>truncated string</td> | |
1508 | </tr> | |
1509 | <tr> | |
1510 | <td>1</td> | |
1511 | <td>truncated length; <code class="language-plaintext highlighter-rouge">80</code> by default</td> | |
1512 | </tr> | |
1513 | <tr> | |
1514 | <td>2</td> | |
1515 | <td>ellipsis symbol; <code class="language-plaintext highlighter-rouge">wcf\util\StringUtil::HELLIP</code> by default</td> | |
1516 | </tr> | |
1517 | <tr> | |
1518 | <td>3</td> | |
1519 | <td>if <code class="language-plaintext highlighter-rouge">true</code>, words can be broken up in the middle; <code class="language-plaintext highlighter-rouge">false</code> by default</td> | |
1520 | </tr> | |
1521 | </tbody> | |
1522 | </table> | |
1523 | ||
1524 | <h2 id="53-user"><span class="label label-info">5.3+</span> <code class="language-plaintext highlighter-rouge">user</code></h2> | |
1525 | ||
1526 | <p><code class="language-plaintext highlighter-rouge">user</code> generates links to user profiles. | |
1527 | The mandatory <code class="language-plaintext highlighter-rouge">object</code> parameter requires an instances of <code class="language-plaintext highlighter-rouge">UserProfile</code>. | |
1528 | The optional <code class="language-plaintext highlighter-rouge">type</code> parameter is responsible for what the generated link contains:</p> | |
1529 | ||
1530 | <ul> | |
1531 | <li><code class="language-plaintext highlighter-rouge">type='default'</code> (also applies if no <code class="language-plaintext highlighter-rouge">type</code> is given) outputs the formatted username relying on the “User Marking” setting of the relevant user group. | |
1532 | Additionally, the user popover card will be shown when hovering over the generated link.</li> | |
1533 | <li><code class="language-plaintext highlighter-rouge">type='plain'</code> outputs the username without additional formatting.</li> | |
1534 | <li><code class="language-plaintext highlighter-rouge">type='avatar(\d+)'</code> outputs the user’s avatar in the specified size, i.e., <code class="language-plaintext highlighter-rouge">avatar48</code> outputs the avatar with a width and height of 48 pixels.</li> | |
1535 | </ul> | |
1536 | ||
1537 | <p>The last special attribute is <code class="language-plaintext highlighter-rouge">append</code> whose contents are appended to the <code class="language-plaintext highlighter-rouge">href</code> attribute of the generated anchor element.</p> | |
1538 | ||
1539 | <p>All of the other attributes matching <code class="language-plaintext highlighter-rouge">~^[a-z]+([A-z]+)+$~</code>, except for <code class="language-plaintext highlighter-rouge">href</code> which may not be added, are added as attributes to the anchor element.</p> | |
1540 | ||
1541 | <p>Examples:</p> | |
1542 | ||
1543 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="na">user</span> <span class="na">object</span><span class="o">=</span><span class="nv">$user</span><span class="k">}</span> | |
1544 | </code></pre></div></div> | |
1545 | ||
1546 | <p>generates</p> | |
1547 | ||
1548 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt"><a</span> <span class="na">href=</span><span class="s">"</span><span class="k">{</span><span class="nv">$user</span><span class="o">-></span><span class="na">getLink</span><span class="o">()</span><span class="k">}</span><span class="s">"</span> <span class="na">data-object-id=</span><span class="s">"</span><span class="k">{</span><span class="nv">$user</span><span class="o">-></span><span class="na">userID</span><span class="k">}</span><span class="s">"</span> <span class="na">class=</span><span class="s">"userLink"</span><span class="nt">></span>{@$user->getFormattedUsername()}<span class="nt"></a></span> | |
1549 | </code></pre></div></div> | |
1550 | ||
1551 | <p>and</p> | |
1552 | ||
1553 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">{</span><span class="na">user</span> <span class="na">object</span><span class="o">=</span><span class="nv">$user</span> <span class="na">type</span><span class="o">=</span><span class="s1">'avatar48'</span> <span class="na">foo</span><span class="o">=</span><span class="s1">'bar'</span><span class="k">}</span> | |
1554 | </code></pre></div></div> | |
1555 | ||
1556 | <p>generates</p> | |
1557 | ||
1558 | <div class="language-smarty highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt"><a</span> <span class="na">href=</span><span class="s">"</span><span class="k">{</span><span class="nv">$user</span><span class="o">-></span><span class="na">getLink</span><span class="o">()</span><span class="k">}</span><span class="s">"</span> <span class="na">foo=</span><span class="s">"bar"</span><span class="nt">></span>{@$object->getAvatar()->getImageTag(48)}<span class="nt"></a></span> | |
1559 | </code></pre></div></div> | |
1560 | ||
1561 | ||
1562 | <div class="tags"> | |
1563 | ||
1564 | </div> | |
1565 | ||
1566 | ||
1567 | ||
1568 | </div> | |
1569 | ||
1570 | </div> | |
1571 | </div> | |
1572 | </div> | |
1573 | ||
1574 | <div class="footerBox"> | |
1575 | <div class="container"> | |
1576 | <div class="footerBoxLeft"> | |
1577 | ||
1578 | <a target="_blank" href="https://github.com/woltlab/woltlab.github.io/blob/master/pages/view/view_template-plugins.md" class="btn btn-default githubEditButton no_icon" role="button"><i class="fa fa-github fa-lg"></i> Edit on GitHub</a> | |
e2f8eee7 | 1579 | <p>Site last generated: Mar 5, 2021</p> |
d9cdc0cc TD |
1580 | </div> |
1581 | <div class="footerBoxRight"> | |
e2f8eee7 | 1582 | <a class="no_icon" href="https://www.woltlab.com"><img src="https://docs.woltlab.com/5.3/images/woltlab-black.png" srcset="https://docs.woltlab.com/5.3/images/woltlab-black@2x.png 2x" height="40" width="204" alt=""></a> |
d9cdc0cc TD |
1583 | </div> |
1584 | </div> | |
1585 | </div> | |
1586 | ||
1587 | <div class="pageFooter"> | |
1588 | <div class="container"> | |
1589 | © 2001 ‐ 2021 <a class="no_icon" href="https://www.woltlab.com">WoltLab GmbH</a>. All rights reserved. | <a class="no_icon" href="https://www.woltlab.com/legal-notice/">Legal Notice</a> | <a class="no_icon" href="https://www.woltlab.com/privacy-policy/">Privacy Policy</a> | |
1590 | </div> | |
1591 | </div> | |
1592 | </body> | |
1593 | ||
1594 | </html> |