Zum Inhalt springen

Felder in alternativen Sprachen bereitstellen?

Erstellt am 17. März 2006 · 7 Antworten · letzte Antwort am 20. März 2006

Tags: TCA, Frage

robin ·

Hi
Ich habe mit dem kickstarter ein paar zusätzliche Felder eingefügt. Nun soll die Webseite auch in einer anderen Sprache angelegt werden. Die Felder müssen dabei auch übersetzt werden. Mit dem Kickstarter habe ich diese Felder dann auch in der pages_language_overlay angelegt, Namen sind identisch, trotzdem wird immer der Wert aus der pages genommen. Was habe ich noch vergessen?

Danke und Gruß,
Robin.

steffenk ·

das auslesen der sprachabhängigen Felder musst Du im php-Teil schon selber übernehmen - es werden lediglich die Tabellen dazu bereitgestellt, so das man bei Datensatz einfügen die Sprachoption zur Verfügung hat.

robin ·

gut zu wissen, gibts da ein Beispiel zu? Extensions und php sind nicht gerade meine stärkste Seite... :o

robin ·

Meinst du die tt_news_languageMenu.php?

Ganz ehrlich; ich habe doch oben geschrieben, dass ich wenig (=0) Ahnung von php und Extensions habe. Ich will doch nur ein Feld in zwei Sprachen haben. Das muß doch schon einer gemacht haben?! Oder etwa nicht? Denn die 1000 Zeilen Code der tt_news helfen mir nicht wirklich weiter. Wenn ich in den tt_news wie in einem offenem Buch lesen könnte, dann wäre ich nicht in diesem Forum angemeldet.

Mit Hoffnung auf ein verständliches Beispiel,
Robin.

Flink ·

Für diesen Zweck habe ich die Table Library Extension entwickelt. Damit kann man den Programmcode unabhängig von einer Tabelle gestalten. Die Table Library übernimmt die Aufgabe, sich die Daten aus der Overlay Sprach Tabelle zu holen, falls erforderlich.
Intern wird in der Table Library die DBAL Programmierschnittstelle verwendet.

Damit das läuft, muß für die Tabelle eine eigene Klasse angelegt werden.

class tx_ttproducts_product {
	var $dataArray; // array of read in categories
	var $table;		 // object of the type tx_table_db
	var $fields = array();
	var $pibase; // reference to object of pibase
	var $variant; // object for the product variant attributes

	/**
	 * Getting all tt_products_cat categories into internal array
	 */
	function init(&$pibase, $LLkey, $tablename, &$tableconf, $bUseArticles)  {
		global $TYPO3_DB,$TSFE,$TCA;
		
		$this->pibase = $pibase;
		$tablename = ($tablename ? $tablename : 'tt_products');
		$this->table = t3lib_div::makeInstance('tx_table_db');
		$this->table->setTCAFieldArray($tablename);
		
		$requiredListFields = ($tableconf['requiredListFields'] ? $tableconf['requiredListFields'] : 'uid,pid,category,price,price2,tax');
		$requiredListArray = t3lib_div::trimExplode(',', $requiredListFields);
		$this->table->setRequiredFieldArray($requiredListArray);
		
		if ($TSFE->config['config']['sys_language_uid'] && ($tablename == 'tt_products')) {
			$this->table->setLanguage ($LLkey);
			$this->table->setTCAFieldArray('tt_products_language');
		}
		
		$this->variant = t3lib_div::makeInstance('tx_ttproducts_variant');
		$this->variant->init($tableconf['variant.'], $bUseArticles);
		
		$this->fields['itemnumber'] = ($tableconf['itemnumber'] ? $tableconf['itemnumber'] : 'itemnumber');
	} // init


	function get ($uid) {
		global $TYPO3_DB;
		$rc = $this->dataArray[$uid];
		if (!$rc) {
			$where = '1=1 '.$this->table->enableFields($this->table->name);		
			// Fetching the products
			$res = $this->table->exec_SELECTquery('*',$where.'AND uid = '.$uid);
			$row = $TYPO3_DB->sql_fetch_assoc($res);
			$rc = $this->dataArray[$row['uid']] = $row;
		}
		return $rc;
	}

}
Flink ·

In $requiredListFields müssen nur die Felder stehen, die jedesmal ausgelesen werden sollen.

Die Initialisierung erfolgt über

$this->tt_products = t3lib_div::makeInstance('tx_ttproducts_product');
		$this->tt_products->init($this,$this->LLkey, $this->conf['table.']['tt_products'], $this->conf['table.']['tt_products.'], $this->conf['useArticles']);

Das ist nur ein Beispiel für die Anwendung. Für pages können die letzten Parameter und einige Zeilen Code hier wegfallen.

Für Seiten würde der Aufruf dann so aussehen:

$pageTmp = $this->page->get($row['pid']);

Du kannst dich auch an der Datei tt_products/lib/class.tx_ttproducts_page.php orientieren.

robin ·

Danke Flink für deine Antwort. Du hast dir echt Mühe gegeben. Leider habe ich das nicht hingekriegt, bin ich wohl zu blöd für. Es gibt aber einen einfachen Weg:

$TYPO3_CONF_VARS['FE']['pageOverlayFields'] = 'title,subtitle,nav_title,keywords,description,abstract,author,author_email';

Das habe ich in localconf.php um meine Felder erweitert und eingefügt. Und schon läufts!!!

Gruß,
Robin