Zum Inhalt springen

Neuer Marker in Extension einbauen

Erstellt am 13. Oktober 2008 · 7 Antworten · letzte Antwort am 17. Juni 2009

Tags: Frage

walk2moon ·

Hallo Forum,

ich versuche gerade einen neuen Marker in die Extension pbsurvey einzubauen:

/**
* Fill the test marker 
*
* @return	string       String containing the filled marker.
*/

	function test() {
		$arrMarker = "123";
		$strOutput = $this->cObj->substituteMarkerArray($this->cObj->getSubpart($this->arrConfig['templateCode'],'TEST'),$arrMarker,'###|###',1);
				
		return $strOutput;
	}

Der Marker wird ersetzt bzw. er taucht nicht so ###TEST### auf der Seite auf. Leider wird aber auch nicht 123 ausgegeben. Sieht jemand meinen Fehler?

Grüße und Danke.
Walter

just2b ·

ist das ein quix und wir sollen jetzt raten
- ob function test() überhaupt eingebunden ist
- wo function test() geladen wird
- wie die lottozahlen sind?

georg

walk2moon ·

Hallo just2b,

sorry, natürlich schlecht, wenn da nur die Glaskugel helfen so

1. Die function text() wurde direkt in den pbsurvey_pi1.php eingebunden

2.Hier werden die Marker gesetzt und normalerweise auch ersetzt:

/**
	 * Define all possible markers in the survey template.
	 *
     * @return	string       String containing the filled template.
	 */
    function setMarkers() {
        $arrMarkers = array(
            'url'             => '$this->url',
            'pagenumbering'   => '$this->pageNumber($this->arrConfig["page_numbering"])',
            'backbutton'      => '$this->setButton("back")',
            'cancelbutton'    => '$this->setButton("cancel")',
            'submitbutton'    => '$this->setButton("submit")',
            'items'           => '$this->strOutItems',
            'totalitems'      => 'count($this->arrSurveyItems)',
            'doneitems'       => '$this->intPastItems',
        	'currentids'      => '$this->markerCurrentIds()',
            'stage'           => '$this->intStage',
            'header'          => '$this->processQuestion($this->arrPage)',
            'submitvalues'    => '$this->strCsCalls',
            'validation'      => '$this->strSsCalls',
            'validationerr'   => '$this->validationError($this->arrValidationErrors)',
            'formstyle'       => '$this->formStyle()',
            'noscript'        => '$this->noScript()',
//Hier wird test() aufgerufen
			'test'   => '$this->test()'
        );
        return $strOutput = $this->getMarkers($arrMarkers);
    }
    
    /**
	 * Process the marker array.
	 *
	 * @param	array		Definition array for TypoScipt and FlexForm
	 * @return	array       Configuration array made from TypoScript and FlexForm
	 */
    function getMarkers($arrMarkers) {
    	$strEmpty = '';
    	$arrTemp = array();
        foreach ($arrMarkers as $strKey => $strItem) {
        	if (!$strItem) {
        		$strItem = '$strEmpty';
        	}
            eval("\$arrTemp['".$strKey."'] = ".$strItem.";");
        }
        $strTemplate = $this->cObj->getSubpart($this->arrConfig['templateCode'],'SURVEYFORM');
        $strOutput =  $this->cObj->substituteMarkerArray($strTemplate,$arrTemp,'###|###',1);
        return $strOutput;
    }

3. Die könntest Du mir auch noch hier posten. Bei der Community, würde sicherlich jeder noch nen 1€ bekommen ;-)

Ich hoffe das reicht an Informationen, oder brauchst Du noch was mehr?

Grüße und Danke
Walter

EDIT: Problem gefunden: Fehlerhafter Subpart im HTML-Template hatte das ! im Kommentar vergessen. Mann, Mann... Sorry für die voreilige Thread-Eröffnung. Versuche das in Zukunft zu vermeiden.

walk2moon ·

Oh Mann, ich muss nochmals zurückrudern.

Ich versuche nun an einer anderen Stelle einen Marker zu ersetzen. Das HTML sieht so aus:

<!-- ###SINGLEVIEW### begin -->
###FIELD1###
<!-- ###SINGLEVIEW### end -->

Nun möchte ich mit folgendem Code den Marker ###FIELD1### ersetzen:

$this->templateCode = $this->cObj->fileResource('EXT:pbsurvey/pi1/template.html');
	
		$template['test'] = $this->cObj->getSubpart($this->templateCode,'SINGLEVIEW');
		$markerArray['###FIELD1###'] = 'Testtext';
		$strOutput = $this->cObj->substituteMarkerArrayCached($template['test'], $markerArray);
				
		return $strOutput;

Das funktioniert nicht, ich weiß aber nicht warum.
Brächte da wohl doch etwas Hilfe. :o

Danke und Gruß
Walter

walk2moon ·

Hallo Georg,

danke für deine Hilfe. Jetzt passt es. Ich habe das Ganze jetzt auch noch über einen Hook gelöst, da ich dort jetzt ein separates Template habe und ich mein Zeug nun schön getrennt von der pbsurvey-Ext entwickeln kann.

Danke, du bist klasse!

Gruß
Walter

walk2moon ·

Hallo,

nochmal zu dem Thema. Ich musste gerade feststellen, dass ich mich wohl doch etwas zu früh gefreut habe und mir mein Marker nur ausgegeben wird, weil er in die $content-Variable "gerutscht" ist.

Nochmal die Frage, kann ich über einen normalen Hook dieser Art:

function callHook($arrItem) {
    	if (is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->extKey][$this->prefixId]['processHookItem'])) {
			foreach($GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->extKey][$this->prefixId]['processHookItem'] as $_classRef) {
				$_procObj = & t3lib_div::getUserObj($_classRef);
				$strOutput = $_procObj->hookItemProcessor($arrItem, $this);
			}
			return $strOutput;
    	}
    }

meinen eigenen Marker einschleußen? Ich habe mir das so vorgestellt:

<?php

class tx_extkey {
function hookItemProcessor($arrItem,&$pObj) {
...
//loading template	
$pObj->templateCode = $pObj->cObj->fileResource('EXT:pbsurvey/pi1/template.html');
	
$template['test'] = $pObj->cObj->getSubpart($pObj->templateCode,'###SINGLEVIEW###');
                $markerArray['###FIELD1###'] = 'mein Text'
                $strOutput.= $pObj->cObj->substituteMarkerArrayCached($template['test'], $markerArray);
		
		}
                return $strOutput;
...
?>

Leider wird ###FIELD1### nicht ersetzt. Ich kapier das anscheinend doch noch nicht so ganz. Vielleicht jemand, der sich meinem Problem annehmen kann?

Grüße
Walter

yahooooo ·

Also in Zeile 10 fehlt schonmal ein Semikolon.

Sorry, für die Leichenfledderei. Bin gerade auf der Suche darauf gestoßen...