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>Apps for WoltLab Suite | 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="Apps for WoltLab Suite">{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 class="active" 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 = ''; | |
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">Apps for WoltLab Suite</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="introduction">Introduction</h2> | |
631 | ||
632 | <p>Apps are among the most powerful components in WoltLab Suite. Unlike plugins | |
633 | that extend an existing functionality and pages, apps have their own frontend | |
634 | with a dedicated namespace, database table prefixes and template locations.</p> | |
635 | ||
636 | <p>However, apps are meant to be a logical (and to some extent physical) separation | |
637 | from other parts of the framework, including other installed apps. They offer | |
638 | an additional layer of isolation and enable you to re-use class and template | |
639 | names that are already in use by the Core itself.</p> | |
640 | ||
641 | <p>If you’ve come here, thinking about the question if your next package should be | |
642 | an app instead of a regular plugin, the result is almost always: <em>No.</em></p> | |
643 | ||
644 | <h2 id="differences-to-plugins">Differences to Plugins</h2> | |
645 | ||
646 | <p>Apps do offer a couple of unique features that are not available to plugins and | |
647 | there are valid reasons to use one instead of a plugin, but they also increase | |
648 | both the code and system complexity. There is a performance penalty for each | |
649 | installed app, regardless if it is actively used in a request or not, simplying | |
650 | being there forces the Core to include it in many places, for example, class | |
651 | resolution or even simple tasks such as constructing a link.</p> | |
652 | ||
653 | <h3 id="unique-namespace">Unique Namespace</h3> | |
654 | ||
655 | <p>Each app has its own unique namespace that is entirely separated from the Core | |
656 | and any other installed apps. The namespace is derived from the last part of the | |
657 | package identifier, for example, <code class="language-plaintext highlighter-rouge">com.example.foo</code> will yield the namespace <code class="language-plaintext highlighter-rouge">foo</code>.</p> | |
658 | ||
659 | <p>The namespace is always relative to the installation directory of the app, it | |
660 | doesn’t matter if the app is installed on <code class="language-plaintext highlighter-rouge">example.com/foo/</code> or in <code class="language-plaintext highlighter-rouge">example.com/bar/</code>, | |
661 | the namespace will always resolve to the right directory.</p> | |
662 | ||
663 | <p>This app namespace is also used for ACP templates, frontend templates and files:</p> | |
664 | ||
665 | <div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"><!-- somewhere in the package.xml --></span> | |
666 | <span class="nt"><instructions</span> <span class="na">type=</span><span class="s">"file"</span> <span class="na">application=</span><span class="s">"foo"</span> <span class="nt">/></span> | |
667 | </code></pre></div></div> | |
668 | ||
669 | <h3 id="unique-database-table-prefix">Unique Database Table Prefix</h3> | |
670 | ||
671 | <p>All database tables make use of a generic prefix that is derived from one of the | |
672 | installed apps, including <code class="language-plaintext highlighter-rouge">wcf</code> which resolves to the Core itself. Following the | |
673 | aforementioned example, the new prefix <code class="language-plaintext highlighter-rouge">fooN_</code> will be automatically registered | |
674 | and recognized in any generated statement.</p> | |
675 | ||
676 | <p>Any <code class="language-plaintext highlighter-rouge">DatabaseObject</code> that uses the app’s namespace is automatically assumed to | |
677 | use the app’s database prefix. For instance, <code class="language-plaintext highlighter-rouge">foo\data\bar\Bar</code> is implicitly | |
678 | mapped to the database table <code class="language-plaintext highlighter-rouge">fooN_bar</code>.</p> | |
679 | ||
680 | <p>The app prefix is recognized in SQL-PIPs and statements that reference one of | |
681 | its database tables are automatically rewritten to use the Core’s instance number.</p> | |
682 | ||
683 | <h3 id="separate-domain-and-path-configuration">Separate Domain and Path Configuration</h3> | |
684 | ||
685 | <p>Any controller that is provided by a plugin is served from the configured domain | |
686 | and path of the corresponding app, such as plugins for the Core are always | |
687 | served from the Core’s directory. Apps are different and use their own domain | |
688 | and/or path to present their content, additionally, this allows the app to re-use | |
689 | a controller name that is already provided by the Core or any other app itself.</p> | |
690 | ||
691 | <h2 id="creating-an-app">Creating an App</h2> | |
692 | ||
693 | <div class="bs-callout bs-callout-danger">This is a non-reversible operation! Once a package has been installed, its type cannot be changed without uninstalling and reinstalling the entire package, an app will always be an app and vice versa.</div> | |
694 | ||
695 | <h3 id="packagexml"><code class="language-plaintext highlighter-rouge">package.xml</code></h3> | |
696 | ||
697 | <p>The <code class="language-plaintext highlighter-rouge">package.xml</code> supports two additional elements in the <code class="language-plaintext highlighter-rouge"><packageinformation></code> | |
698 | block that are unique to applications.</p> | |
699 | ||
700 | <h4 id="isapplication1isapplication"><code class="language-plaintext highlighter-rouge"><isapplication>1</isapplication></code></h4> | |
701 | ||
702 | <p>This element is responsible to flag a package as an app.</p> | |
703 | ||
704 | <h4 id="applicationdirectoryexampleapplicationdirectory"><code class="language-plaintext highlighter-rouge"><applicationdirectory>example</applicationdirectory></code></h4> | |
705 | ||
706 | <p>Sets the suggested name of the application directory when installing it, the | |
707 | path result in <code class="language-plaintext highlighter-rouge"><path-to-the-core>/example/</code>. If you leave this element out, | |
708 | the app identifier (<code class="language-plaintext highlighter-rouge">com.example.foo -> foo</code>) will be used instead.</p> | |
709 | ||
710 | <h3 id="minimum-required-files">Minimum Required Files</h3> | |
711 | ||
712 | <p>An example project with the <a href="https://github.com/WoltLab/woltlab.github.io/tree/master/_includes/tutorial/basic-app/">source code can be found on GitHub</a>, | |
713 | it includes everything that is required for a basic app.</p> | |
714 | ||
715 | ||
716 | ||
717 | <div class="tags"> | |
718 | ||
719 | </div> | |
720 | ||
721 | ||
722 | ||
723 | </div> | |
724 | ||
725 | </div> | |
726 | </div> | |
727 | </div> | |
728 | ||
729 | <div class="footerBox"> | |
730 | <div class="container"> | |
731 | <div class="footerBoxLeft"> | |
732 | ||
733 | <a target="_blank" href="https://github.com/woltlab/woltlab.github.io/blob/master/pages/php/php_apps.md" class="btn btn-default githubEditButton no_icon" role="button"><i class="fa fa-github fa-lg"></i> Edit on GitHub</a> | |
e2f8eee7 | 734 | <p>Site last generated: Mar 5, 2021</p> |
d9cdc0cc TD |
735 | </div> |
736 | <div class="footerBoxRight"> | |
e2f8eee7 | 737 | <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 |
738 | </div> |
739 | </div> | |
740 | </div> | |
741 | ||
742 | <div class="pageFooter"> | |
743 | <div class="container"> | |
744 | © 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> | |
745 | </div> | |
746 | </div> | |
747 | </body> | |
748 | ||
749 | </html> |