]> git.mxchange.org Git - friendica.git/blob - doc/de/Addons.md
Merge pull request #10614 from tobiasd/20210818-de
[friendica.git] / doc / de / Addons.md
1 Friendica Addon/Entwicklung
2 ==============
3
4 * [Zur Startseite der Hilfe](help)
5
6 Bitte schau dir das Beispiel-Addon "randplace" für ein funktionierendes Beispiel für manche der hier aufgeführten Funktionen an.
7 Das Facebook-Addon bietet ein Beispiel dafür, die "addon"- und "module"-Funktion gemeinsam zu integrieren.
8 Addons arbeiten, indem sie Event Hooks abfangen.
9 Module arbeiten, indem bestimmte Seitenanfragen (durch den URL-Pfad) abgefangen werden.
10
11 Addon-Namen können keine Leerstellen oder andere Interpunktionen enthalten und werden als Datei- und Funktionsnamen genutzt.
12 Du kannst einen lesbaren Namen im Kommentarblock eintragen.
13 Jedes Addon muss beides beinhalten - eine Installations- und eine Deinstallationsfunktion, die auf dem Addon-Namen basieren; z.B. "addon1name_install()".
14 Diese beiden Funktionen haben keine Argumente und sind dafür verantwortlich, Event Hooks zu registrieren und abzumelden (unregistering), die dein Addon benötigt.
15 Die Installations- und Deinstallationsfunktionfunktionen werden auch ausgeführt (z.B. neu installiert), wenn sich das Addon nach der Installation ändert - somit sollte deine Deinstallationsfunktion keine Daten zerstört und deine Installationsfunktion sollte bestehende Daten berücksichtigen.
16 Zukünftige Extensions werden möglicherweise "Setup" und "Entfernen" anbieten.
17
18 Addons sollten einen Kommentarblock mit den folgenden vier Parametern enthalten:
19
20     /*
21      * Name: My Great Addon
22      * Description: This is what my addon does. It's really cool.
23      * Version: 1.0
24      * Author: John Q. Public <john@myfriendicasite.com>
25      */
26
27 Registriere deine Addon-Hooks während der Installation.
28
29     \Friendica\Core\Hook::register($hookname, $file, $function);
30
31 $hookname ist ein String und entspricht einem bekannten Friendica-Hook.
32
33 $file steht für den Pfadnamen, der relativ zum Top-Level-Friendicaverzeichnis liegt.
34 Das *sollte* "addon/addon_name/addon_name.php' sein.
35
36 $function ist ein String und der Name der Funktion, die ausgeführt wird, wenn der Hook aufgerufen wird.
37
38 Argumente
39 ---
40
41 Deine Hook-Callback-Funktion wird mit mindestens einem und bis zu zwei Argumenten aufgerufen
42
43     function myhook_function(App $a, &$b) {
44
45     }
46
47 Wenn du Änderungen an den aufgerufenen Daten vornehmen willst, musst du diese als Referenzvariable (mit "&") während der Funktionsdeklaration deklarieren.
48
49 $a ist die Friendica "App"-Klasse, die eine Menge an Informationen über den aktuellen Friendica-Status beinhaltet, u.a. welche Module genutzt werden, Konfigurationsinformationen, Inhalte der Seite zum Zeitpunkt des Hook-Aufrufs.
50 Es ist empfohlen, diese Funktion "$a" zu nennen, um seine Nutzung an den Gebrauch an anderer Stelle anzugleichen.
51
52 $b kann frei benannt werden.
53 Diese Information ist speziell auf den Hook bezogen, der aktuell bearbeitet wird, und beinhaltet normalerweise Daten, die du sofort nutzen, anzeigen oder bearbeiten kannst.
54 Achte darauf, diese mit "&" zu deklarieren, wenn du sie bearbeiten willst.
55
56
57 Module
58 ---
59
60 Addons können auch als "Module" agieren und alle Seitenanfragen für eine bestimte URL abfangen.
61 Um ein Addon als Modul zu nutzen, ist es nötig, die Funktion "addon_name_module()" zu definieren, die keine Argumente benötigt und nichts weiter machen muss.
62
63 Wenn diese Funktion existiert, wirst du nun alle Seitenanfragen für "http://example.com/addon_name" erhalten - mit allen URL-Komponenten als zusätzliche Argumente.
64 Diese werden in das App\Arguments Objekt geparst.
65 So würde `http://example.com/addon/arg1/arg2` dies ergeben:
66 ```php
67 DI::args()->getArgc(); // = 3
68 DI::args()->get(0); // = 'addon'
69 DI::args()->get(1); // = 'arg1'
70 DI::args()->get(2); // = 'arg2'
71 ```
72
73 Deine Modulfunktionen umfassen oft die Funktion addon_name_content(App $a), welche den Seiteninhalt definiert und zurückgibt.
74 Sie können auch addon_name_post(App $a) umfassen, welches vor der content-Funktion aufgerufen wird und normalerweise die Resultate der POST-Formulare handhabt.
75 Du kannst ebenso addon_name_init(App $a) nutzen, was oft frühzeitig aufgerufen wird und das Modul initialisert.
76
77
78 Derzeitige Hooks
79 ---
80
81 **'authenticate'** - wird aufgerufen, wenn sich der User einloggt.
82     $b ist ein Array
83         'username' => der übertragene Nutzername
84         'password' => das übertragene Passwort
85         'authenticated' => setze das auf einen anderen Wert als "0", damit der User sich authentifiziert
86         'user_record' => die erfolgreiche Authentifizierung muss auch einen gültigen Nutzereintrag aus der Datenbank zurückgeben
87
88 **'logged_in'** - wird aufgerufen, sobald ein Nutzer sich erfolgreich angemeldet hat.
89     $b beinhaltet den $a->Nutzer-Array
90
91
92 **'display_item'** - wird aufgerufen, wenn ein Beitrag für die Anzeige formatiert wird.
93     $b ist ein Array
94         'item' => Die Item-Details (Array), die von der Datenbank ausgegeben werden
95         'output' => Die HTML-Ausgabe (String) des Items, bevor es zur Seite hinzugefügt wird
96
97 **'post_local'** - wird aufgerufen, wenn der Statusbeitrag oder ein Kommentar im lokalen System eingetragen wird.
98     $b ist das Item-Array der Information, die in der Datenbank hinterlegt wird.
99         {Bitte beachte: der Seiteninhalt ist bbcode - nicht HTML)
100
101 **'post_local_end'** - wird aufgerufen, wenn ein lokaler Statusbeitrag oder Kommentar im lokalen System gespeichert wird.
102     $b ist das Item-Array einer Information, die gerade in der Datenbank gespeichert wurden.
103         {Bitte beachte: der Seiteninhalt ist bbcode - nicht HTML)
104
105 **'post_remote'** - wird aufgerufen, wenn ein Beitrag aus einer anderen Quelle empfangen wird. Dies kann auch genutzt werden, um lokale Aktivitäten oder systemgenerierte Nachrichten zu veröffentlichen/posten.
106     $b ist das Item-Array einer Information, die in der Datenbank und im Item gespeichert ist.
107         {Bitte beachte: der Seiteninhalt ist bbcode - nicht HTML)
108
109 **'settings_form'** - wird aufgerufen, wenn die HTML-Ausgabe für die Einstellungsseite generiert wird.
110     $b ist die HTML-Ausgabe (String) der Einstellungsseite vor dem finalen "</form>"-Tag.
111
112 **'settings_post'** - wird aufgerufen, wenn die Einstellungsseiten geladen werden.
113     $b ist der $_POST-Array
114
115 **'addon_settings'** - wird aufgerufen, wenn die HTML-Ausgabe der Addon-Einstellungsseite generiert wird.
116     $b ist die HTML-Ausgabe (String) der Addon-Einstellungsseite vor dem finalen "</form>"-Tag.
117
118 **'addon_settings_post'** - wird aufgerufen, wenn die Addon-Einstellungsseite geladen wird.
119     $b ist der $_POST-Array
120
121 **'profile_post'** - wird aufgerufen, wenn die Profilseite angezeigt wird.
122     $b ist der $_POST-Array
123
124 **'profile_edit'** - wird aufgerufen, bevor die Profil-Bearbeitungsseite angezeigt wird.
125     $b ist ein Array
126         'profile' => Profileintrag (Array) aus der Datenbank
127         'entry' => die HTML-Ausgabe (string) des generierten Eintrags
128
129 **'profile_advanced'** - wird aufgerufen, wenn die HTML-Ausgabe für das "Advanced profile" generiert wird; stimmt mit dem "Profil"-Tab auf der Profilseite der Nutzer überein.
130     $b ist die HTML-Ausgabe (String) des erstellten Profils
131     (Die Details des Profil-Arrays sind in $a->profile)
132
133 **'directory_item'** - wird von der Verzeichnisseite aufgerufen, wenn ein Item für die Anzeige formatiert wird.
134     $b ist ein Array
135         'contact' => Kontakteintrag (Array) einer Person aus der Datenbank
136         'entry' => die HTML-Ausgabe (String) des generierten Eintrags
137
138 **'profile_sidebar_enter'** - wird aufgerufen, bevor die Sidebar "Kurzprofil" einer Seite erstellt wird.
139     $b ist der Profil-Array einer Person
140
141 **'profile_sidebar'** - wird aufgerufen, wenn die Sidebar "Kurzprofil" einer Seite erstellt wird.
142     $b ist ein Array
143         'profile' => Kontakteintrag (Array) einer Person aus der Datenbank
144         'entry' => die HTML-Ausgabe (String) des generierten Eintrags
145
146 **'contact_block_end'** - wird aufgerufen, wenn der Block "Kontakte/Freunde" der Profil-Sidebar komplett formatiert wurde.
147     $b ist ein Array
148           'contacts' => Array von "contacts"
149           'output' => die HTML-Ausgabe (String) des Kontaktblocks
150
151 **'bbcode'** - wird während der Umwandlung von bbcode auf HTML aufgerufen.
152     $b ist der konvertierte Text (String)
153
154 **'html2bbcode'** - wird während der Umwandlung von HTML zu bbcode aufgerufen (z.B. bei Nachrichtenbeiträgen).
155     $b ist der konvertierte Text (String)
156
157 **'page_header'** - wird aufgerufen, nachdem der Bereich der Seitennavigation geladen wurde.
158     $b ist die HTML-Ausgabe (String) der "nav"-Region
159
160 **'personal_xrd'** - wird aufgerufen, bevor die Ausgabe der persönlichen XRD-Datei erzeugt wird.
161     $b ist ein Array
162         'user' => die hinterlegten Einträge der Person
163         'xml' => die komplette XML-Datei die ausgegeben wird
164
165 **'home_content'** - wird aufgerufen, bevor die Ausgabe des Homepage-Inhalts erstellt wird; wird nicht eingeloggten Nutzern angezeigt.
166     $b ist die HTML-Ausgabe (String) der Auswahlregion
167
168 **'contact_edit'** - wird aufgerufen, wenn die Kontaktdetails vom Nutzer auf der "Kontakte"-Seite bearbeitet werden.
169     $b ist ein Array
170         'contact' => Kontakteintrag (Array) des abgezielten Kontakts
171         'output' => die HTML-Ausgabe (String) der "Kontakt bearbeiten"-Seite
172
173 **'contact_edit_post'** - wird aufgerufen, wenn die "Kontakt bearbeiten"-Seite ausgegeben wird.
174     $b ist der $_POST-Array
175
176 **'init_1'** - wird aufgerufen, kurz nachdem die Datenbank vor Beginn der Sitzung geöffnet wird.
177     $b wird nicht genutzt
178
179 **'page_end'** - wird aufgerufen, nachdem die Funktion des HTML-Inhalts komplett abgeschlossen ist.
180     $b ist die HTML-Ausgabe (String) vom Inhalt-"div"
181
182 **'avatar_lookup'** - wird aufgerufen, wenn der Avatar geladen wird.
183     $b ist ein Array
184         'size' => Größe des Avatars, der geladen wird
185         'email' => Email-Adresse, um nach dem Avatar zu suchen
186         'url' => generierte URL (String) des Avatars
187
188 **'nav_info'**
189  - wird aufgerufen nachdem in include/nav,php der Inhalt des Navigations Menüs erzeugt wurde.
190  - $b ist ein Array, das $nav wiederspiegelt.
191
192 Komplette Liste der Hook-Callbacks
193 ---
194
195 Eine komplette Liste aller Hook-Callbacks mit den zugehörigen Dateien (am 01-Apr-2018 generiert): Bitte schau in die Quellcodes für Details zu Hooks, die oben nicht dokumentiert sind.
196
197 ### index.php
198
199     Hook::callAll('init_1');
200     Hook::callAll('app_menu', $arr);
201     Hook::callAll('page_content_top', DI::page()['content']);
202     Hook::callAll($a->module.'_mod_init', $placeholder);
203     Hook::callAll($a->module.'_mod_init', $placeholder);
204     Hook::callAll($a->module.'_mod_post', $_POST);
205     Hook::callAll($a->module.'_mod_afterpost', $placeholder);
206     Hook::callAll($a->module.'_mod_content', $arr);
207     Hook::callAll($a->module.'_mod_aftercontent', $arr);
208     Hook::callAll('page_end', DI::page()['content']);
209
210 ### include/api.php
211
212     Hook::callAll('logged_in', $a->user);
213     Hook::callAll('authenticate', $addon_auth);
214     Hook::callAll('logged_in', $a->user);
215
216 ### include/enotify.php
217
218     Hook::callAll('enotify', $h);
219     Hook::callAll('enotify_store', $datarray);
220     Hook::callAll('enotify_mail', $datarray);
221     Hook::callAll('check_item_notification', $notification_data);
222
223 ### include/conversation.php
224
225     Hook::callAll('conversation_start', $cb);
226     Hook::callAll('render_location', $locate);
227     Hook::callAll('display_item', $arr);
228     Hook::callAll('display_item', $arr);
229     Hook::callAll('item_photo_menu', $args);
230     Hook::callAll('jot_tool', $jotplugins);
231
232 ### mod/directory.php
233
234     Hook::callAll('directory_item', $arr);
235
236 ### mod/xrd.php
237
238     Hook::callAll('personal_xrd', $arr);
239
240 ### mod/ping.php
241
242     Hook::callAll('network_ping', $arr);
243
244 ### mod/parse_url.php
245
246     Hook::callAll("parse_link", $arr);
247
248 ### src/Module/Delegation.php
249
250     Hook::callAll('home_init', $ret);
251
252 ### mod/acl.php
253
254     Hook::callAll('acl_lookup_end', $results);
255
256 ### mod/network.php
257
258     Hook::callAll('network_content_init', $arr);
259     Hook::callAll('network_tabs', $arr);
260
261 ### mod/friendica.php
262
263     Hook::callAll('about_hook', $o);
264
265 ### mod/profiles.php
266
267     Hook::callAll('profile_post', $_POST);
268     Hook::callAll('profile_edit', $arr);
269
270 ### mod/settings.php
271
272     Hook::callAll('addon_settings_post', $_POST);
273     Hook::callAll('connector_settings_post', $_POST);
274     Hook::callAll('display_settings_post', $_POST);
275     Hook::callAll('settings_post', $_POST);
276     Hook::callAll('addon_settings', $settings_addons);
277     Hook::callAll('connector_settings', $settings_connectors);
278     Hook::callAll('display_settings', $o);
279     Hook::callAll('settings_form', $o);
280
281 ### mod/photos.php
282
283     Hook::callAll('photo_post_init', $_POST);
284     Hook::callAll('photo_post_file', $ret);
285     Hook::callAll('photo_post_end', $foo);
286     Hook::callAll('photo_post_end', $foo);
287     Hook::callAll('photo_post_end', $foo);
288     Hook::callAll('photo_post_end', $foo);
289     Hook::callAll('photo_post_end', intval($item_id));
290     Hook::callAll('photo_upload_form', $ret);
291
292 ### mod/profile.php
293
294     Hook::callAll('profile_advanced', $o);
295
296 ### mod/home.php
297
298     Hook::callAll('home_init', $ret);
299     Hook::callAll("home_content", $content);
300
301 ### mod/poke.php
302
303     Hook::callAll('post_local_end', $arr);
304
305 ### mod/contacts.php
306
307     Hook::callAll('contact_edit_post', $_POST);
308     Hook::callAll('contact_edit', $arr);
309
310 ### mod/tagger.php
311
312     Hook::callAll('post_local_end', $arr);
313
314 ### mod/uexport.php
315
316     Hook::callAll('uexport_options', $options);
317
318 ### mod/register.php
319
320     Hook::callAll('register_post', $arr);
321     Hook::callAll('register_form', $arr);
322
323 ### mod/item.php
324
325     Hook::callAll('post_local_start', $_REQUEST);
326     Hook::callAll('post_local', $datarray);
327     Hook::callAll('post_local_end', $datarray);
328
329 ### mod/editpost.php
330
331     Hook::callAll('jot_tool', $jotplugins);
332
333 ### src/Network/FKOAuth1.php
334
335     Hook::callAll('logged_in', $a->user);
336
337 ### src/Render/FriendicaSmartyEngine.php
338
339     Hook::callAll("template_vars", $arr);
340
341 ### src/Model/Item.php
342
343     Hook::callAll('post_local', $item);
344     Hook::callAll('post_remote', $item);
345     Hook::callAll('post_local_end', $posted_item);
346     Hook::callAll('post_remote_end', $posted_item);
347     Hook::callAll('tagged', $arr);
348     Hook::callAll('post_local_end', $new_item);
349     Hook::callAll('put_item_in_cache', $hook_data);
350     Hook::callAll('prepare_body_init', $item);
351     Hook::callAll('prepare_body_content_filter', $hook_data);
352     Hook::callAll('prepare_body', $hook_data);
353     Hook::callAll('prepare_body_final', $hook_data);
354
355 ### src/Model/Contact.php
356
357     Hook::callAll('contact_photo_menu', $args);
358     Hook::callAll('follow', $arr);
359
360 ### src/Model/Profile.php
361
362     Hook::callAll('profile_sidebar_enter', $profile);
363     Hook::callAll('profile_sidebar', $arr);
364     Hook::callAll('profile_tabs', $arr);
365     Hook::callAll('zrl_init', $arr);
366
367 ### src/Model/Event.php
368
369     Hook::callAll('event_updated', $event['id']);
370     Hook::callAll("event_created", $event['id']);
371
372 ### src/Model/User.php
373
374     Hook::callAll('register_account', $uid);
375     Hook::callAll('remove_user', $user);
376     
377 ### src/Content/ContactBlock.php
378
379     Hook::callAll('contact_block_end', $arr);
380
381 ### src/Content/Text/BBCode.php
382
383     Hook::callAll('bbcode', $text);
384     Hook::callAll('bb2diaspora', $text);
385
386 ### src/Content/Text/HTML.php
387
388     Hook::callAll('html2bbcode', $message);
389
390 ### src/Content/Smilies.php
391
392     Hook::callAll('smilie', $params);
393
394 ### src/Content/Feature.php
395
396     Hook::callAll('isEnabled', $arr);
397     Hook::callAll('get', $arr);
398
399 ### src/Content/ContactSelector.php
400
401     Hook::callAll('network_to_name', $nets);
402
403 ### src/Content/OEmbed.php
404
405     Hook::callAll('oembed_fetch_url', $embedurl, $j);
406
407 ### src/Content/Nav.php
408
409     Hook::callAll('page_header', DI::page()['nav']);
410     Hook::callAll('nav_info', $nav);
411
412 ### src/Core/Authentication.php
413
414     Hook::callAll('logged_in', $a->user);
415     
416 ### src/Core/StorageManager
417
418     Hook::callAll('storage_instance', $data);
419
420 ### src/Module/PermissionTooltip.php
421
422     Hook::callAll('lockview_content', $item);
423
424 ### src/Worker/Directory.php
425
426     Hook::callAll('globaldir_update', $arr);
427
428 ### src/Worker/Notifier.php
429
430     Hook::callAll('notifier_end', $target_item);
431
432 ### src/Module/Login.php
433
434     Hook::callAll('authenticate', $addon_auth);
435     Hook::callAll('login_hook', $o);
436
437 ### src/Module/Logout.php
438
439     Hook::callAll("logging_out");
440
441 ### src/Object/Post.php
442
443     Hook::callAll('render_location', $locate);
444     Hook::callAll('display_item', $arr);
445
446 ### src/Core/ACL.php
447
448     Hook::callAll('contact_select_options', $x);
449     Hook::callAll($a->module.'_pre_'.$selname, $arr);
450     Hook::callAll($a->module.'_post_'.$selname, $o);
451     Hook::callAll($a->module.'_pre_'.$selname, $arr);
452     Hook::callAll($a->module.'_post_'.$selname, $o);
453     Hook::callAll('jot_networks', $jotnets);
454
455 ### src/Core/Authentication.php
456
457     Hook::callAll('logged_in', $a->user);
458
459 ### src/Core/Hook.php
460
461     self::callSingle(self::getApp(), 'hook_fork', $fork_hook, $hookdata);
462
463 ### src/Core/L10n/L10n.php
464
465     Hook::callAll('poke_verbs', $arr);
466
467 ### src/Core/Worker.php
468
469     Hook::callAll("proc_run", $arr);
470
471 ### src/Util/Emailer.php
472
473     Hook::callAll('emailer_send_prepare', $email);
474     Hook::callAll("emailer_send", $hookdata);
475
476 ### src/Util/Map.php
477
478     Hook::callAll('generate_map', $arr);
479     Hook::callAll('generate_named_map', $arr);
480     Hook::callAll('Map::getCoordinates', $arr);
481
482 ### src/Util/Network.php
483
484     Hook::callAll('avatar_lookup', $avatar);
485
486 ### src/Util/ParseUrl.php
487
488     Hook::callAll("getsiteinfo", $siteinfo);
489
490 ### src/Protocol/DFRN.php
491
492     Hook::callAll('atom_feed_end', $atom);
493     Hook::callAll('atom_feed_end', $atom);
494
495 ### src/Protocol/Email.php
496
497     Hook::callAll('email_getmessage', $message);
498     Hook::callAll('email_getmessage_end', $ret);