wenn ich meinen language switch benutze schaltet alles schön um, auch der content aber leider nicht die daten aus einer lokalisierten extension. es wird ja auch immer
index.php?id=11&L=0&id=11&tx_ockstaff_pi1[showUid]=1&cHash=dcfe3d6d7f&no_cache=1
mit dem "[showUid]=1" übergeben statt der id des passenden lokalisierten eintrags, oder wie funktioniert das?
wie muss ich das beheben, in dem root template oder irgendwo in der extension???
mein template:
# special header
config.renderCharset = utf-8
config.doctype = xhtml_trans
config.removeDefaultJS = 1
config.uniqueLinkVars = 1
# language options
config.linkVars = L
config.sys_language_uid = 0
config.sys_language_overlay = 1
config.sys_language_mode = content_fallback
config.language = de
[globalVar = GP:L=1]
config.sys_language_uid = 1
config.language = en
[global]
# temp language switch (switch the options)
temp.langswitch = TEXT
temp.langswitch.noBlur = 1
temp.langswitch.value = <img src="fileadmin/templates/images/en.gif" id="flag" width="16" height="10" alt="English Version"/>English
temp.langswitch.typolink.parameter.data = page:uid //GPvar:tx_ockstaff_pi1
temp.langswitch.typolink.addQueryString = 1
temp.langswitch.typolink.additionalParams = &L=1&no_cache=1
temp.langswitch.typolink.wrap = | |
# temp breadcrumb
temp.kruemel.linkWrap = <a href="index.php?L=0">Home</a> / | / |*| | / |*| |
[globalVar = GP:L=1]
temp.langswitch.value = <img src="fileadmin/templates/images/de.gif" id="flag" width="16" height="10" alt="English Version"/>Deutsch
temp.langswitch.typolink.additionalParams = &L=0&no_cache=1
[global][TS][/TS]
Was für eine Extension ist denn das?
das ist eine mit dem kickstarter erstellte eigene extension, habe die php classe dann selber bearbeitet...
kann es sein dass hier noch etwas fehlt, vielleicvht habe ich z.b. die lokalization checkbox erst später benutzt, bedeutet die anpassung daüfr in der klasse nicht reinbekommen (weil ich diese immer hab nicht überscheiben lassen)?!
Mmm, ja vielleicht ist die Lokalisation nicht richtig umgesetzt. Hast du für jede Sprache einfach einen neuen Datensatz angelegt in deiner Extension? Also die Sprachen sind alle in einer Tabelle und haben alle andere IDs?
genau, wie es der kickstarter üblicherweise macht...allen in einer tabelle, haben verschiedene ids und eben das feld sys_language_uid mit 1 bzw. 0...zudem steht in dem l18 irgendwas feld auch der parent record drin (also die id des standard), wenn ich das richtig sehe...
Es wird aber nun ja immer die uid des deutschen record übergeben (ausser ich verändere was am language switch, sollte ich das?!)...oder ich verändere das laden des records auf die richtige language?! ich dachte das würde die pibase irgendwie machen oder so, wie ist es denn elegant?
Meine Klasse (dies ist eigtl. fast alles vom kickstarter erstellt worden):
class tx_ockstaff_pi1 extends tslib_pibase {
var $prefixId = 'tx_ockstaff_pi1'; // Same as class name
var $scriptRelPath = 'pi1/class.tx_ockstaff_pi1.php'; // Path to this script relative to the extension dir.
var $extKey = 'ock_staff'; // The extension key.
var $pi_checkCHash = TRUE;
var $old_people_group = '';
/**
* Main method of your PlugIn
*
* @param string $content: The content of the PlugIn
* @param array $conf: The PlugIn Configuration
* @return The content that should be displayed on the website
*/
function main($content,$conf) {
$this->conf = $conf; // Setting the TypoScript passed to this function in $this->conf
$this->pi_setPiVarDefaults();
$this->pi_loadLL(); // Loading the LOCAL_LANG values
switch((string)$conf['CMD']) {
case 'singleView':
list($t) = explode(':',$this->cObj->currentRecord);
$this->internal['currentTable'] = $t;
$this->internal['currentRow'] = $this->cObj->data;
return $this->pi_wrapInBaseClass($this->singleView($content,$conf));
break;
default:
if (strstr($this->cObj->currentRecord,'tt_content')) {
$conf['pidList'] = $this->cObj->data['pages'];
$conf['recursive'] = $this->cObj->data['recursive'];
}
return $this->pi_wrapInBaseClass($this->listView($content,$conf));
break;
}
}
/**
* Shows a list of database entries
*
* @return HTML list of entries
*/
function listView($content,$conf) {
$this->conf=$conf; // Setting the TypoScript passed to this function in $this->conf
$this->pi_setPiVarDefaults();
$this->pi_loadLL(); // Loading the LOCAL_LANG values
$lConf = $this->conf['listView.']; // Local settings for the listView function
$this->old_people_group = '';
if ($this->piVars['showUid']) { // If a single element should be displayed:
$this->internal['currentTable'] = 'tx_ockstaff_people';
$this->internal['currentRow'] = $this->pi_getRecord('tx_ockstaff_people',$this->piVars['showUid']);
return $this->singleView($content,$conf);
} else {
$lConf = $this->conf['listView.']; // Local settings for the listView function
eine kleine Sache noch, bei mir ist L=0 Deutsch und L=1 Englisch...bei den Extensions ist aber irgendwie der Standard ja Englisch?! Zumindest steht da immer beim ersten Eingabefeld Englisch hinter und ich habe bei der Lokalisierungsoption, wo man also Sprachen einfügen kann in der Liste der Sprachen als weitere noch Deutsch angeklickt...das arbeiten mit den locallang Dateien etc. funktioniert aber einwandfrei
p.s. die klasse oben ist natürlich nur der Anfang!
niemand eine idee, oder einen link bzg. dieses Problems???
Schwierig...
Also zum einen ist die Lokalisierung der feststehenden Texte unabhängig von der Lokalisierung der Datensätze.
Bei den Texten z.B. für Datenbankfelder ist englisch immer die erste Sprache, das hat aber nichts mit den Datensätzen zu tun oder mit deinen language ids.
Du musst im Prinzip in deine Extension eine Unterscheidung einbauen, entweder Sprache ist Standard, dann zeige den Datensatz mit der übergebenen uid, sonst zeige den Datensatz der bei l18... die übergebene uid drin hat und bei language_id die aktuelle sys_language_id.
okay, danke! so hab ich es nun gemacht, würde es aber einen work around nennen, da ich glaube das typo3 genau diesen schritt irgendwo vorher machen müsste...in pibase (da hab ich aber geguckt) oder cObject oder keine Ahnung, so gehts:
if ($this->piVars['showUid']) { // If a single element should be displayed:
$this->internal['currentTable'] = 'tx_ockstaff_people';
$this->internal['currentRow'] = $this->pi_getRecord('tx_ockstaff_people',$this->piVars['showUid']);
// HACK for loading the right lamguage entry
if($this->internal['currentRow']['sys_language_uid'] == 0 && $this->LLkey != 'de') {
$res = mysql(TYPO3_db, 'SELECT * FROM tx_ockstaff_people WHERE l18n_parent=' . $this->internal['currentRow']['uid']);
if(mysql_num_rows($res) > 0) {
$row = mysql_fetch_array($res);
}
$this->internal['currentRow'] = $this->pi_getRecord('tx_ockstaff_people',$row['uid']);
} else if($this->internal['currentRow']['sys_language_uid'] == 1 && $this->LLkey == 'de') {
$this->internal['currentRow'] = $this->pi_getRecord('tx_ockstaff_people',$this->internal['currentRow']['l18n_parent']);
}
// end of HACK!
return $this->singleView($content,$conf);
} else {
// ... listview