Hooks
Hooks dienen zur Erweiterung deines EQdkp Plus. Die Hooks werden an bestimmten Stellen im EQdkp Plus aufgerufen. Wo genau kannst du weiter unten nachlesen.
Contents
Bestehende Hooks
Hook | Parameter | Rekursiv | Beschreibung |
---|---|---|---|
portal | keine | Nein | Dieser Hook wird aufgerufen, wenn das Portal angezeigt wird. Ideal zum Erweitern des Headers oder anderen Bereichen. |
search | keine | Nein | Erweiterung der Suchmaschine, benötigt aber ein pdh-Modul, Beispiel siehe Shoutbox-Plugin |
wrapper | id: String, link: String | Nein | Erweiterung des Wrappers. Beispiel siehe latestposts-Modul |
bbcodes | text: String, state: String | Ja | Bietet Möglichkeit eigene BBCodes hinzuzufügen. |
Ab EQdkp Plus 2.0
Ab EQdkp Plus 2.0 stehen zusätzliche Hooks zur Verfügung
Hook | Parameter | Rekursiv | Beschreibung |
---|---|---|---|
menu | Mehrdimensionales Array mit den Menüeintragen | Nein | Dieser Hook enthält alle Einträge des Menüs als mehrdimensionales Array. Jede Dimension ist dabei ein Menülevel. |
menu_onelevel | Array mit den Menüeinträgen | Ja | Es werden alle Menüeinträge dem Hook übergeben, also einfaches Array, ohne Dimensionen. |
game_chartooltip | tooltip: string; char_id: integer; | Ja | tooltip enthält den komplett fertig geparsten Charakter-Tooltip |
article_parse | content: string; view: string, article_id: integer; specific_id: string | Ja | content enthält den komplett fertig geparsten Artikel |
tinymce_bbcode_setup | js: string; env: object; | Ja | Setup-Methode des BBCode-Editors, z.B. zum Einfügen von eigenen Buttons |
tinymce_normal_setup | js: string; env: object; | Ja | Setup-Methode des Normalen WYSIWYG Editors, z.B. zum Einfügen von eigenen Buttons |
tinymce_inline_simple_setup | js: string; selector: string; env: object; | Ja | Setup-Methode des abgespeckten Inline-Editors, z.B. zum Einfügen von eigenen Buttons |
tinymce_inline_setup | js: string; selector: string; env: object; | Ja | Setup-Methode des normalen Inline-Editors, z.B. zum Einfügen von eigenen Buttons |
comments_save | user_id; attach_id; comment; page; reply_tp; permission; | Ja | Wird vor dem Speichern des Kommentares getriggert. |
admin_tasks | - | Nein | Erwartet ein Array nach diesem Schema: $arrTasks = array(
//Confirm new Chars
'confirmChars' => array(
'name' => 'uc_confirm_list',
'icon' => 'fa fa-check',
'notify_func' => array($this, 'ntfyConfirmChars'),
'content_func' => array($this, 'contentConfirmChars'),
'action_func' => array($this, 'actionHandleChars'),
'actions' => array(
'confirm' => array('icon' => 'fa fa-check', 'title' => 'uc_confirm_char', 'permissions' => array('a_members_man')),
'delete' => array('icon' => 'fa-trash-o', 'title' => 'delete_member', 'permissions' => array('a_members_man')),
),
),
); |
massmail_content | - | Nein | Erwartet ein Array nach diesem Schema: $data = array(
'latest_news' => array(
'name' => $this->user->lang('news'),
'list' => $arrNewsList,
),
); |
calendar | start: integer; end: integer; | Nein | Erwartet ein Array nach diesem Schema: $events[] = array(
'className' => 'cal_birthday',
'title' => $this->pdh->get('user', 'name', array($birthday_uid)),
'start' => $birthday_y.'-'.$this->time->date('m-d', $birthday_ts),
'end' => $birthday_y.'-'.$this->time->date('m-d', $birthday_ts),
'allDay' => true,
'textColor' => '#000000',
'backgroundColor' => '#E8E8E8',
'borderColor' => '#7F7F7F',
'author' => 'Authorname',
'note' => 'Note',
); |
main_menu_items | - | Nein | Hinzufügen von Links. Erwartet ein Link-Array, z.B.: $main_menu[] = array(
'link' => $this->pdh->get('mediacenter_categories', 'path', array($intCategoryID)),
'text' => $strCategoryName,
'check' => 'u_mediacenter_view',
'default_hide' => 1,
'link_category' => 'mc_mediacenter',
); |
calendarevent_chartooltip | member_id: integer | Nein | Erwartet ein Array mit dem Inhalt für den Tooltip. Jeder Array-Eintrag ist dabei eine neue Zeile.
$membertooltip[] = "Das ist Zeile 1";
$membertooltip[] = "Das ist Zeile 2";
return $membertooltip; |
userprofile_customtabs | user_id: integer | Nein | Erstellt einen eigenen Tab auf der Benutzerprofil-Seite. Erwartet ein Array mit dem Inhalt für den Tab.
$out = array(
'title' => "Title of the Tab",
'content' => "Content of the Tab",
);
return $out; |
Ab EQdkp Plus 2.3
Ab EQdkp Plus 2.3 stehen zusätzliche Hooks zur Verfügung
Hook | Parameter | Rekursiv | Beschreibung |
---|---|---|---|
user_avatarimg | user_id:integer; fullsize:boolean; avatarimg:string; avatartype:int; default:boolean; | No | Wird bei der Anzeige des Benutzeravatars getriggert. |
avatar_provider | for_usersettings:boolean; | No | return array('discord' => array('name' => 'Discord')); |
user_inserted | user_id:integer; username:string; data: Array; | No | Wird bei der Speicherung eines Benutzers getriggert. Nur lesend. |
user_updated | user_id:integer; data: Array; | No | Wird bei der Speicherung eines Benutzers getriggert. Nur lesend. |
user_delete | user_id:integer | No | Wird bei der Löschung eines Benutzers getriggert. Nur lesend. |
user_reset | own_userid:integer | No | Wird bei der Löschung aller Benutzer getriggert. Nur lesend. |
viewraid | raid_id:integer | No | Wird beim Anzeigen eines Raids im Frontend getriggered. Nur lesend. Es können aber TPL-Listener wie z.B. "viewraid_beforetables" verwendet werden. |
Sollten weitere Hooks im EQdkp Plus notwendig sein, sprecht uns doch einfach im Forum an.
Neuen Hook erstellen
Dateiname
Der Dateiname muss den Namen des Hooks an letzter Stelle vor ".class.php" enthalten. Beispiel: myhook_wrapper.class.php oder anotherhook_portal.class.php
Classname
Der Klassenname muss gleich dem Dateinamen ohne ".class.php" entsprechen, also "myhook_wrapper" oder "anotherhook_portal".
Methodenname
Der Name der Methode, die aufgerufen werden soll, muss gleiche dem Hooknamen sein, also "wrapper" bzw. "portal";
Ordner
Dein Hook muss in den Ordner "core/hooks" abgelegt werden.
Rekursive Hooks
Rekursive Hooks erwarten, dass das $arrOptions-Array der Methode auch wieder zurückgegeben wird. Beispiel:
class myhook_game_chartooltip extends gen_class
{
/* List of dependencies */
public static $shortcuts = array();
/**
* game_chartooltip
* Do the hook 'game_chartooltip'
*
* @return array
*/
public function game_chartooltip($arrOptions)
{
$arrOptions['tooltip'] .= 'This is an addition';
return $arrOptions;
}
}
Beispiel-Hook
Dieser Beispiel-Hook dient zum Anzeigen des Reamlstatus in der Persönlichen Leiste. Dateiname: realmstatus_portal_hook.class.php
<?php
/*
* Project: EQdkp Shoutbox
* License: Creative Commons - Attribution-Noncommercial-Share Alike 3.0 Unported
* Link: http://creativecommons.org/licenses/by-nc-sa/3.0/
* -----------------------------------------------------------------------
* Began: 2008
* Date: $Date: 2012-11-11 18:36:16 +0100 (So, 11. Nov 2012) $
* -----------------------------------------------------------------------
* @author $Author: godmod $
* @copyright 2008-2011 Aderyn
* @link http://eqdkp-plus.com
* @package shoutbox
* @version $Rev: 12434 $
*
* $Id: realmstatus_portal_hook.class.php 12434 2012-11-11 17:36:16Z godmod $
*/
if (!defined('EQDKP_INC'))
{
header('HTTP/1.0 404 Not Found');exit;
}
/*+----------------------------------------------------------------------------
| realmstatus_portal_hook
+--------------------------------------------------------------------------*/
if (!class_exists('realmstatus_portal_hook'))
{
class realmstatus_portal_hook extends gen_class
{
/* List of dependencies */
public static $shortcuts = array('user', 'tpl', 'game', 'config');
/**
* portal
* Do the hook 'portal'
*
* @return array
*/
public function portal()
{
// try to load the status file for this game
$game_name = strtolower($this->game->get_game());
$status_file = $this->root_path.'portal/realmstatus/'.$game_name.'/status.class.php';
if (file_exists($status_file))
{
include_once($status_file);
$class_name = $game_name.'_realmstatus';
$status = registry::register($class_name);
if ($status){
$strServerStatus = $status->checkServer($this->config->get('servername'));
$text = $this->config->get('servername');
if ($strServerStatus = 'up') $text .= ' <span class="positive">online</span>';
if ($strServerStatus != 'up') $text .= ' <span class="negative">offline</span>';
$this->tpl->assign_block_vars('personal_area_addition', array(
'TEXT' => $text,
));
}
}
}
}
}
if(version_compare(PHP_VERSION, '5.3.0', '<')) {
registry::add_const('short_realmstatus_portal_hook', realmstatus_portal_hook::$shortcuts);
}
?>
Datei: personalarealinks_portal.class.php
<?php
/*
* Project: EQdkp Shoutbox
* License: Creative Commons - Attribution-Noncommercial-Share Alike 3.0 Unported
* Link: http://creativecommons.org/licenses/by-nc-sa/3.0/
* -----------------------------------------------------------------------
* Began: 2008
* Date: $Date: 2012-11-11 18:36:16 +0100 (So, 11. Nov 2012) $
* -----------------------------------------------------------------------
* @author $Author: godmod $
* @copyright 2008-2011 Aderyn
* @link http://eqdkp-plus.com
* @package shoutbox
* @version $Rev: 12434 $
*
* $Id: personalarealinks_portal_hook.class.php 12434 2012-11-11 17:36:16Z godmod $
*/
if (!defined('EQDKP_INC'))
{
header('HTTP/1.0 404 Not Found');exit;
}
/*+----------------------------------------------------------------------------
| personalarealinks_portal_hook
+--------------------------------------------------------------------------*/
if (!class_exists('personalarealinks_portal_hook'))
{
class personalarealinks_portal_hook extends gen_class
{
/* List of dependencies */
public static $shortcuts = array('user', 'tpl', 'game', 'config');
/**
* portal
* Do the hook 'portal'
*
* @return array
*/
public function portal()
{
/*
* Uncomment, if the link should be for logged in users
* if ($this->user->is_signedin()) {
*
*/
$this->tpl->assign_block_vars('personal_area_addition', array(
'TEXT' => '<a href="http://mylink.com/xyz/">My Link</a>',
));
/*
* }
*
*/
}
}
}
?>