]> git.mxchange.org Git - friendica.git/blob - doc/de/Plugins.md
11113843bb835ac82612beb0e84df06a78de2f15
[friendica.git] / doc / de / Plugins.md
1 Friendica Addon/Plugin-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. Module arbeiten, indem bestimmte Seitenanfragen (durch den URL-Pfad) abgefangen werden
9
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.
16
17 Plugins sollten einen Kommentarblock mit den folgenden vier Parametern enthalten:
18
19     /*
20      * Name: My Great Plugin
21      * Description: This is what my plugin does. It's really cool
22      * Version: 1.0
23      * Author: John Q. Public <john@myfriendicasite.com>
24      */
25
26 Registriere deine Plugin-Hooks während der Installation.
27
28     register_hook($hookname, $file, $function);
29
30 $hookname ist ein String und entspricht einem bekannten Friendica-Hook.
31
32 $file steht für den Pfadnamen, der relativ zum Top-Level-Friendicaverzeichnis liegt.
33 Das *sollte* "addon/plugin_name/plugin_name.php' sein.
34
35 $function ist ein String und der Name der Funktion, die ausgeführt wird, wenn der Hook aufgerufen wird.
36
37 Argumente
38 ---
39
40 Deine Hook-Callback-Funktion wird mit mindestens einem und bis zu zwei Argumenten aufgerufen
41
42     function myhook_function(&$a, &$b) {
43
44     }
45
46 Wenn du Änderungen an den aufgerufenen Daten vornehmen willst, musst du diese als Referenzvariable (mit "&") während der Funktionsdeklaration deklarieren.
47
48 $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.
49 Es ist empfohlen, diese Funktion "$a" zu nennen, um seine Nutzung an den Gebrauch an anderer Stelle anzugleichen.
50
51 $b kann frei benannt werden.
52 Diese Information ist speziell auf den Hook bezogen, der aktuell bearbeitet wird, und beinhaltet normalerweise Daten, die du sofort nutzen, anzeigen oder bearbeiten kannst.
53 Achte darauf, diese mit "&" zu deklarieren, wenn du sie bearbeiten willst.
54
55
56 Module
57 ---
58
59 Plugins/Addons können auch als "Module" agieren und alle Seitenanfragen für eine bestimte URL abfangen.
60 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.
61
62 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.
63 Diese werden in ein Array $a->argv geparst und stimmen mit $a->argc überein, wobei sie die Anzahl der URL-Komponenten abbilden.
64 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:
65
66     $a->argc = 3
67     $a->argv = array(0 => 'plugin', 1 => 'arg1', 2 => 'arg2');
68
69 Deine Modulfunktionen umfassen oft die Funktion plugin_name_content(&$a), welche den Seiteninhalt definiert und zurückgibt.
70 Sie können auch plugin_name_post(&$a) umfassen, welches vor der content-Funktion aufgerufen wird und normalerweise die Resultate der POST-Formulare handhabt.
71 Du kannst ebenso plugin_name_init(&$a) nutzen, was oft frühzeitig aufgerufen wird und das Modul initialisert.
72
73
74 Derzeitige Hooks
75 ---
76
77 **'authenticate'** - wird aufgerufen, wenn sich der User einloggt.
78     $b ist ein Array
79         'username' => der übertragene Nutzername
80         'password' => das übertragene Passwort
81         'authenticated' => setze das auf einen anderen Wert als "0", damit der User sich authentifiziert
82         'user_record' => die erfolgreiche Authentifizierung muss auch einen gültigen Nutzereintrag aus der Datenbank zurückgeben
83
84 **'logged_in'** - wird aufgerufen, sobald ein Nutzer sich erfolgreich angemeldet hat.
85     $b beinhaltet den $a->Nutzer-Array
86
87
88 **'display_item'** - wird aufgerufen, wenn ein Beitrag für die Anzeige formatiert wird.
89     $b ist ein Array
90         'item' => Die Item-Details (Array), die von der Datenbank ausgegeben werden
91         'output' => Die HTML-Ausgabe (String) des Items, bevor es zur Seite hinzugefügt wird
92
93 **'post_local'** - wird aufgerufen, wenn der Statusbeitrag oder ein Kommentar im lokalen System eingetragen wird.
94     $b ist das Item-Array der Information, die in der Datenbank hinterlegt wird.
95         {Bitte beachte: der Seiteninhalt ist bbcode - nicht HTML)
96
97 **'post_local_end'** - wird aufgerufen, wenn ein lokaler Statusbeitrag oder Kommentar im lokalen System gespeichert wird.
98     $b ist das Item-Array einer Information, die gerade in der Datenbank gespeichert wurden.
99         {Bitte beachte: der Seiteninhalt ist bbcode - nicht HTML)
100
101 **'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.
102     $b ist das Item-Array einer Information, die in der Datenbank und im Item gespeichert ist.
103         {Bitte beachte: der Seiteninhalt ist bbcode - nicht HTML)
104
105 **'settings_form'** - wird aufgerufen, wenn die HTML-Ausgabe für die Einstellungsseite generiert wird.
106     $b ist die HTML-Ausgabe (String) der Einstellungsseite vor dem finalen "</form>"-Tag.
107
108 **'settings_post'** - wird aufgerufen, wenn die Einstellungsseiten geladen werden.
109     $b ist der $_POST-Array
110
111 **'plugin_settings'** - wird aufgerufen, wenn die HTML-Ausgabe der Addon-Einstellungsseite generiert wird.
112     $b ist die HTML-Ausgabe (String) der Addon-Einstellungsseite vor dem finalen "</form>"-Tag.
113
114 **'plugin_settings_post'** - wird aufgerufen, wenn die Addon-Einstellungsseite geladen wird.
115     $b ist der $_POST-Array
116
117 **'profile_post'** - wird aufgerufen, wenn die Profilseite angezeigt wird.
118     $b ist der $_POST-Array
119
120 **'profile_edit'** - wird aufgerufen, bevor die Profil-Bearbeitungsseite angezeigt wird.
121     $b ist ein Array
122         'profile' => Profileintrag (Array) aus der Datenbank
123         'entry' => die HTML-Ausgabe (string) des generierten Eintrags
124
125 **'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.
126     $b ist die HTML-Ausgabe (String) des erstellten Profils
127     (Die Details des Profil-Arrays sind in $a->profile)
128
129 **'directory_item'** - wird von der Verzeichnisseite aufgerufen, wenn ein Item für die Anzeige formatiert wird.
130     $b ist ein Array
131         'contact' => Kontakteintrag (Array) einer Person aus der Datenbank
132         'entry' => die HTML-Ausgabe (String) des generierten Eintrags
133
134 **'profile_sidebar_enter'** - wird aufgerufen, bevor die Sidebar "Kurzprofil" einer Seite erstellt wird.
135     $b ist der Profil-Array einer Person
136
137 **'profile_sidebar'** - wird aufgerufen, wenn die Sidebar "Kurzprofil" einer Seite erstellt wird.
138     $b ist ein Array
139         'profile' => Kontakteintrag (Array) einer Person aus der Datenbank
140         'entry' => die HTML-Ausgabe (String) des generierten Eintrags
141
142 **'contact_block_end'** - wird aufgerufen, wenn der Block "Kontakte/Freunde" der Profil-Sidebar komplett formatiert wurde.
143     $b ist ein Array
144           'contacts' => Array von "contacts"
145           'output' => die HTML-Ausgabe (String) des Kontaktblocks
146
147 **'bbcode'** - wird während der Umwandlung von bbcode auf HTML aufgerufen.
148     $b ist der konvertierte Text (String)
149
150 **'html2bbcode'** - wird während der Umwandlung von HTML zu bbcode aufgerufen (z.B. bei Nachrichtenbeiträgen).
151     $b ist der konvertierte Text (String)
152
153 **'page_header'** - wird aufgerufen, nachdem der Bereich der Seitennavigation geladen wurde.
154     $b ist die HTML-Ausgabe (String) der "nav"-Region
155
156 **'personal_xrd'** - wird aufgerufen, bevor die Ausgabe der persönlichen XRD-Datei erzeugt wird.
157     $b ist ein Array
158         'user' => die hinterlegten Einträge der Person
159         'xml' => die komplette XML-Datei die ausgegeben wird
160
161 **'home_content'** - wird aufgerufen, bevor die Ausgabe des Homepage-Inhalts erstellt wird; wird nicht eingeloggten Nutzern angezeigt.
162     $b ist die HTML-Ausgabe (String) der Auswahlregion
163
164 **'contact_edit'** - wird aufgerufen, wenn die Kontaktdetails vom Nutzer auf der "Kontakte"-Seite bearbeitet werden.
165     $b ist ein Array
166         'contact' => Kontakteintrag (Array) des abgezielten Kontakts
167         'output' => die HTML-Ausgabe (String) der "Kontakt bearbeiten"-Seite
168
169 **'contact_edit_post'** - wird aufgerufen, wenn die "Kontakt bearbeiten"-Seite ausgegeben wird.
170     $b ist der $_POST-Array
171
172 **'init_1'** - wird aufgerufen, kurz nachdem die Datenbank vor Beginn der Sitzung geöffnet wird.
173     $b wird nicht genutzt
174
175 **'page_end'** - wird aufgerufen, nachdem die Funktion des HTML-Inhalts komplett abgeschlossen ist.
176     $b ist die HTML-Ausgabe (String) vom Inhalt-"div"
177
178 **'avatar_lookup'** - wird aufgerufen, wenn der Avatar geladen wird.
179     $b ist ein Array
180         'size' => Größe des Avatars, der geladen wird
181         'email' => Email-Adresse, um nach dem Avatar zu suchen
182         'url' => generierte URL (String) des Avatars
183
184 **'nav_info'**
185  - wird aufgerufen nachdem in include/nav,php der Inhalt des Navigations Menüs erzeugt wurde.
186  - $b ist ein Array, das $nav wiederspiegelt.
187
188 Komplette Liste der Hook-Callbacks
189 ---
190
191 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.
192
193 boot.php:                       call_hooks('login_hook',$o);
194
195 boot.php:                       call_hooks('profile_sidebar_enter', $profile);
196
197 boot.php:                       call_hooks('profile_sidebar', $arr);
198
199 boot.php:                       call_hooks("proc_run", $arr);
200
201 include/contact_selectors.php:  call_hooks('network_to_name', $nets);
202
203 include/api.php:                call_hooks('logged_in', $a->user);
204
205 include/api.php:                call_hooks('logged_in', $a->user);
206
207 include/queue.php:              call_hooks('queue_predeliver', $a, $r);
208
209 include/queue.php:              call_hooks('queue_deliver', $a, $params);
210
211 include/text.php:               call_hooks('contact_block_end', $arr);
212
213 include/text.php:               call_hooks('smilie', $s);
214
215 include/text.php:               call_hooks('prepare_body_init', $item);
216
217 include/text.php:               call_hooks('prepare_body', $prep_arr);
218
219 include/text.php:               call_hooks('prepare_body_final', $prep_arr);
220
221 include/nav.php:                call_hooks('page_header', $a->page['nav']);
222
223 include/auth.php:               call_hooks('authenticate', $addon_auth);
224
225 include/bbcode.php:             call_hooks('bbcode',$Text);
226
227 include/oauth.php:              call_hooks('logged_in', $a->user);
228
229 include/acl_selectors.php:      call_hooks($a->module . '_pre_' . $selname, $arr);
230
231 include/acl_selectors.php:      call_hooks($a->module . '_post_' . $selname, $o);
232
233 include/acl_selectors.php:      call_hooks('contact_select_options', $x);
234
235 include/acl_selectors.php:      call_hooks($a->module . '_pre_' . $selname, $arr);
236
237 include/acl_selectors.php:      call_hooks($a->module . '_post_' . $selname, $o);
238
239 include/acl_selectors.php:      call_hooks($a->module . '_pre_' . $selname, $arr);
240
241 include/acl_selectors.php:      call_hooks($a->module . '_post_' . $selname, $o);
242
243 include/notifier.php:           call_hooks('notifier_normal',$target_item);
244
245 include/notifier.php:           call_hooks('notifier_end',$target_item);
246
247 include/items.php:              call_hooks('atom_feed', $atom);
248
249 include/items.php:              call_hooks('atom_feed_end', $atom);
250
251 include/items.php:              call_hooks('atom_feed_end', $atom);
252
253 include/items.php:              call_hooks('parse_atom', $arr);
254
255 include/items.php:              call_hooks('post_remote',$arr);
256
257 include/items.php:              call_hooks('atom_author', $o);
258
259 include/items.php:              call_hooks('atom_entry', $o);
260
261 include/bb2diaspora.php:        call_hooks('bb2diaspora',$Text);
262
263 include/cronhooks.php:          call_hooks('cron', $d);
264
265 include/security.php:           call_hooks('logged_in', $a->user);
266
267 include/html2bbcode.php:        call_hooks('html2bbcode', $text);
268
269 include/Contact.php:            call_hooks('remove_user',$r[0]);
270
271 include/Contact.php:            call_hooks('contact_photo_menu', $args);
272
273 include/conversation.php:       call_hooks('conversation_start',$cb);
274
275 include/conversation.php:       call_hooks('render_location',$locate);
276
277 include/conversation.php:       call_hooks('display_item', $arr);
278
279 include/conversation.php:       call_hooks('render_location',$locate);
280
281 include/conversation.php:       call_hooks('display_item', $arr);
282
283 include/conversation.php:       call_hooks('item_photo_menu', $args);
284
285 include/conversation.php:       call_hooks('jot_tool', $jotplugins);
286
287 include/conversation.php:       call_hooks('jot_networks', $jotnets);
288
289 include/plugin.php:             if(! function_exists('call_hooks')) {
290
291 include/plugin.php:function     call_hooks($name, &$data = null) {
292
293 index.php:                      call_hooks('init_1');
294
295 index.php:                      call_hooks('app_menu', $arr);
296
297 index.php:                      call_hooks('page_end', $a->page['content']);
298
299 mod/photos.php:                 call_hooks('photo_post_init', $_POST);
300
301 mod/photos.php:                 call_hooks('photo_post_file',$ret);
302
303 mod/photos.php:                 call_hooks('photo_post_end',$foo);
304
305 mod/photos.php:                 call_hooks('photo_post_end',$foo);
306
307 mod/photos.php:                 call_hooks('photo_post_end',$foo);
308
309 mod/photos.php:                 call_hooks('photo_post_end',intval($item_id));
310
311 mod/photos.php:                 call_hooks('photo_upload_form',$ret);
312
313 mod/friendica.php:              call_hooks('about_hook', $o);   
314
315 mod/editpost.php:               call_hooks('jot_tool', $jotplugins);
316
317 mod/editpost.php:               call_hooks('jot_networks', $jotnets);
318
319 mod/parse_url.php:              call_hooks('parse_link', $arr);
320
321 mod/home.php:                   call_hooks('home_init',$ret);
322
323 mod/home.php:                   call_hooks("home_content",$o);
324
325 mod/contacts.php:               call_hooks('contact_edit_post', $_POST);
326
327 mod/contacts.php:               call_hooks('contact_edit', $arr);
328
329 mod/settings.php:               call_hooks('plugin_settings_post', $_POST);
330
331 mod/settings.php:               call_hooks('connector_settings_post', $_POST);
332
333 mod/settings.php:               call_hooks('settings_post', $_POST);
334
335 mod/settings.php:               call_hooks('plugin_settings', $settings_addons);
336
337 mod/settings.php:               call_hooks('connector_settings', $settings_connectors);
338
339 mod/settings.php:               call_hooks('settings_form',$o);
340
341 mod/register.php:               call_hooks('register_account', $newuid);
342
343 mod/like.php:                   call_hooks('post_local_end', $arr);
344
345 mod/xrd.php:                    call_hooks('personal_xrd', $arr);
346
347 mod/item.php:                   call_hooks('post_local_start', $_REQUEST);
348
349 mod/item.php:                   call_hooks('post_local',$datarray);
350
351 mod/item.php:                   call_hooks('post_local_end', $datarray);
352
353 mod/profile.php:                call_hooks('profile_advanced',$o);
354
355 mod/profiles.php:               call_hooks('profile_post', $_POST);
356
357 mod/profiles.php:               call_hooks('profile_edit', $arr);
358
359 mod/tagger.php:                 call_hooks('post_local_end', $arr);
360
361 mod/cb.php:                     call_hooks('cb_init');
362
363 mod/cb.php:                     call_hooks('cb_post', $_POST);
364
365 mod/cb.php:                     call_hooks('cb_afterpost');
366
367 mod/cb.php:                     call_hooks('cb_content', $o);
368
369 mod/directory.php:              call_hooks('directory_item', $arr);