Wie erhalte ich in der Ausgabe einer selbstprogrammierten Extension, die mehrsprachigkeit? Bisher werden alle Datensätze angezeigt. Über "if else Abfrage" sollte dies doch möglich sein oder?
Welche Variable wird gebraucht? "sys_language_uid" ist bereits im Datenbank Schema der Extension angelegt und wird auch richtig zugeordnet - "L" als Sprachvariable in Typo bereits konfiguriert....
Kann mir jemand auf die Sprünge helfen...
Gruß
Andy
aber klar doch
$GLOBALS["TSFE"]->sys_language_uid
gibt Dir die eingestellte Sprache zurück
Und so liest Du den richtigen Datensatz aus:
<?php
while($temp = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
// get the translated record if the content language is not the default language
if ($GLOBALS['TSFE']->sys_language_content) {
$OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
$temp = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_extension', $temp, $GLOBALS['TSFE']->sys_language_content, $OLmode);
}
$data[] = $temp;
}
}
?>
Ich stehe auf dem Schlauch.... :0
Hier erfolgt das erstellen...
<?
/**
* Liste erstellen
*/
function makelist($res) {
$items=Array();
// $GLOBALS["TSFE"]->sys_language_uid
// Sprache auslesen
while($temp = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
// get the translated record if the content language is not the default language
if ($GLOBALS['TSFE']->sys_language_content) {
$OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
$temp = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_extension', $temp, $GLOBALS['TSFE']->sys_language_content, $OLmode);
}
$data[] = $temp;
}
// Liste erstellen
while($this->internal['currentRow'] = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
$items[]=$this->makeListItem();
}
// Ausgabe
$out = '<div'.$this->pi_classParam('listrow').'>
'.implode(chr(10),$items).'
</div>';
return $out;
}
?>
Du kombinierst 2 Methoden der Datensatzauslese - das kann nicht klappen.
Sollte ich nach der Funktion "makelist" eine funktion "sprache" erstellen und dort die while abfrage reinbauen...?! alles als out ausgaben und danach die liste bauen?!
nimm den Schnipsel von mir wieder raus und mach die Unterscheidung der Sprache in der Funktion makeListItem.
Hey danke für die Hilfe - aber irgendwie klemmt es immer noch... (ich denke meine PHP-Erfahrung ist zu gering)
<? /**
*AUSGABE
*/
function makeListItem() {
while($out = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
// get the translated record if the content language is not the default language
if ($GLOBALS['TSFE']->sys_language_content) {
$OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
$out = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_cdcstaff', $out, $GLOBALS['TSFE']->sys_language_content, $OLmode);
}
}
$out='<p>.$this->getFieldContent('name').</p>' '<p>.$this->getFieldContent('vorname').</p>';
return $out;
}?>
Danke
m.E. müsste das so aussehen:
<?
/**
*AUSGABE
*/
function makeListItem() {
// get the translated record if the content language is not the default language
if ($GLOBALS['TSFE']->sys_language_content) {
$OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
$this->internal['currentRow'] = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_cdcstaff', $this->internal['currentRow'], $GLOBALS['TSFE']->sys_language_content, $OLmode);
}
$out='<p>'.$this->getFieldContent('name').' '.$this->getFieldContent('vorname').'</p>';
return $out;
}
?>
ohne gewähr
Jetzt habe ich verstanden! Allerdings geht es (immer) noch nicht... Ich denke mir fehlt die verknüpfung....
Ich überlege mal und werden dann nochmals posten!!
Gruß und Vielen Dank - ich melde mich...
:-)
MELDE MICH NOCHMAL!!! HIER DIE MELDUNG....
<?
function makeListItem() {
// get the translated record if the content language is not the default language
if ($GLOBALS['TSFE']->sys_language_content) {
$OLmode = ($this->sys_language_uid == 'strict'?'hideNonTranslated':'');
$this->internal['currentRow'] = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_cdcstaff_cdc_staff', $this->internal['currentRow'], $GLOBALS['TSFE']->sys_language_content, $OLmode);
}
$out= $this->getFieldContent('vorname');
return $out;
} ?>
Erzeugt keinen Fehler, gibt allerdings auch alle Datensätze aus - obwohl "L=0" ist....
Sind denn alle Variablen bzw. Datenbankfelder abgefragt...
sys_language_content als echo ergibt bei DE 0,0,0,0
sys_language_uid ergibt als echo bei DE "1,0,1,0" dies stimmt auch überein mit den Datenfelder der Datenbank.
Die Datenbankfelder müssten doch nun nur noch mir der aktullen "L" Variable verglichen werden... dies scheint aber nicht zu gehen....
RATLOS?!
<? $out= $this->getFieldContent('sys_language_uid'); ?>
ergibt bei 4 Datensätzen in 2 Sprachen 0,1,1,0
Dies stimmt, da der erste und letzte Deutsch, die anderen Spanisch sind!
Die Ausgabe wird hier nicht beschränkt, sondern es wird aus der Overlay-Tabelle die richtige Sprache ausgelesen.
Wenn Du die Sprache eingrenzen willst, also nur die aktuelle Sprache ausgeben willst, so muss das in der Where-Klausel der SQL-Abfrage geschehen.
Ja, okay... verstanden und ich denke auch am sinnigsten... Allerdings stellt sich für mich die Frage "Wo wird die Datenbankabfrage gemacht...?", alle Datenbankfelder werden ja "zur Verfügung gestellt". Gibt es hier eine Klasse in Typo, welche included wird? Oder erfolgt der Zugriff weil bereits ein Connect besteht?
Danke und Gruß
Hallo, Andy,
binde die Berechnung Deines Outputs mal in die if-Schleife der Sprachwahl ein:
<?
/**
*AUSGABE
*/
function makeListItem() {
// get the translated record if the content language is not the default language
if ($GLOBALS['TSFE']->sys_language_content) {
$OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
$this->internal['currentRow'] = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_cdcstaff', $this->internal['currentRow'], $GLOBALS['TSFE']->sys_language_content, $OLmode);
$out='<p>'.$this->getFieldContent('name').' '.$this->getFieldContent('vorname').'</p>';
}
return $out;
}
?>
Ich habe selbst die Sprachwahl innerhalb der makelist()-Funktion, a la:
function makelist($res) {
$items=Array();
// Make list table rows
while($this->internal['currentRow'] = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
// Gets the translated record if the content language is not the default language
if ($GLOBALS['TSFE']->sys_language_content == $this->internal['currentRow']['sys_language_uid']) {
$OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
$this->internal['currentRow'] = $GLOBALS['TSFE']->sys_page->getRecordOverlay('user_methodologiesinnovations_items', $this->internal['currentRow'], $GLOBALS['TSFE']->sys_language_content, $OLmode);
// if item is a methodology, first calls the methodology list item, then calls all associated innovation list items
if ($this->internal['currentRow']['methodology'] == '' || $this->internal['currentRow']['methodology'] == 0) {
$isMethodology = true;
$items[]=$this->makeListItem();
}
$out = '<div'.$this->pi_classParam('listrow').'>'.implode(chr(10),$items).'</div>';
return $out;
}
Grüßle
Falk
Bei mir erscheinen bei L=1 alle Datensätze, bei L=0 gar keine...
Irgendwas scheint hier nicht zu stimmen!
Hallo, Andy,
was ich noch vergessen hatte zu erwähnen...
in der if-Abfrage für die Sprachwahl des ZWEITEN php-Abschnitts findest Du:
(GLOBALS['TSFE']->sys_language_content == $this->internal['currentRow']['sys_language_uid'])
füge das mal in Deinen Code ein...
Deine Datensätze "übersetzt" hast aber schon, denke ich?
Grüßle
Falk
Ahha,, ich denke ich bin ein wenig weiter... Allerdings wird jetzt nur ein Record in der richtigen Sprache ausgegeben.
<?
function makelist($res) {
$items=Array();
// Liste erstellen
while($this->internal['currentRow'] = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
// Gets the translated record if the content language is not the default language
if ($GLOBALS['TSFE']->sys_language_content == $this->internal['currentRow']['sys_language_uid']) {
$OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
$this->internal['currentRow'] = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_cdcstaff_cdc_staff', $this->internal['currentRow'], $GLOBALS['TSFE']->sys_language_content, $OLmode);
$items[]=$this->makeListItem();
}
// Ausgabe
$out = '<div'.$this->pi_classParam('listrow').'>
'.implode(chr(10),$items).'
</div>';
return $out;
}
}
?>
Hallo, Andy,
wahrscheinlich ist der Aufruf der makeListItem()-Funktion nicht mehr in der while-Schleife enthalten?
Grüßle
Falk
neue Version:
function makelist($res) {
$items=Array();
// Liste erstellen
while($this->internal['currentRow'] = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
// Gets the translated record if the content language is not the default language
if ($GLOBALS['TSFE']->sys_language_content == $this->internal['currentRow']['sys_language_uid']) {
$OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
$this->internal['currentRow'] = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_cdcstaff_cdc_staff', $this->internal['currentRow'], $GLOBALS['TSFE']->sys_language_content, $OLmode);
$items[]=$this->makeListItem();
}
} //und hier die Klammer wieder rein
// Ausgabe
$out = '<div'.$this->pi_classParam('listrow').'>
'.implode(chr(10),$items).'
</div>';
return $out;
// } hier die Klammer raus
}
?>
Hi,
doch ist noch enthalten - die Formatierung bzw. Augabe ist per CSS nur in der makeListItem Funktion. Momentan wird nur der erste Datensatz angezeigt. :-o
Es geht!!! Hey, es lag an einer Klammer innerhalb der MakeListItem Funktion.... :-((
Vielen Dank für Eure Hilfe!!! Spitzenmäßig[/u]
Hallo, Andy,
schön, dass es nun auch klappt. Kannst Du den Thread noch als gelöst markieren?
Danke und bis denne,
Falk