Zum Inhalt springen

Extension seminars XCLASS Problem

Erstellt am 30. Oktober 2009 · 4 Antworten · letzte Antwort am 7. Dezember 2009

Tags: Frage

drauscher ·

Extension seminars XCLASS Problem

permalink
Hallo Gemeinde,

um in der singleView der Extension 'seminars' die Veranstalter sortieren zu können, möchte ich eine XCLASS verwenden. Leider wird die XCLASS nicht eingebunden.

Konkret:
Ich möchte die Klasse 'tx_seminars_OrganizerBagBuilder' ändern. Die befindet sich im Ordner typo3conf/ext/seminars/.

Diese Punkte habe ich getestet:

  • * Eintrag in der ext_localconf.php meiner Extension passt
    * XCLASS-Eintrag wird in das Array $TYPO3_CONF_VARS geschrieben
    * mein geänderter Code funzt auch, wenn ich ihn direkt in die Klasse 'tx_seminars_OrganizerBagBuilder' schreibe
    * die Reihenfolge in der die Extensions geladen werden

Dann ist mir beim Testen aufgefallen, dass die Abfrage am Ende der Datei 'class.tx_seminars_OrganizerBagBuilder.php', die zum Include der XCLASS führt für $TYPO3_CONF_VARS ein leeres Array zurückgibt.

//$TYPO3_CONF_VARS ist leer
 
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/seminars/class.tx_seminars_OrganizerBagBuilder.php']) {
 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/seminars/class.tx_seminars_OrganizerBagBuilder.php']);
}

Somit kann TYPO3 die Klasse natürlich auch nicht finden

In der Datei der PlugInklasse 'class.tx_seminars_pi1.php', im Verzeichnis typo3conf/ext/seminars/pi1/, ist das Array $TYPO3_CONF_VARS nicht leer.

Wieso ist $TYPO3_CONF_VARS in der Datei 'tx_seminars_OrganizerBagBuilder' an dieser Stelle leer? Muss ich die Originalklasse irgendwo instanziieren? Bin für jeden Tip dankbar!!! Danke

Gruß Dirk

froemken ·

Deine Klassendefinition darf nicht

class [Originalklasse] {
}

heißen, sondern muss folgendermaßen aufgerufen werden:

class ux_[Originalklasse] extends [Originalklasse] {
}

drauscher ·

Dem ist auch so froemken. Hier mal der Code der XCLASS.

require_once(t3lib_extMgm::extPath('seminars') . 'lib/tx_seminars_constants.php');

class ux_tx_seminars_OrganizerBagBuilder extends tx_seminars_OrganizerBagBuilder {

	public function limitToEvent($eventUid) {
		if ($eventUid <= 0) {
			throw new Exception('The parameter $eventUid must be > 0.');
		}

      // This will display the organizers ordered by the field 'sorting' of the table SEMINARS_TABLE_SEMINARS_ORGANIZERS_MM 
      $this->addAdditionalTableName(SEMINARS_TABLE_SEMINARS_ORGANIZERS_MM);
      $this->whereClauseParts['sorting'] = SEMINARS_TABLE_SEMINARS_ORGANIZERS_MM . '.uid_local=' . $eventUid . ' AND '.SEMINARS_TABLE_SEMINARS_ORGANIZERS_MM .'.uid_foreign=' . SEMINARS_TABLE_ORGANIZERS . '.uid';
      $this->setOrderBy(SEMINARS_TABLE_SEMINARS_ORGANIZERS_MM.'.sorting');
   }
}

if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/itb_seminars_ext/class.ux_tx_seminars_OrganizerBagBuilder.php']) {
	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/itb_seminars_ext/class.ux_tx_seminars_OrganizerBagBuilder.php']);
}

Das Problem taucht jedoch an der unten gezeigten Stelle der Originalklasse auf.

if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/seminars/class.tx_seminars_OrganizerBagBuilder.php']) {
	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/seminars/class.tx_seminars_OrganizerBagBuilder.php']);
}

Dort ist eben das Array $TYPO3_CONF_VARS leer. Dadurch wird auch die XCLASS nicht eingebunden. Die Frage ist nur... warum ist das Array leer an dieser Stelle? Die Originalklasse befindet sich direkt im Ordner typo3conf/ext/seminars. Bei der Hauptklasse tx_seminars_pi1 im Ordner typo3conf/ext/seminars/pi1/ funktioniert das einwandfrei und $TYPO3_CONF_VARS beinhaltet eben alle Daten die dort zu stehen haben #paralyzed#

oliverklee ·

Hi,

das ist eventuell ein Problem mit dem Autoloader aus der oelib. Könntest du mal ausprobieren, ob ein Update auf die aktuelle oelib 0.6.3 das Problem löst?

Oliver

drauscher ·

Hallo Oliver,

dein Tipp war goldrichtig! Vielen Dank!

Über den Extensionmanager hatte ich anfänglich nur Version 0.6.2 der oelib gefunden. Aber erst mit der Version 0.6.3 ist das Problem behoben.