1 Friendica Addon/Entwicklung
4 * [Zur Startseite der Hilfe](help)
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.
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.
18 Addons sollten einen Kommentarblock mit den folgenden vier Parametern enthalten:
21 * Name: My Great Addon
22 * Description: This is what my addon does. It's really cool.
24 * Author: John Q. Public <john@myfriendicasite.com>
27 Registriere deine Addon-Hooks während der Installation.
29 Addon::registerHook($hookname, $file, $function);
31 $hookname ist ein String und entspricht einem bekannten Friendica-Hook.
33 $file steht für den Pfadnamen, der relativ zum Top-Level-Friendicaverzeichnis liegt.
34 Das *sollte* "addon/addon_name/addon_name.php' sein.
36 $function ist ein String und der Name der Funktion, die ausgeführt wird, wenn der Hook aufgerufen wird.
41 Deine Hook-Callback-Funktion wird mit mindestens einem und bis zu zwei Argumenten aufgerufen
43 function myhook_function(App $a, &$b) {
47 Wenn du Änderungen an den aufgerufenen Daten vornehmen willst, musst du diese als Referenzvariable (mit "&") während der Funktionsdeklaration deklarieren.
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.
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.
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.
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 ein Array $a->argv geparst und stimmen mit $a->argc überein, wobei sie die Anzahl der URL-Komponenten abbilden.
65 So würde http://example.com/addon/arg1/arg2 nach einem Modul "addon" suchen und seiner Modulfunktion die $a-App-Strukur übergeben (dies ist für viele Komponenten verfügbar). Das umfasst:
68 $a->argv = array(0 => 'addon', 1 => 'arg1', 2 => 'arg2');
70 Deine Modulfunktionen umfassen oft die Funktion addon_name_content(App $a), welche den Seiteninhalt definiert und zurückgibt.
71 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.
72 Du kannst ebenso addon_name_init(App $a) nutzen, was oft frühzeitig aufgerufen wird und das Modul initialisert.
78 **'authenticate'** - wird aufgerufen, wenn sich der User einloggt.
80 'username' => der übertragene Nutzername
81 'password' => das übertragene Passwort
82 'authenticated' => setze das auf einen anderen Wert als "0", damit der User sich authentifiziert
83 'user_record' => die erfolgreiche Authentifizierung muss auch einen gültigen Nutzereintrag aus der Datenbank zurückgeben
85 **'logged_in'** - wird aufgerufen, sobald ein Nutzer sich erfolgreich angemeldet hat.
86 $b beinhaltet den $a->Nutzer-Array
89 **'display_item'** - wird aufgerufen, wenn ein Beitrag für die Anzeige formatiert wird.
91 'item' => Die Item-Details (Array), die von der Datenbank ausgegeben werden
92 'output' => Die HTML-Ausgabe (String) des Items, bevor es zur Seite hinzugefügt wird
94 **'post_local'** - wird aufgerufen, wenn der Statusbeitrag oder ein Kommentar im lokalen System eingetragen wird.
95 $b ist das Item-Array der Information, die in der Datenbank hinterlegt wird.
96 {Bitte beachte: der Seiteninhalt ist bbcode - nicht HTML)
98 **'post_local_end'** - wird aufgerufen, wenn ein lokaler Statusbeitrag oder Kommentar im lokalen System gespeichert wird.
99 $b ist das Item-Array einer Information, die gerade in der Datenbank gespeichert wurden.
100 {Bitte beachte: der Seiteninhalt ist bbcode - nicht HTML)
102 **'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.
103 $b ist das Item-Array einer Information, die in der Datenbank und im Item gespeichert ist.
104 {Bitte beachte: der Seiteninhalt ist bbcode - nicht HTML)
106 **'settings_form'** - wird aufgerufen, wenn die HTML-Ausgabe für die Einstellungsseite generiert wird.
107 $b ist die HTML-Ausgabe (String) der Einstellungsseite vor dem finalen "</form>"-Tag.
109 **'settings_post'** - wird aufgerufen, wenn die Einstellungsseiten geladen werden.
110 $b ist der $_POST-Array
112 **'addon_settings'** - wird aufgerufen, wenn die HTML-Ausgabe der Addon-Einstellungsseite generiert wird.
113 $b ist die HTML-Ausgabe (String) der Addon-Einstellungsseite vor dem finalen "</form>"-Tag.
115 **'addon_settings_post'** - wird aufgerufen, wenn die Addon-Einstellungsseite geladen wird.
116 $b ist der $_POST-Array
118 **'profile_post'** - wird aufgerufen, wenn die Profilseite angezeigt wird.
119 $b ist der $_POST-Array
121 **'profile_edit'** - wird aufgerufen, bevor die Profil-Bearbeitungsseite angezeigt wird.
123 'profile' => Profileintrag (Array) aus der Datenbank
124 'entry' => die HTML-Ausgabe (string) des generierten Eintrags
126 **'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.
127 $b ist die HTML-Ausgabe (String) des erstellten Profils
128 (Die Details des Profil-Arrays sind in $a->profile)
130 **'directory_item'** - wird von der Verzeichnisseite aufgerufen, wenn ein Item für die Anzeige formatiert wird.
132 'contact' => Kontakteintrag (Array) einer Person aus der Datenbank
133 'entry' => die HTML-Ausgabe (String) des generierten Eintrags
135 **'profile_sidebar_enter'** - wird aufgerufen, bevor die Sidebar "Kurzprofil" einer Seite erstellt wird.
136 $b ist der Profil-Array einer Person
138 **'profile_sidebar'** - wird aufgerufen, wenn die Sidebar "Kurzprofil" einer Seite erstellt wird.
140 'profile' => Kontakteintrag (Array) einer Person aus der Datenbank
141 'entry' => die HTML-Ausgabe (String) des generierten Eintrags
143 **'contact_block_end'** - wird aufgerufen, wenn der Block "Kontakte/Freunde" der Profil-Sidebar komplett formatiert wurde.
145 'contacts' => Array von "contacts"
146 'output' => die HTML-Ausgabe (String) des Kontaktblocks
148 **'bbcode'** - wird während der Umwandlung von bbcode auf HTML aufgerufen.
149 $b ist der konvertierte Text (String)
151 **'html2bbcode'** - wird während der Umwandlung von HTML zu bbcode aufgerufen (z.B. bei Nachrichtenbeiträgen).
152 $b ist der konvertierte Text (String)
154 **'page_header'** - wird aufgerufen, nachdem der Bereich der Seitennavigation geladen wurde.
155 $b ist die HTML-Ausgabe (String) der "nav"-Region
157 **'personal_xrd'** - wird aufgerufen, bevor die Ausgabe der persönlichen XRD-Datei erzeugt wird.
159 'user' => die hinterlegten Einträge der Person
160 'xml' => die komplette XML-Datei die ausgegeben wird
162 **'home_content'** - wird aufgerufen, bevor die Ausgabe des Homepage-Inhalts erstellt wird; wird nicht eingeloggten Nutzern angezeigt.
163 $b ist die HTML-Ausgabe (String) der Auswahlregion
165 **'contact_edit'** - wird aufgerufen, wenn die Kontaktdetails vom Nutzer auf der "Kontakte"-Seite bearbeitet werden.
167 'contact' => Kontakteintrag (Array) des abgezielten Kontakts
168 'output' => die HTML-Ausgabe (String) der "Kontakt bearbeiten"-Seite
170 **'contact_edit_post'** - wird aufgerufen, wenn die "Kontakt bearbeiten"-Seite ausgegeben wird.
171 $b ist der $_POST-Array
173 **'init_1'** - wird aufgerufen, kurz nachdem die Datenbank vor Beginn der Sitzung geöffnet wird.
174 $b wird nicht genutzt
176 **'page_end'** - wird aufgerufen, nachdem die Funktion des HTML-Inhalts komplett abgeschlossen ist.
177 $b ist die HTML-Ausgabe (String) vom Inhalt-"div"
179 **'avatar_lookup'** - wird aufgerufen, wenn der Avatar geladen wird.
181 'size' => Größe des Avatars, der geladen wird
182 'email' => Email-Adresse, um nach dem Avatar zu suchen
183 'url' => generierte URL (String) des Avatars
186 - wird aufgerufen nachdem in include/nav,php der Inhalt des Navigations Menüs erzeugt wurde.
187 - $b ist ein Array, das $nav wiederspiegelt.
189 Komplette Liste der Hook-Callbacks
192 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 Addon::callHooks('init_1');
197 Addon::callHooks('app_menu', $arr);
198 Addon::callHooks('page_content_top', $a->page['content']);
199 Addon::callHooks($a->module.'_mod_init', $placeholder);
200 Addon::callHooks($a->module.'_mod_init', $placeholder);
201 Addon::callHooks($a->module.'_mod_post', $_POST);
202 Addon::callHooks($a->module.'_mod_afterpost', $placeholder);
203 Addon::callHooks($a->module.'_mod_content', $arr);
204 Addon::callHooks($a->module.'_mod_aftercontent', $arr);
205 Addon::callHooks('page_end', $a->page['content']);
209 Addon::callHooks('logged_in', $a->user);
210 Addon::callHooks('authenticate', $addon_auth);
211 Addon::callHooks('logged_in', $a->user);
213 ### include/enotify.php
215 Addon::callHooks('enotify', $h);
216 Addon::callHooks('enotify_store', $datarray);
217 Addon::callHooks('enotify_mail', $datarray);
218 Addon::callHooks('check_item_notification', $notification_data);
220 ### include/conversation.php
222 Addon::callHooks('conversation_start', $cb);
223 Addon::callHooks('render_location', $locate);
224 Addon::callHooks('display_item', $arr);
225 Addon::callHooks('display_item', $arr);
226 Addon::callHooks('item_photo_menu', $args);
227 Addon::callHooks('jot_tool', $jotplugins);
231 Addon::callHooks('contact_block_end', $arr);
232 Addon::callHooks('poke_verbs', $arr);
233 Addon::callHooks('put_item_in_cache', $hook_data);
234 Addon::callHooks('prepare_body_init', $item);
235 Addon::callHooks('prepare_body_content_filter', $hook_data);
236 Addon::callHooks('prepare_body', $hook_data);
237 Addon::callHooks('prepare_body_final', $hook_data);
239 ### include/items.php
241 Addon::callHooks('page_info_data', $data);
243 ### mod/directory.php
245 Addon::callHooks('directory_item', $arr);
249 Addon::callHooks('personal_xrd', $arr);
253 Addon::callHooks('network_ping', $arr);
255 ### mod/parse_url.php
257 Addon::callHooks("parse_link", $arr);
261 Addon::callHooks('home_init', $ret);
265 Addon::callHooks('acl_lookup_end', $results);
269 Addon::callHooks('network_content_init', $arr);
270 Addon::callHooks('network_tabs', $arr);
272 ### mod/friendica.php
274 Addon::callHooks('about_hook', $o);
276 ### mod/subthread.php
278 Addon::callHooks('post_local_end', $arr);
282 Addon::callHooks('profile_post', $_POST);
283 Addon::callHooks('profile_edit', $arr);
287 Addon::callHooks('addon_settings_post', $_POST);
288 Addon::callHooks('connector_settings_post', $_POST);
289 Addon::callHooks('display_settings_post', $_POST);
290 Addon::callHooks('settings_post', $_POST);
291 Addon::callHooks('addon_settings', $settings_addons);
292 Addon::callHooks('connector_settings', $settings_connectors);
293 Addon::callHooks('display_settings', $o);
294 Addon::callHooks('settings_form', $o);
298 Addon::callHooks('photo_post_init', $_POST);
299 Addon::callHooks('photo_post_file', $ret);
300 Addon::callHooks('photo_post_end', $foo);
301 Addon::callHooks('photo_post_end', $foo);
302 Addon::callHooks('photo_post_end', $foo);
303 Addon::callHooks('photo_post_end', $foo);
304 Addon::callHooks('photo_post_end', intval($item_id));
305 Addon::callHooks('photo_upload_form', $ret);
309 Addon::callHooks('profile_advanced', $o);
313 Addon::callHooks('home_init', $ret);
314 Addon::callHooks("home_content", $content);
318 Addon::callHooks('post_local_end', $arr);
322 Addon::callHooks('contact_edit_post', $_POST);
323 Addon::callHooks('contact_edit', $arr);
327 Addon::callHooks('post_local_end', $arr);
331 Addon::callHooks('lockview_content', $item);
335 Addon::callHooks('uexport_options', $options);
339 Addon::callHooks('register_post', $arr);
340 Addon::callHooks('register_form', $arr);
344 Addon::callHooks('post_local_start', $_REQUEST);
345 Addon::callHooks('post_local', $datarray);
346 Addon::callHooks('post_local_end', $datarray);
350 Addon::callHooks('jot_tool', $jotplugins);
352 ### src/Network/FKOAuth1.php
354 Addon::callHooks('logged_in', $a->user);
356 ### src/Render/FriendicaSmartyEngine.php
358 Addon::callHooks("template_vars", $arr);
360 ### src/Model/Item.php
362 Addon::callHooks('post_local', $item);
363 Addon::callHooks('post_remote', $item);
364 Addon::callHooks('post_local_end', $posted_item);
365 Addon::callHooks('post_remote_end', $posted_item);
366 Addon::callHooks('tagged', $arr);
367 Addon::callHooks('post_local_end', $new_item);
369 ### src/Model/Contact.php
371 Addon::callHooks('contact_photo_menu', $args);
372 Addon::callHooks('follow', $arr);
374 ### src/Model/Profile.php
376 Addon::callHooks('profile_sidebar_enter', $profile);
377 Addon::callHooks('profile_sidebar', $arr);
378 Addon::callHooks('profile_tabs', $arr);
379 Addon::callHooks('zrl_init', $arr);
381 ### src/Model/Event.php
383 Addon::callHooks('event_updated', $event['id']);
384 Addon::callHooks("event_created", $event['id']);
386 ### src/Model/User.php
388 Addon::callHooks('register_account', $uid);
389 Addon::callHooks('remove_user', $user);
391 ### src/Content/Text/BBCode.php
393 Addon::callHooks('bbcode', $text);
394 Addon::callHooks('bb2diaspora', $text);
396 ### src/Content/Text/HTML.php
398 Addon::callHooks('html2bbcode', $message);
400 ### src/Content/Smilies.php
402 Addon::callHooks('smilie', $params);
404 ### src/Content/Feature.php
406 Addon::callHooks('isEnabled', $arr);
407 Addon::callHooks('get', $arr);
409 ### src/Content/ContactSelector.php
411 Addon::callHooks('network_to_name', $nets);
412 Addon::callHooks('gender_selector', $select);
413 Addon::callHooks('sexpref_selector', $select);
414 Addon::callHooks('marital_selector', $select);
416 ### src/Content/OEmbed.php
418 Addon::callHooks('oembed_fetch_url', $embedurl, $j);
420 ### src/Content/Nav.php
422 Addon::callHooks('page_header', $a->page['nav']);
423 Addon::callHooks('nav_info', $nav);
425 ### src/Core/Authentication.php
427 Addon::callHooks('logged_in', $a->user);
429 ### src/Worker/Directory.php
431 Addon::callHooks('globaldir_update', $arr);
433 ### src/Worker/Notifier.php
435 Addon::callHooks('notifier_end', $target_item);
437 ### src/Worker/Queue.php
439 Addon::callHooks('queue_predeliver', $r);
440 Addon::callHooks('queue_deliver', $params);
442 ### src/Module/Login.php
444 Addon::callHooks('authenticate', $addon_auth);
445 Addon::callHooks('login_hook', $o);
447 ### src/Module/Logout.php
449 Addon::callHooks("logging_out");
451 ### src/Object/Post.php
453 Addon::callHooks('render_location', $locate);
454 Addon::callHooks('display_item', $arr);
458 Addon::callHooks('contact_select_options', $x);
459 Addon::callHooks($a->module.'_pre_'.$selname, $arr);
460 Addon::callHooks($a->module.'_post_'.$selname, $o);
461 Addon::callHooks($a->module.'_pre_'.$selname, $arr);
462 Addon::callHooks($a->module.'_post_'.$selname, $o);
463 Addon::callHooks('jot_networks', $jotnets);
465 ### src/Core/Worker.php
467 Addon::callHooks("proc_run", $arr);
469 ### src/Util/Emailer.php
471 Addon::callHooks('emailer_send_prepare', $params);
472 Addon::callHooks("emailer_send", $hookdata);
476 Addon::callHooks('generate_map', $arr);
477 Addon::callHooks('generate_named_map', $arr);
478 Addon::callHooks('Map::getCoordinates', $arr);
480 ### src/Util/Network.php
482 Addon::callHooks('avatar_lookup', $avatar);
484 ### src/Util/ParseUrl.php
486 Addon::callHooks("getsiteinfo", $siteinfo);
488 ### src/Protocol/DFRN.php
490 Addon::callHooks('atom_feed_end', $atom);
491 Addon::callHooks('atom_feed_end', $atom);