1 **Friendica Addon/Plugin-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. Module arbeiten, indem bestimmte Seitenanfragen (durch den URL-Pfad) abgefangen werden
10 Plugin-Namen können keine Leerstellen oder andere Interpunktionen enthalten und werden als Datei- und Funktionsnamen genutzt.
11 Du kannst einen lesbaren Namen im Kommentarblock eintragen.
12 Jedes Addon muss beides beinhalten - eine Installations- und eine Deinstallationsfunktion, die auf dem Addon-/Plugin-Namen basieren; z.B. "plugin1name_install()".
13 Diese beiden Funktionen haben keine Argumente und sind dafür verantwortlich, Event Hooks zu registrieren und abzumelden (unregistering), die dein Plugin benötigt.
14 Die Installations- und Deinstallationsfunktionfunktionen werden auch ausgeführt (z.B. neu installiert), wenn sich das Plugin nach der Installation ändert - somit sollte deine Deinstallationsfunktion keine Daten zerstört und deine Installationsfunktion sollte bestehende Daten berücksichtigen.
15 Zukünftige Extensions werden möglicherweise "Setup" und "Entfernen" anbieten.
17 Plugins sollten einen Kommentarblock mit den folgenden vier Parametern enthalten:
20 * Name: My Great Plugin
21 * Description: This is what my plugin does. It's really cool
23 * Author: John Q. Public <john@myfriendicasite.com>
26 Registriere deine Plugin-Hooks während der Installation.
28 register_hook($hookname, $file, $function);
30 $hookname ist ein String und entspricht einem bekannten Friendica-Hook.
32 $file steht für den Pfadnamen, der relativ zum Top-Level-Friendicaverzeichnis liegt.
33 Das *sollte* "addon/plugin_name/plugin_name.php' sein.
35 $function ist ein String und der Name der Funktion, die ausgeführt wird, wenn der Hook aufgerufen wird.
37 Deine Hook-Callback-Funktion wird mit mindestens einem und bis zu zwei Argumenten aufgerufen
39 function myhook_function(&$a, &$b) {
43 Wenn du Änderungen an den aufgerufenen Daten vornehmen willst, musst du diese als Referenzvariable (mit "&") während der Funktionsdeklaration deklarieren.
45 $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.
46 Es ist empfohlen, diese Funktion "$a" zu nennen, um seine Nutzung an den Gebrauch an anderer Stelle anzugleichen.
48 $b kann frei benannt werden.
49 Diese Information ist speziell auf den Hook bezogen, der aktuell bearbeitet wird, und beinhaltet normalerweise Daten, die du sofort nutzen, anzeigen oder bearbeiten kannst.
50 Achte darauf, diese mit "&" zu deklarieren, wenn du sie bearbeiten willst.
55 Plugins/Addons können auch als "Module" agieren und alle Seitenanfragen für eine bestimte URL abfangen.
56 Um ein Plugin als Modul zu nutzen, ist es nötig, die Funktion "plugin_name_module()" zu definieren, die keine Argumente benötigt und nichts weiter machen muss.
58 Wenn diese Funktion existiert, wirst du nun alle Seitenanfragen für "http://my.web.site/plugin_name" erhalten - mit allen URL-Komponenten als zusätzliche Argumente.
59 Diese werden in ein Array $a->argv geparst und stimmen mit $a->argc überein, wobei sie die Anzahl der URL-Komponenten abbilden.
60 So würde http://my.web.site/plugin/arg1/arg2 nach einem Modul "plugin" suchen und seiner Modulfunktion die $a-App-Strukur übergeben (dies ist für viele Komponenten verfügbar). Das umfasst:
63 $a->argv = array(0 => 'plugin', 1 => 'arg1', 2 => 'arg2');
65 Deine Modulfunktionen umfassen oft die Funktion plugin_name_content(&$a), welche den Seiteninhalt definiert und zurückgibt.
66 Sie können auch plugin_name_post(&$a) umfassen, welches vor der content-Funktion aufgerufen wird und normalerweise die Resultate der POST-Formulare handhabt.
67 Du kannst ebenso plugin_name_init(&$a) nutzen, was oft frühzeitig aufgerufen wird und das Modul initialisert.
72 **'authenticate'** - wird aufgerufen, wenn sich der User einloggt.
74 'username' => der übertragene Nutzername
75 'password' => das übertragene Passwort
76 'authenticated' => setze das auf einen anderen Wert als "0", damit der User sich authentifiziert
77 'user_record' => die erfolgreiche Authentifizierung muss auch einen gültigen Nutzereintrag aus der Datenbank zurückgeben
79 **'logged_in'** - wird aufgerufen, sobald ein Nutzer sich erfolgreich angemeldet hat.
80 $b beinhaltet den $a->Nutzer-Array
83 **'display_item'** - wird aufgerufen, wenn ein Beitrag für die Anzeige formatiert wird.
85 'item' => Die Item-Details (Array), die von der Datenbank ausgegeben werden
86 'output' => Die HTML-Ausgabe (String) des Items, bevor es zur Seite hinzugefügt wird
88 **'post_local'** - wird aufgerufen, wenn der Statusbeitrag oder ein Kommentar im lokalen System eingetragen wird.
89 $b ist das Item-Array der Information, die in der Datenbank hinterlegt wird.
90 {Bitte beachte: der Seiteninhalt ist bbcode - nicht HTML)
92 **'post_local_end'** - wird aufgerufen, wenn ein lokaler Statusbeitrag oder Kommentar im lokalen System gespeichert wird.
93 $b ist das Item-Array einer Information, die gerade in der Datenbank gespeichert wurden.
94 {Bitte beachte: der Seiteninhalt ist bbcode - nicht HTML)
96 **'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.
97 $b ist das Item-Array einer Information, die in der Datenbank und im Item gespeichert ist.
98 {Bitte beachte: der Seiteninhalt ist bbcode - nicht HTML)
100 **'settings_form'** - wird aufgerufen, wenn die HTML-Ausgabe für die Einstellungsseite generiert wird.
101 $b ist die HTML-Ausgabe (String) der Einstellungsseite vor dem finalen "</form>"-Tag.
103 **'settings_post'** - wird aufgerufen, wenn die Einstellungsseiten geladen werden.
104 $b ist der $_POST-Array
106 **'plugin_settings'** - wird aufgerufen, wenn die HTML-Ausgabe der Addon-Einstellungsseite generiert wird.
107 $b ist die HTML-Ausgabe (String) der Addon-Einstellungsseite vor dem finalen "</form>"-Tag.
109 **'plugin_settings_post'** - wird aufgerufen, wenn die Addon-Einstellungsseite geladen wird.
110 $b ist der $_POST-Array
112 **'profile_post'** - wird aufgerufen, wenn die Profilseite angezeigt wird.
113 $b ist der $_POST-Array
115 **'profile_edit'** - wird aufgerufen, bevor die Profil-Bearbeitungsseite angezeigt wird.
117 'profile' => Profileintrag (Array) aus der Datenbank
118 'entry' => die HTML-Ausgabe (string) des generierten Eintrags
120 **'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.
121 $b ist die HTML-Ausgabe (String) des erstellten Profils
122 (Die Details des Profil-Arrays sind in $a->profile)
124 **'directory_item'** - wird von der Verzeichnisseite aufgerufen, wenn ein Item für die Anzeige formatiert wird.
126 'contact' => Kontakteintrag (Array) einer Person aus der Datenbank
127 'entry' => die HTML-Ausgabe (String) des generierten Eintrags
129 **'profile_sidebar_enter'** - wird aufgerufen, bevor die Sidebar "Kurzprofil" einer Seite erstellt wird.
130 $b ist der Profil-Array einer Person
132 **'profile_sidebar'** - wird aufgerufen, wenn die Sidebar "Kurzprofil" einer Seite erstellt wird.
134 'profile' => Kontakteintrag (Array) einer Person aus der Datenbank
135 'entry' => die HTML-Ausgabe (String) des generierten Eintrags
137 **'contact_block_end'** - wird aufgerufen, wenn der Block "Kontakte/Freunde" der Profil-Sidebar komplett formatiert wurde.
139 'contacts' => Array von "contacts"
140 'output' => die HTML-Ausgabe (String) des Kontaktblocks
142 **'bbcode'** - wird während der Umwandlung von bbcode auf HTML aufgerufen.
143 $b ist der konvertierte Text (String)
145 **'html2bbcode'** - wird während der Umwandlung von HTML zu bbcode aufgerufen (z.B. bei Nachrichtenbeiträgen).
146 $b ist der konvertierte Text (String)
148 **'page_header'** - wird aufgerufen, nachdem der Bereich der Seitennavigation geladen wurde.
149 $b ist die HTML-Ausgabe (String) der "nav"-Region
151 **'personal_xrd'** - wird aufgerufen, bevor die Ausgabe der persönlichen XRD-Datei erzeugt wird.
153 'user' => die hinterlegten Einträge der Person
154 'xml' => die komplette XML-Datei die ausgegeben wird
156 **'home_content'** - wird aufgerufen, bevor die Ausgabe des Homepage-Inhalts erstellt wird; wird nicht eingeloggten Nutzern angezeigt.
157 $b ist die HTML-Ausgabe (String) der Auswahlregion
159 **'contact_edit'** - wird aufgerufen, wenn die Kontaktdetails vom Nutzer auf der "Kontakte"-Seite bearbeitet werden.
161 'contact' => Kontakteintrag (Array) des abgezielten Kontakts
162 'output' => die HTML-Ausgabe (String) der "Kontakt bearbeiten"-Seite
164 **'contact_edit_post'** - wird aufgerufen, wenn die "Kontakt bearbeiten"-Seite ausgegeben wird.
165 $b ist der $_POST-Array
167 **'init_1'** - wird aufgerufen, kurz nachdem die Datenbank vor Beginn der Sitzung geöffnet wird.
168 $b wird nicht genutzt
170 **'page_end'** - wird aufgerufen, nachdem die Funktion des HTML-Inhalts komplett abgeschlossen ist.
171 $b ist die HTML-Ausgabe (String) vom Inhalt-"div"
173 **'avatar_lookup'** - wird aufgerufen, wenn der Avatar geladen wird.
175 'size' => Größe des Avatars, der geladen wird
176 'email' => Email-Adresse, um nach dem Avatar zu suchen
177 'url' => generierte URL (String) des Avatars
180 Eine komplette Liste aller Hook-Callbacks mit den zugehörigen Dateien (am 14-Feb-2012 generiert): Bitte schau in die Quellcodes für Details zu Hooks, die oben nicht dokumentiert sind.
182 boot.php: call_hooks('login_hook',$o);
184 boot.php: call_hooks('profile_sidebar_enter', $profile);
186 boot.php: call_hooks('profile_sidebar', $arr);
188 boot.php: call_hooks("proc_run", $arr);
190 include/contact_selectors.php: call_hooks('network_to_name', $nets);
192 include/api.php: call_hooks('logged_in', $a->user);
194 include/api.php: call_hooks('logged_in', $a->user);
196 include/queue.php: call_hooks('queue_predeliver', $a, $r);
198 include/queue.php: call_hooks('queue_deliver', $a, $params);
200 include/text.php: call_hooks('contact_block_end', $arr);
202 include/text.php: call_hooks('smilie', $s);
204 include/text.php: call_hooks('prepare_body_init', $item);
206 include/text.php: call_hooks('prepare_body', $prep_arr);
208 include/text.php: call_hooks('prepare_body_final', $prep_arr);
210 include/nav.php: call_hooks('page_header', $a->page['nav']);
212 include/auth.php: call_hooks('authenticate', $addon_auth);
214 include/bbcode.php: call_hooks('bbcode',$Text);
216 include/oauth.php: call_hooks('logged_in', $a->user);
218 include/acl_selectors.php: call_hooks($a->module . '_pre_' . $selname, $arr);
220 include/acl_selectors.php: call_hooks($a->module . '_post_' . $selname, $o);
222 include/acl_selectors.php: call_hooks('contact_select_options', $x);
224 include/acl_selectors.php: call_hooks($a->module . '_pre_' . $selname, $arr);
226 include/acl_selectors.php: call_hooks($a->module . '_post_' . $selname, $o);
228 include/acl_selectors.php: call_hooks($a->module . '_pre_' . $selname, $arr);
230 include/acl_selectors.php: call_hooks($a->module . '_post_' . $selname, $o);
232 include/notifier.php: call_hooks('notifier_normal',$target_item);
234 include/notifier.php: call_hooks('notifier_end',$target_item);
236 include/items.php: call_hooks('atom_feed', $atom);
238 include/items.php: call_hooks('atom_feed_end', $atom);
240 include/items.php: call_hooks('atom_feed_end', $atom);
242 include/items.php: call_hooks('parse_atom', $arr);
244 include/items.php: call_hooks('post_remote',$arr);
246 include/items.php: call_hooks('atom_author', $o);
248 include/items.php: call_hooks('atom_entry', $o);
250 include/bb2diaspora.php: call_hooks('bb2diaspora',$Text);
252 include/cronhooks.php: call_hooks('cron', $d);
254 include/security.php: call_hooks('logged_in', $a->user);
256 include/html2bbcode.php: call_hooks('html2bbcode', $text);
258 include/Contact.php: call_hooks('remove_user',$r[0]);
260 include/Contact.php: call_hooks('contact_photo_menu', $args);
262 include/conversation.php: call_hooks('conversation_start',$cb);
264 include/conversation.php: call_hooks('render_location',$locate);
266 include/conversation.php: call_hooks('display_item', $arr);
268 include/conversation.php: call_hooks('render_location',$locate);
270 include/conversation.php: call_hooks('display_item', $arr);
272 include/conversation.php: call_hooks('item_photo_menu', $args);
274 include/conversation.php: call_hooks('jot_tool', $jotplugins);
276 include/conversation.php: call_hooks('jot_networks', $jotnets);
278 include/plugin.php: if(! function_exists('call_hooks')) {
280 include/plugin.php:function call_hooks($name, &$data = null) {
282 index.php: call_hooks('init_1');
284 index.php: call_hooks('app_menu', $arr);
286 index.php: call_hooks('page_end', $a->page['content']);
288 mod/photos.php: call_hooks('photo_post_init', $_POST);
290 mod/photos.php: call_hooks('photo_post_file',$ret);
292 mod/photos.php: call_hooks('photo_post_end',$foo);
294 mod/photos.php: call_hooks('photo_post_end',$foo);
296 mod/photos.php: call_hooks('photo_post_end',$foo);
298 mod/photos.php: call_hooks('photo_post_end',intval($item_id));
300 mod/photos.php: call_hooks('photo_upload_form',$ret);
302 mod/friendica.php: call_hooks('about_hook', $o);
304 mod/editpost.php: call_hooks('jot_tool', $jotplugins);
306 mod/editpost.php: call_hooks('jot_networks', $jotnets);
308 mod/parse_url.php: call_hooks('parse_link', $arr);
310 mod/home.php: call_hooks('home_init',$ret);
312 mod/home.php: call_hooks("home_content",$o);
314 mod/contacts.php: call_hooks('contact_edit_post', $_POST);
316 mod/contacts.php: call_hooks('contact_edit', $arr);
318 mod/settings.php: call_hooks('plugin_settings_post', $_POST);
320 mod/settings.php: call_hooks('connector_settings_post', $_POST);
322 mod/settings.php: call_hooks('settings_post', $_POST);
324 mod/settings.php: call_hooks('plugin_settings', $settings_addons);
326 mod/settings.php: call_hooks('connector_settings', $settings_connectors);
328 mod/settings.php: call_hooks('settings_form',$o);
330 mod/register.php: call_hooks('register_account', $newuid);
332 mod/like.php: call_hooks('post_local_end', $arr);
334 mod/xrd.php: call_hooks('personal_xrd', $arr);
336 mod/item.php: call_hooks('post_local_start', $_REQUEST);
338 mod/item.php: call_hooks('post_local',$datarray);
340 mod/item.php: call_hooks('post_local_end', $datarray);
342 mod/profile.php: call_hooks('profile_advanced',$o);
344 mod/profiles.php: call_hooks('profile_post', $_POST);
346 mod/profiles.php: call_hooks('profile_edit', $arr);
348 mod/tagger.php: call_hooks('post_local_end', $arr);
350 mod/cb.php: call_hooks('cb_init');
352 mod/cb.php: call_hooks('cb_post', $_POST);
354 mod/cb.php: call_hooks('cb_afterpost');
356 mod/cb.php: call_hooks('cb_content', $o);
358 mod/directory.php: call_hooks('directory_item', $arr);