Hooks

From EQdkp Plus
Jump to navigation Jump to search


Hooks dienen zur Erweiterung deines EQdkp Plus. Die Hooks werden an bestimmten Stellen im EQdkp Plus aufgerufen. Wo genau kannst du weiter unten nachlesen.

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>',
		  	));
		  	
		  	/*
		  	 *  }
		  	 * 
		  	 */
		}
	}
}
?>