Zum Inhalt springen

parseFunc wird nur 1x ausgeführt

Erstellt am 27. Juni 2012 · 3 Antworten · letzte Antwort am 19. Juli 2012

Tags: Frage

eisstern ·

Hallo,

ich habe mir für den RTE bzw. das HTML-Element eine zusätzliche Parsefunktion geschrieben. Sie erstellt Links zu Einträgen einer selbstentwickelten Extension.

Das Script funktioniert grundsätzlich schon einmal. Allerdings habe ich das Problem, dass es nur korrekt funktioniert, solange der Tag <link_archiv> nur genau ein mal in diesem Contentblock vorkommt. Sind mehrere vohrhanden, weil z.B. die Überschrift und ein mehr-Link verlinkt werden sollen, so wird die Überschrift korrekt als Link verarbeitet, aber alle weiteren Links werden mit Nichts ersetzt. Die Funktion weiß also dass da etwas zu parsen ist, aber liefert ein leeres Ergebnis zurück.

Hat jemand einen Denkanstoß für mich?

Die Codes dazu:

// and add the <link_archiv>
tt_content.text.20.parseFunc.tags {
	link_archiv < lib.parseFunc.tags.link
	link_archiv.stripNL = 0
	link_archiv = PHP_SCRIPT 
	link_archiv {
		file = fileadmin/templates/scripts/link_archiv_parser.php
	}
	parseFunc.constants = 1
}
tt_content.html.parseFunc.tags.link_archiv < tt_content.text.20.parseFunc.tags.link_archiv
$text = $this->cObj->getCurrentVal();

$parameters = explode(' ', $this->cObj->parameters['allParams']); 
$num_params = count($parameters);

if ($num_params > 0 && !empty($parameters[0])) {

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

	$this->cObj = t3lib_div::makeInstance('tslib_cObj');

	// Link erzeugen

	$link['parameter'] = $parameters[0];
	$link['target'] = '_self';
	$link['additionalParams'] = '&tx_ritbpwarchive_pi1[view]=single&tx_ritbpwarchive_pi1[uid]='.$parameters[1];

	$content = $this->cObj->typolink($text, $link);
}
jenses ·

Sorry, aber ich kann dir nur dringendst einen PHP-Grundkurs empfehlen,
das Script ist einfach nur totaler Schrott.

Schon mal was von einer Schleife (while()/foreach()) gehört?
Gibt es einen bestimmten Grund dafür, daß du $this->cObj überschreibst?

eisstern ·

Halle jenses,

danke für deine Antwort. Du hast natürlich Recht dass das überschreiben des cObj totaler Quatsch ist... Ich weiß nicht einmal wann ich es "kaputt eingefügt" habe. Nach all der Zeit am Projekt war ich nur noch blind.
Und das war auch schon das ganze Problem.

Eine foreach oder while wird hier nicht benötigt, da dies von alleine mit der parcefunc erledigt wird.

Also Ergebnis:

$text = $this->cObj->getCurrentVal();

$parameters = explode(' ', $this->cObj->parameters['allParams']); 
$num_params = count($parameters);

if ($num_params > 0 && !empty($parameters[0])) {

	// Link erzeugen

	$link['parameter'] = intval($parameters[0]);
	$link['target'] = '_self';
	$link['additionalParams'] = '&tx_ritbpwarchive_pi1[view]=single&tx_ritbpwarchive_pi1[uid]='.intval($parameters[1]);

	$content = $this->cObj->typolink($text, $link);
}