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