[TYPO3-german] eid und problem mit klassen

Manfred Rutschmann manfred at rutschmann.biz
Tue Jun 23 19:58:49 CEST 2009


hallo liste,

jetzt sitz ich schon stunden dran und finde den denkfehler nicht. ich
brauch echt mal nen guten rat.

folgendes:

class tx_mrmuseen_pi1 extends tslib_pibase {
 var $prefixId				= 'tx_mrmuseen_pi1';
 var $scriptRelPath			= 'pi1/class.tx_mrmuseen_pi1.php';
 var $extKey				= 'mr_museen';
 var $pi_checkCHash			= true;
 public $debug				= false;
 private $metaOverrideLength= false;
 protected $getVars 		= array();
 private $dvData			= array();
 public $piVars 			= array();

...

}

ist meine Plugin klasse. Hier werden Details, Lists, Metatags und was weiss
ich nicht alles mit Methoden der Klasse erzeugt. Nun gibt es Kommentare im
System. Aus meiner Plugin klasse wird das Kommentarobjekt erzeugt:

$this->komment = t3lib_div::makeInstance('tx_mrmuseen_pi1_komments');
$this->komment->init();
...
$this->komment->setMode('list');
$this->komment->setUid($this->piVars['uid']);
$kList = $this->komment->fetchList();

##### So schaut die klasse dazu aus:
class tx_mrmuseen_pi1_komments extends tx_mrmuseen_pi1 {

	function init()	{
		// Sprachhandling laden
		$this -> pi_loadLL();
		
		// cObj laden!
		$this -> cObj = t3lib_div::makeInstance('tslib_cObj');
	}
...
}
#####
Soweit so gut, Kommentare werden aus der Datenbank ausgeben, Sachen wie 
$this -> cObj -> stdWrap() oder auch $this->pi_RTEcssText() werden direkt
in der pi1 erledigt. Das Objekt komment gibt mir erst einmal Datenfelder
und Listen als Array zurück. Nun können die Kommentare auch mal länger sein
und werden gecropt angezeigt. Für JS Benutzer soll neben dem normalen laden
der Seite auch die Daten einfach über Ajax nachgeladen werden. Die
sauberste Methode scheint mir eID zu sein, da hier nur geladen und
instanziert wird, was gebraucht wird. Die Ajax geschichte ist wiederrum
eine eigene klasse die nur über eID angesteuert werden soll:

class tx_mrmuseen_pi1_ajax extends tx_mrmuseen_pi1 {

var $prefixId					= 'tx_mrmuseen_pi1_ajax';		// Same as class name
var $scriptRelPath				= 'pi1/class.tx_mrmuseen_pi1_ajax.php';	// Path to 		
this script relative to the extension dir.
var $extKey						= 'mr_museen';	// The extension key.
var $pi_checkCHash				= true;

	function main(){

		$this->getVars = t3lib_div::_GP('tx_mrmuseen_ajax');

		$TSFE = tslib_eidtools::initFeUser(); // Initialize FE user object		
	    tslib_eidtools::connectDB(); //Connect to database

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

		$this->main = t3lib_div::makeInstance('tx_mrmuseen_pi1');
		$this->main->init();		
		
		$this->main->komment->init();

		switch ($this->getVars['mode']) {
			case singleKommentText:
				echo $this->main->komment->fetchHeader();
				echo $this->getSingleKommentText();
				
			break;
			
		}

	}
	function getSingleKommentText() {
		$this->main->komment->setKommentUid($this->getVars['kommentUid']);
		return
tslib_pibase::pi_RTEcssText($this->main->komment->getSingleKommentText());
	}
}

Das ganze funktioneiert perfekt, auf die Daten kann ich zugreifen. Das
Ergebnis wird dann per JS in einen DIV verpflanzt. Aber:
tslib_pibase::pi_RTEcssText() oder $this->pi_RTEcssText() funktioniert gar
nicht. Das ist extrem dumm. In der Klasse komment wird, wenn diese über das
pi1 instanziert wird, zum Beispiel cObj->enableFields verwendet, was auch
klappt, nur wenn komments hier instanziert wird, oder von hier aus über
$this->main->komment, funktionieren auch dort die grundlegenden Sachen
nicht.

Ou mann... jemand ne Idee?

Gruß Manne


More information about the TYPO3-german mailing list