Zum Inhalt springen

rtehtmlarea hook link wizard add javascript code

Erstellt am 11. September 2014 · 3 Antworten · letzte Antwort am 13. September 2014

Tags: Links, JavaScript & AJAX, Frage

maritwho ·

[TYPO3 6.2.4]

Hallo zusammen!

Ich habe folgendes Problem und leider bisher nichts dazu im Netz gefunden.

Ich möchte gerne folgenden Hook verwenden:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/rtehtmlarea/mod3/class.tx_rtehtmlarea_browse_links.php']['extendJScode']

Dieser findet sich in der sysext rtehtmlarea/Classes/BrowseLinks.php und dient dazu, in das Link-Wizard im RTE JavaScript Code einzufügen.

Der Teil sieht folgendermaßen aus:

// Hook to overwrite or extend javascript functions
if (isset($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/rtehtmlarea/mod3/class.tx_rtehtmlarea_browse_links.php']['extendJScode']) && is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/rtehtmlarea/mod3/class.tx_rtehtmlarea_browse_links.php']['extendJScode'])) {
			$conf = array();
			$_params = array(
				'conf' => &$conf
			);
			foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/rtehtmlarea/mod3/class.tx_rtehtmlarea_browse_links.php']['extendJScode'] as $objRef) {
				$processor =& GeneralUtility::getUserObj($objRef);
				$JScode .= $processor->extendJScode($_params, $this);
			}
		}

Demnach habe ich eine Klasse geschrieben, die folgendermaßen aussieht:

namespace Vendor\VendorTracking\Hooks;

class ExtendJScodeHook {

	/**
	 * @param $_params
	 * @param $this
	 * @return string
	 */
	public function extendJScode($_params, $this) {
		return '';
	}
}

Die Funktion extendJScode() ist vorgegeben, sie ist diejenige, die das JS zurückgibt (hier gibt sie einen leeren String zurück, was aber nichts zur Sache tun sollte).

Den Hook habe ich folgendermaßen in der ext_localconf.php registriert:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/rtehtmlarea/mod3/class.tx_rtehtmlarea_browse_links.php']['extendJScode'][] = 'Vendor\\VendorTracking\\Hooks\\ExtendJScode';

Das Problem liegt jetzt in der Zeile

$processor =& GeneralUtility::getUserObj($objRef);

in BrowseLinks.php

Das 'class_exists()' auf meine Klasse in getUserObj() crashed. Das heißt, sie gibt kein TRUE oder FALSE zurück, sondern "stürzt ab".

Ich habe die Klasse auch in die ext_autoload.php geschrieben:

$extpath = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('vendor_tracking');
return array(
	'Vendor\VendorTracking\Hooks\ExtendJScodeHook' => $extpath . 'Classes/Hooks/ExtendJScodeHook.php',
);

Leider hat das auch nichts geholfen. Ich habe noch diverse andere Dinge ausprobiert und alle möglichen Funktionen im Core mit Debugg-Ausgaben versehen. Letztendlich immer mit dem gleichen Ergebnis:

Meine Hook-Klasse wird nicht geladen.

Vielleicht hat zufällig schon mal jemand diesen Hook verwendet und kann mir weiterhelfen.

Vielen Dank schon mal im Vorraus!

Sebastian

maritwho ·

Hi,

danke schonmal für die schnelle Antwort!

Ja, das hatte ich auch schon probiert, habs aber jetzt nochmal getestet. Diese beiden Versionen, mit und ohne Eintrag in ext_autoload.php. Leider ohne Erfolg:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/rtehtmlarea/mod3/class.tx_rtehtmlarea_browse_links.php']['extendJScode']['Vendor\\VendorTracking\\Hooks\\ExtendJscodeHook'] = 'EXT:vendor_tracking/Classes/Hooks/ExtendJScodeHook.php:Vendor\VendorTracking\Hooks\ExtendJScodeHook';
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/rtehtmlarea/mod3/class.tx_rtehtmlarea_browse_links.php']['extendJScode'][] = 'EXT:marit_tracking/Classes/Hooks/ExtendJScodeHook.php:Vendor\VendorTracking\Hooks\ExtendJScodeHook';

Also ansich funktioniert das eigentlich schon mit den Namespaces. z.B. bei diesem Hook:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/rtehtmlarea/mod3/class.tx_rtehtmlarea_browse_links.php']['browseLinksHook'][] = 'Vendor\\VendorTracking\\Hooks\\BrowseLinksHook';

Allerdings gibt es dazu auch ein Interface.

Jetzt weiß ich dann nicht mehr was ích noch probieren soll. Vielleicht muss ich mir eine andere Möglichkeit überlegen, wie ich meine JS-Code da reinbringe.

Dnke auf jeden Fall nochmal!

Gruß
Sebastian

jenses ·

Ich würde dir empfehlen,
daß du dir mal andere Extensions anschaust, die Hooks nutzen,
und dabei auf Groß-/Kleinschreibung usw. zu achten.
Z.B. die Extension metaseo