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
Ich hab auch noch nen Hinweis zu diesem Thema, der anderen vielleicht hilfreich sein könnte:
Ich hatte den Code korrekt eingebaut und getRecordOverlay() hat trotzdem keine Datensätze durch die passenden der anderen Sprache ersetzt. Es wurden einfach die originaldatensätze durchgeschleift.
Ich habe die ganze getRecordOverlay() auseinandergenommen bis ich auf folgendes Problem kam: Meine $row, die ich in die Funktion hineingab, kam aus folgendem Select:
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid,title', 'tx_mytable', 'sys_language_uid IN (-1,0)', '', 'title');
Man beachte den ersten Paramter: 'uid,title'
Die Funktion getRecordOverlay() prüft aber auch ab, ob der Datensatz in der selben pid liegt wie der Originaldatensatz. Da in meinem Resultset $row['pid'] nicht vorkam (weil ich nur die Felder uid und title im SELECT hatte), wurde kein entsprechender übersetzter Datensatz gefunden.
Herzliche grüße,
Tim
http://www-typo3-webdesign.biz