Zum Inhalt springen

Voodo in $this->cObj

Erstellt am 23. April 2007 · 3 Antworten · letzte Antwort am 24. April 2007

Tags: Frage

asap ·

Hallo typo3 Freunde,
ich bin neu in diesem Forum und grüße erstmal alle.
Meine Typo3 Kenntnisse habe ich erst in den letzten 3 Monaten gesammelt und deshalb noch nicht Sattelfest in der Extension Programmierung. Ich habe ein komisches Problem mit einer Extension. Diese Extension hat ein FE Plugin welches über ein Flexform Feld konfiguriert wird. Das Auslesen des Flexform Feldes mit pi_initPIFlexForm() und pi_getFFValue($this->cObj->data['pi_flexform'],...) schlägt fehl.
Der Grund dafür könnte sein daß das Content Object nicht funzt,
denn wenn ich in der "main" der Extension Klasse mit t3lib_div::debug($this->cObj,'Analyse'); dieses Anzeigen lasse erhalte ich folgendes.
....
[image_effects] => Array
(
[1] => -rotate 90
[2] => -rotate 270
[3] => -rotate 180
[10] => -colorspace GRAY
[11] => -sharpen 70
[20] => -normalize
[23] => -contrast
[25] => -gamma 1.3
[26] => -gamma 0.8
)

[data] => Array
(
[currentValue_kidjls9dksoje] =>
)

[oldData] => Array
(
)

[alternativeData] =>
[parameters] => Array
(
)

[currentValKey] => currentValue_kidjls9dksoje
[currentRecord] => _NO_TABLE:
[currentRecordTotal] => 0
[currentRecordNumber] => 0
[parentRecordNumber] => 0
[parentRecord] => Array
(
[data] => Array
(
[uid] => 169
[pid] => 93
...

Nun meine eigentlichen Fragen
1. müssten nicht im Feld "data" die Felder der Tabelle tt_content zu sehen sein?

2. Unter "currentRecord" müsste doch etwas wie tt_content:45 stehen oder ?

Vielleicht habe ich auch das Plugin falsch eingebunden (obwohl Basisextension mit Kickstarter erstellt). Ich selber kann den Fehler nicht aufspüren, obwohl schon sämtliche Foren, 2 Bücher und Tutorials durchgewusselt habe komme ich nicht an die Flexform infos. Diese sind aber in der tt_content gespeichert und zu finden. Also im BE kein Problem.

Ich gehe mal davon aus das ich irgendwie einen saudummen Anfängerfehler begangen habe und diesen nicht aufspüre.

Für jede Info/Tip bedanke ich mich im voraus.
MfG ASAP

asap ·

Hallo da bin ich wieder,
das Tutorial das mischa(besten dank) vorgeschlagen hat, hat leider keine neuen Erkenntnisse gebracht.
Nach wie vor kein $this->cObj->data['pi_flexform'].

Deshalb poste ich mal den ext_tables.php part mit den Anweisungen für die Extension.

...

t3lib_div::loadTCA('tt_content');
$TCA['tt_content']['types']['list']['subtypes_excludelist'][$_EXTKEY.'_pi1']='layout,select_key,pages';
$TCA['tt_content']['types']['list']['subtypes_addlist'][$_EXTKEY.'_pi1']='pi_flexform';
t3lib_extMgm::addPlugin(array('LLL:EXT:eternitproduct/locallang_db.xml:tt_content.list_type_pi1', $_EXTKEY.'_pi1'),'list_type');
t3lib_extMgm::addStaticFile($_EXTKEY,"pi1/static/","Eternit basic template");
t3lib_extMgm::addPiFlexFormValue($_EXTKEY.'_pi1','FILE:EXT:eternitproduct/flexform_plugin.xml');
if (TYPO3_MODE=="BE")	$TBE_MODULES_EXT["xMOD_db_new_content_el"]["addElClasses"]["tx_eternitproduct_pi1_wizicon"] = t3lib_extMgm::extPath($_EXTKEY).'pi1/class.tx_eternitproduct_pi1_wizicon.php';

Hier zeige ich euch den code aus der pi1/static/setup.txt

# Includes the eternitlib:
includeLibs.tx_eternitproduct_pi1 = typo3conf/ext/eternitproduct/pi1/class.tx_eternitproduct_pi1.php

plugin.tx_eternitproduct_pi1 = USER
plugin.tx_eternitproduct_pi1 {
  userFunc = tx_eternitproduct_pi1->main
}

tt_content.list.20.eternitproduct_pi1 =< plugin.tx_eternitproduct_pi1

Hier mal die class.tx_eternitproduct_pi1.php

class tx_eternitproduct_pi1 extends tslib_pibase {
	var $prefixId      = 'tx_eternitproduct_pi1';		// Same as class name
	var $scriptRelPath = 'pi1/class.tx_eternitproduct_pi1.php';	// Path to this script relative to the extension dir.
	var $extKey        = 'eternitproduct';	// The extension key.
	var $pi_checkCHash = true;
	
	/**
	 * The main method of the PlugIn
	 *
	 * @param	string		$content: The PlugIn content
	 * @param	array		$conf: The PlugIn configuration
	 * @return	The content that is displayed on the website
	 */
	function main($content,$conf)	{
		$this->conf=$conf;
		$this->pi_setPiVarDefaults();
		$this->pi_loadLL();
		$this->pi_initPIflexform();
      		      $row=$this->pi_getRecord(tt_content,'45');   
		$flexformConf=$row['pi_flexform']; 
		$piFlexForm = $this->cObj->data['pi_flexform'];
		$content='
			<p>pi_flexform -> '.$piFlexForm.'</p>
			<p>uid -> '.$this->pi_getFFvalue($piFlexForm, 'choose_product').'</p>
			<p>Hello World '.$flexformConf.'</p>
		';
		t3lib_div::debug($this->cObj,'Analyse');
		return $this->pi_wrapInBaseClass($content);
	}
}

$flexformConf gibt mir das Flexform als xml zurück, ergo hat das BE die Plugin Konfiguration in der tt_content.pi_flexform gespeichert.

Das Plugin wird in Templates eingebunden die mit TemplaVoila eingepflegt worden sind. Könnte da vielleicht das Problem enstanden sein?

fällt hier irgendjemanden auf, was verkehrt sein könnte?

Hat jemand eine Ahnung warum $this->cObj->data nur 'currentValue_kidjls9dksoje' beinhaltet?

Auszug aus t3lib_div::debug($this->cObj,'Analyse');
...
[26] => -gamma 0.8
)

[data] => Array
(
[currentValue_kidjls9dksoje] =>
)

[oldData] => Array
(
...

Gibt es noch andere Konfigurations Möglichkeiten ausser den in den Tutorials beschriebenen? Andere Dateien als ext_localconf.php / ext_tables.php / pi1/static/setup.txt

für weitere Infos / Tips / Vorschläge bin ich sehr dankbar
MfG
asap

asap ·

So alles klar,
ich habe den Wurm endlich gefunden.
Wer nochmal dies Problem haben sollte (hoffentlich nicht) sollte sich seine TemplaVoila Konfiguration anschauen. Denn dort hat man die Option sich das alte Seitenmodul gleichzeitig mit anzeigen zu lassen. Das ist mir geschehen. Da ich die Ausgabe im TemplaVoila Template angezeigt habe aber gleichzeitig das Content Element in dem altem Seitenmodul abgelegt habe, konnte das cObj auch keine Infos aus der tt_content haben da ja im TemplaVoila Seitenmodul auch kein Plugin eingepflegt war.

MfG
asap