Loading
  • Seite
  • Addon-API's

Funktionen

Stand: 01.08.2016 / 18:12:39

um die funktionen der addons über die bbcode-schnittstelle des cms zugänglich zu machen, sind folgende schritte nötig:

  1. es gibt 2 interpreter-funktionen: eine für tags ala [[tag="option"]...[/tag]] und eine für spezial-tags wie [{tag="option"}]
  2. um jetzt neue tags hinzuzufügen um die funktionen der addons von den einzelnen seiten aus direkt abrufen zu können, wird bei beiden interpretern gleich vorgegeangen:
    • einem speziellen array namens $$site_elements["interpreter"] (normale tags) und/oder $$site_elements["interpreter_special"] (spezial tags) wird ein weiteres element hinzugefügt
    • in der addon-datei wird eine function definiert deren name sich aus dem element, das den obigen arrays hinzugefügt wurde, und dem string "_interpreter" (normale tags) und/oder dem string "_interpreter_special" (spezial-tags) zusammensetzt
      --> beispiel: für das tag ... im addon "gaga.php" könnte man den eintrag "gaga" nehmen. dieser wird dann mit $$site_elements["interpreter"][] = "gaga"; hinzugefügt. die function für die erweiterung des bestehenden interpreters würde dann den namen "gaga_interpreter" bekommen
  3. hat man den namen der function sozusagen "angemeldet", kann man mit der übergabe der werte beginnen:
    • der function-header MUSS wie folgt aussehen:
      function {hinzugefügtes element}_interpreter($keyword, $keyword_data, $text_data) { (für normale tags) oder
      function {hinzugefügtes element}_interpreter_special($keyword, $keyword_data) { (für spezial-tags)
      --> beispiel: hinzugefügtes element = "gaga". dann lautet der header für die erweiterung des spezial-interpreters
      1. function gaga_interpreter_special($keyword, $keyword_data) {
    • $$keyword = name des erkannten tags
      $keyword_data = zusätzlicher attributteil des tags
      $text_data = text (auch andere tags)
      (zwischen dem start und end-tag von normalen tags)
      --> beispiel: ...:
      1. $keyword = "blubbs"; $keyword_data = "gaga"; $text_data = "...";
    • innerhalb der nun definierten function MUSS folgender aufbau vorliegen, weil sonst fehler in der interpretation auftauchen:
      (beispiel mit function-erweiterung "gaga", normalen tags "blubbs" und "blah")
      1. function gaga_interpreter($keyword, $keyword_data, $text_data) {
      2. global $site_elements;
      3. $site_elements["addons_interpreter"] = 1;
      4. $user_id = $site_elements["user_id"];
      5. $input_data = array();
      6. switch($keyword) {
      7. case "blubbs":
      8. {auszuführender code...}
      9. break;
      10. case "blah":
      11. {auszuführender code...}
      12. break;
      13. default:
      14. $site_elements["addons_interpreter"] = 0;
      15. break;
      16. }
      17. return $output;
      18. }
    • es gibt jetzt noch 3 spezielle tags deren funktionalitäten erweitert werden können, nach einem ähnlichen prinzip wie oben. die erweiterbaren tags sind "admin" (admin-funktionen), "user" (user-funktionen), "site" (seiten-funktionalitäten)
      (beispiel mit function-erweiterung "gaga", normalem tags "blubbs" und "admin"-tag erweiterung "blah")
      1. function gaga_interpreter($keyword, $keyword_data, $text_data) {
      2. global $site_elements;
      3. $site_elements["addons_interpreter"] = 1;
      4. $user_id = $site_elements["user_id"];
      5. $input_data = array();
      6. switch($keyword) {
      7. case "blubbs":
      8. {auszuführender code...}
      9. break;
      10. case "admin":
      11. $user_id = $site_elements["user_id"];
      12. switch($keyword_data) {
      13. case "blah":
      14. {auszuführender code...}
      15. break;
      16. default:
      17. $site_elements["addons_interpreter"] = 0;
      18. break;
      19. }
      20. break;
      21. default:
      22. $site_elements["addons_interpreter"] = 0;
      23. break;
      24. }
      25. return $output;
      26. }
  4. der interpreter zählt im übrigen das vorkommen der definierten text im quelltext der aktuellen seite. um die aktuelle zahl aufzurufen, kann das array $$site_elements[$keyword] genutzt werden. es werden NUR normale tags gezählt!
    --> beispiel für "blubbs":
    1. $anzahl_blubbs = $site_elements["blubbs"];
  5. dann gibt es auch die möglichkeit, eigene html-ausgabeblöcke zu generieren, die über den allgemeinen html-generator genutzt werden können. hierzu wird dem array $$site_elements["output"] ein weiteres element hinzugefügt. dann wird in der addon-datei eine function definiert deren name sich aus dem element, das dem obigem array hinzugefügt wurde, und dem string "_output" zusammensetzt
  6. beispiel: im addon "gaga.php" könnte man das element "blubb" nehmen. dieser wird dann mit
    1. $site_elements["output"][] = "blubb"
    hinzugefügt. die function für die erweiterung des bestehenden html-generators würde dann den namen "blubb_output" bekommen
  7. hat man den namen der function sozusagen "angemeldet", kann man mit der übergabe der werte beginnen:
    • der function-header MUSS wie folgt aussehen:
      function {hinzugefügtes element}_output($keyword, $input_data) {
    • beispiel: hinzugefügtes element = "blubb". dann lautet der header für die erweiterung des spezial-interpreters
      1. function blubb_output($keyword, $input_data) {
    • $$keyword = name des zu generierenden html-blocks
      $input_data = individuell belegbares array (numerisch/assoziativ)
      (enthält alles für den html-block wichtige an daten)
    • innerhalb der nun definierten function MUSS folgender aufbau vorliegen, weil sonst fehler in der interpretation auftauchen:
      (beispiel mit function-erweiterung "blubb". die variablen $$text und $$ueberschrift sind beispielbelegungen)
      1. function blubb_output($keyword, $input_data) {
      2. global $site_elements;
      3. global $options;
      4. $site_elements["addons_output"] = 1;
      5. switch($keyword) {
      6. case "blubbs_block":
      7. $text = $input_data[0];
      8. $ueberschrift = $input_data[1];
      9. $output = "{zu generierender html-code}";
      10. break;
      11. default:
      12. $site_elements["addons_output"] = 0;
      13. break;
      14. }
      15. return $output;
      16. }
  8. manchmal ist es nötig funktionen erst auszuführen, wenn alle daten bereitstehen, aber deren ausgabe noch in die generierte seite mit einfließen soll. im normalfall muß dazu früher oder später dann doch mitten im code "herumgefummelt" werden. das cms bietet auch dafür eine lösung an. dazu dient das array $$site_elements["execute"], dem zu diesem zweck entsprechend neue elemente angehängt werden können. das verfahren ähnelt hierbei den vorher beschriebenen.
    • als beispiel möge "blah" dienen. das array wird um diesen wert erweitert
      1. $site_elements["execute"][] = "blah"
    • die dazugehörige function sieht dann wie folgt aus: function {hinzugefügtes element}_execute() {
    • beispiel mit "blah": der header für die execute-funtion lautet dann
      1. function blah_execute() {
  9. desweiteren kann man die funktionen mit einer rechtevergabe versehen, um unbefugten zugriff zu vermeiden. näheres hierzu im abschnitt ACP-Rechtevergabe