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:
// 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:
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.
$markerArray['###BLOB_PRICE###'] = 'Test';
Kann mir jemand auf die Sprünge helfen?
Danke vorab..
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
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;
}
?>
hallo,
kann's sein, dass Du die Parameter vertauscht hast?
da steht
$arrContentMarker = $_procObj->additionalContentMarkerProcessor( $arrContentMarker, $lConf, $this );
die Methode schaut hingegen so aus:
function additionalContentMarkerProcessor( $markerArray, $row, $lConf)
$row wird gar net übergeben. Versuch mal
$arrContentMarker = $_procObj->additionalContentMarkerProcessor( $arrContentMarker, $row, $lConf );
gruß,
vince.
Du hast natürlich Recht! Der Hook steht nur schon so drin. Ich habe das geändert und nun funktioniert's Danke.
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
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
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? :-/
function additionalGlobalMarkerProcessor( $arrLanguageMarker, $mode, $this )
Die Variable $this sollte umbenannt werden. Der Name $this ist reserviert , kann nicht überschrieben werden.
z.B. so:
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.