Vor kurzem hatte ich über meine Extension gebloggt, in der ich ein Sprachproblem gelöst habe, dass mich z.B. in „tt_news“ nervt.
Es geht darum, dass ich in der Singleansicht die Sprache zwar wechseln kann aber der Beitrag selbst nicht mit geändert wird. Die Seite an sich erscheint z.B. in Englisch jedoch ist mein Datensatz selbst noch Deutsch.
Folgender Script ermöglicht es mir, innerhalb der Singleansicht die Sprache zu wechseln und anhand der Datenbank-Referenzen den passend lokalisierten Datensatz zu suchen und anzuzeigen.
if ($GLOBALS['TSFE']->sys_language_uid == 0)
$offerLangID = $this->piVars['showUid'];
else {
$query = ‘SELECT uid FROM tx_extension_db WHERE sys_language_uid=’.$GLOBALS['TSFE']->sys_language_uid.’ AND l18n_parent=’.$this->piVars['showUid'].’ AND hidden=0 AND deleted=0 LIMIT 1′;
$res = mysql(TYPO3_db,$query);
$row = mysql_fetch_assoc($res);
if ($row['uid'])
$offerLangID = $row['uid'];
else
$offerLangID = $this->piVars['showUid'];
}$record=$this->pi_getRecord(’tx_extension’,$offerLangID);
Ich frage einfach die Datenbank ab und suche den Datensatz raus, indem die „Haupt-UID“ im „l18n_parent“ Feld eingetragen ist und frage dazu noch die derzeitig ausgewählte Sprache ab.
Logischerweise funktioniert das nicht, wenn ich aus der Listenansicht direkt einen Datensatz mit sekundärer Sprache aufrufe, da die „UID“ natürlich in keinem „l18n_parent“ Feld zu finden ist.
Der Wechsel ist demnach also nicht möglich und der Datensatz wird immer in der sekundären Sprache angezeigt, egal welche Sprache ich nun innerhalb des Datensatzes auswähle.
Um dem vorzubeugen, habe ich mir vorhin mal einen vernünftigen Weg überlegt.
Kleines Beispiel zur Veranschaulichung:
Der Datensatz in der Hauptsprache (L = 0) hat die UID = 50
Der lokalisierte Datensatz (L = 1) hat die UID = 51
Stelle ich in der Listenansicht auf „L=1“ wird eigentlich der Datensatz 51 verlinkt.
Ich starte nun einfach eine Datenbankabfrage, die nach dem Datensatz sucht, dessen „uid“ im „l18n_parent“ Feld des Datensatzes mit der Sprache „L=1“ steht.
if ($GLOBALS['TSFE']->sys_language_uid == 0)
$offerUID = $row_1['uid'];
else {
$query_3 = ‘SELECT uid FROM tx_extension_db WHERE sys_language_uid=0 AND uid=’.$row_1['l18n_parent'].’ AND hidden=0 AND deleted=0 LIMIT 1′;
$res_3 = mysql(TYPO3_db,$query_3);
$row_3 = mysql_fetch_assoc($res_3);
if ($row_3['uid'])
$offerUID = $row_3['uid'];
else
$offerUID = $row_1['uid'];
}$this->pi_list_linkSingle($this->pi_getLL(’more’),$offerUID,1,$mergeArr = array(),$urlOnly = FALSE,$altPageId=$offerSinglePage);
Auf diesen kann ich dann verlinken und meine Sprachabfrage in der Singleansicht (s.o.) gibt mir dann den sprachlich passenden Datensatz aus.
1 Kommentare
Neuen Kommentar schreiben1. hype.yeebase.com | 11. März 2008 | 15:50
TYPO3 DB-Referenzen für Sprachübergabe nutzen…
Kurzes PHP-Scriptbeispiel um die Sprache von Datensätzen einer Extension im Frontend, beim wechsel der Sprache, zu ändern. Leider funktioniert das so nicht in tt_news wobei ich denke, dass es gerade da sehr sinnvoll wäre….