---
title: "Hook richtig anwenden?"
url: "https://www.typo3.net/d/111372-hook-richtig-anwenden"
source: "typo3.net"
tags: ["Extensions","Entwicklung","Frage"]
created: "2012-07-17"
last_reply: "2012-07-20"
replies: 6
solved: false
page: 1
pages: 1
lang: "de"
---

# Hook richtig anwenden?

Extensions › Entwicklung · 6 Antworten · gestartet 2012-07-17

## Eröffnungsbeitrag

**dfluess** · 2012-07-17 · [Beitrag #1](https://www.typo3.net/d/111372-hook-richtig-anwenden/1)

Hallo Leute, seit einigen Stunden komme ich nicht weiter. Ich möchte die Marker einer Extension erweitern und stoße da so an meine Grenzen. Es geht um die Extension **dr_blob**

Im Plugin steht folgender Hook:

```php
	// Adds a hook for processing additional content markers
if (is_array( $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['dr_blob']['additionalContentMarkerHook'] ) ) {
	foreach( $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['dr_blob']['additionalContentMarkerHook'] as $_classRef ) {
		$_procObj = & t3lib_div::getUserObj( $_classRef );
		$arrContentMarker = $_procObj->additionalContentMarkerProcessor( $arrContentMarker, $lConf, $this );
	}
}
```

Mein Aufruf in der Class:

```php
class tx_dfdrblobextended_pi1 {
    function additionalContentMarkerProcessor( $markerArray, $row, $lConf)   {
        $markerArray['###BLOB_PRICE###'] = $row['uid'];		
        return $markerArray;
    }
}
```

Zum Test habe ich das immer vorkommende Datenfeld 'uid' verwendet, bekomme es jedoch nicht ausgelesen'

Der Marker wird mit einem normalen Text richtig ersetzt. Das einbinden in TYPO3 funktioniert  also schon mal.

```php
$markerArray['###BLOB_PRICE###'] = 'Test';
```

Kann mir jemand auf die Sprünge helfen?

Danke vorab..

## Antworten

### [#2](https://www.typo3.net/d/111372-hook-richtig-anwenden/2) · dfluess · 2012-07-17

Hab alles immer wieder rauf und runter geschaut. Das müsste doch eigentlich funktionieren(?) :o
Hat keiner eine Idee?

Hier vielleicht noch der Komplette Code der Funktion. Nur die Marker habe ich etwas gekürzt...

```php
<?php
protected function getContentMarkerArray( $lConf ) {

$temp = preg_replace( '/\#\#\#TIMES\#\#\#/', '%s', $this->pi_getLL( 'list_field_downloadcount_wrap' ), 1 );
$downloadCount = sprintf( $temp, $this->getFieldContent('download_count') );

$tmp['cat'] = $this->getCategories( $this->getFieldContent('uid') );
if( !empty( $tmp['cat'] ) ) {
	$tmp['lstCat'] = implode( ( $lConf['categoryDivider'] ? $lConf['categoryDivider'] : ',' ), $tmp['cat'] );
	$arrMarker['###BLOB_CATEGORIES###'] = $this->local_cObj->stdWrap( $tmp['lstCat'], $lConf['category_stdWrap.'] );
}

$row = $this->internal['currentRow'];
$row['blob_filext'] = tx_drblob_div::getFileExtension( $row['blob_name'] );
$this->local_cObj->start( $row, tx_drblob_div::$CONTENT_TABLE );		
$arrContentMarker = array();	
$arrContentMarker['###BLOB_UID###'] = $row['uid'];
$arrContentMarker['###BLOB_TITLE###'] = $this->local_cObj->stdWrap( $row['title'], $lConf['title_stdWrap.'] );


// Adds a hook for processing additional content markers
if (is_array( $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['dr_blob']['additionalContentMarkerHook'] ) ) {
	foreach( $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['dr_blob']['additionalContentMarkerHook'] as $_classRef ) {
		$_procObj = & t3lib_div::getUserObj( $_classRef );
		$arrContentMarker = $_procObj->additionalContentMarkerProcessor( $arrContentMarker, $lConf, $this );
	}
}

return $arrContentMarker;
}

?>
```

### [#3](https://www.typo3.net/d/111372-hook-richtig-anwenden/3) · vince · 2012-07-18

hallo,

kann's sein, dass Du die Parameter vertauscht hast?
da steht

```php
$arrContentMarker = $_procObj->additionalContentMarkerProcessor( $arrContentMarker, $lConf, $this );
```

die Methode schaut hingegen so aus:

```php
function additionalContentMarkerProcessor( $markerArray, $row, $lConf)
```

$row wird gar net übergeben. Versuch mal

```php
$arrContentMarker = $_procObj->additionalContentMarkerProcessor( $arrContentMarker, $row, $lConf );
```

gruß,
vince.

### [#4](https://www.typo3.net/d/111372-hook-richtig-anwenden/4) · dfluess · 2012-07-18

Du hast natürlich Recht! Der Hook steht nur schon so drin. Ich habe das geändert und nun funktioniert's Danke.

### [#5](https://www.typo3.net/d/111372-hook-richtig-anwenden/5) · dfluess · 2012-07-18

Und es geht weiter mit den Problemen. Ich möchte natürlich auch die pi_getLL nutzen, um die Label ebenfalls zu ersetzten.

Ich bekomme eine Fehlermeldung:

**Fatal error: Cannot re-assign $this
in /html/typo3/typo3conf/ext/df_drblobextended/pi1/class.tx_dfdrblobextended_pi1.php on line 47**

Meine Class sieht nun so aus:

```php
<?php

require_once( PATH_tslib . 'class.tslib_pibase.php' ); 

class tx_dfdrblobextended_pi1 extends tslib_pibase {	
	
function additionalContentMarkerProcessor( $arrContentMarker, $row, $lConf ) {
		
 $arrContentMarker['###BLOB_PRICE###'] = $row['tx_dfdrblobextended_price'];
		
 return $arrContentMarker;
}

function additionalGlobalMarkerProcessor( $arrLanguageMarker, $mode, $this ) {
		
 $this->pi_loadLL();		
 $arrLanguageMarker['###LANG_PRICE###'] = $this->pi_getLL( 'list_price' );
	
 return $arrLanguageMarker;
 }	
}

?>
```

Die originale Funktion, inkl- Hook (Marker wieder gekürzt):

```php
<?php
protected function getGlobalMarkerArray( $mode, $fileExists=true ) {
	$mode = ( $mode!='search' ? $mode : 'list' );
	$arrLanguageMarker = array();
	$arrLanguageMarker['###LANG_DOWNLOADCOUNT###'] 	= $this->pi_getLL( 'list_field_downloadcount' );
	$arrLanguageMarker['###LANG_MORE###'] 			= $this->pi_getLL( $mode .'_button_show' );


	// Adds a hook for processing additional content markers
	if (is_array( $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['dr_blob']['additionalGlobalMarkerHook'] ) ) {
		foreach( $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['dr_blob']['additionalGlobalMarkerHook'] as $_classRef ) {
			$_procObj = & t3lib_div::getUserObj( $_classRef );
			$arrContentMarker = $_procObj->additionalGlobalMarkerProcessor( $arrLanguageMarker, $mode, $this );
		}
	}
	return $arrLanguageMarker;
}

?>
```

Sehen hier wieder vier Augen mehr? :-/

### [#6](https://www.typo3.net/d/111372-hook-richtig-anwenden/6) · vince · 2012-07-20

```php
function additionalGlobalMarkerProcessor( $arrLanguageMarker, $mode, $this )
```

Die Variable $this sollte umbenannt werden. Der Name $this ist reserviert , kann nicht überschrieben werden.

z.B. so:

```php
function additionalGlobalMarkerProcessor( $arrLanguageMarker, $mode, $obj ) {
 
 $obj->pi_loadLL();		
 $arrLanguageMarker['###LANG_PRICE###'] = $obj->pi_getLL( 'list_price' );
 
 return $arrLanguageMarker;
 }
```

(den Rest kannst lassen wie's ist)

Gruß,
Vince.

### [#7](https://www.typo3.net/d/111372-hook-richtig-anwenden/7) · dfluess · 2012-07-20

Danke! ;)

---

Quelle: „Hook richtig anwenden?“, typo3.net, https://www.typo3.net/d/111372-hook-richtig-anwenden
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
