OK, hab das Problem dann mal wieder selbst gelöst 😉
Meine Extension läuft jetzt, ich kann im Backend die
Tabelle bearbeiten, Localizations anlegen und der Content
wird auch schön nach ausgewählter Sprache angezeigt 🙂
Hab mir die notwendigen Schritte mal soweit notiert,
denke das interessiert bestimmt noch mehr Leute hier...
Multilanguage Extension Howto
-----------------------------
1) Extension im Kickstarter anlegen, benötigte Sprachen dort angeben
2) Einfügen in ext_tables.sql:
sys_language_uid int(11) DEFAULT '0' NOT NULL,
l18n_parent int(11) DEFAULT '0' NOT NULL,
l18n_diffsource mediumblob NOT NULL,
3) Einfügen in ext_tables.php: $TCA["tx_foo_bar"]["ctrl"])
'prependAtCopy' => 'LLL:EXT:lang/locallang_general.php:LGL.prependAtCopy',
'copyAfterDuplFields' => 'sys_language_uid',
'useColumnsForDefaultValues' => 'sys_language_uid',
'transOrigPointerField' => 'l18n_parent',
'transOrigDiffSourceField' => 'l18n_diffsource',
'languageField' => 'sys_language_uid',
4) Einfügen in tca.php: $TCA["tx_foo_bar"]["columns"]
- Für jede Spalte einfügen:
'l10n_mode' => 'prefixLangTitle', (bzw. 'mergeIfNotBlank' / 'exclude')
- Neue Spalten sys_language_uid, l18n_parent, l18n_diffsource:
'sys_language_uid' => Array(
'exclude' => 1,
'label' => 'LLL:EXT:lang/locallang_general.php:LGL.language',
'config' => Array(
'type' => 'select',
'foreign_table' => 'sys_language',
'foreign_table_where' => 'ORDER BY sys_language.title',
'items' => Array(
Array('LLL:EXT:lang/locallang_general.php:LGL.allLanguages',-1),
Array('LLL:EXT:lang/locallang_general.php:LGL.default_value',0)
)
)
),
'l18n_parent' => Array(
'displayCond' => 'FIELD:sys_language_uid:>:0',
'exclude' => 1,
'label' => 'LLL:EXT:lang/locallang_general.php:LGL.l18n_parent',
'config' => Array(
'type' => 'select',
'items' => Array(
Array('', 0),
),
'foreign_table' => 'tt_news',
'foreign_table_where' => 'AND tx_foo_bar.uid=###REC_FIELD_l18n_parent### AND tx_foo_bar.sys_language_uid IN (-1,0)',
'wizards' => Array(
'_PADDING' => 2,
'_VERTICAL' => 1,
'edit' => Array(
'type' => 'popup',
'title' => 'edit default language version of this record ',
'script' => 'wizard_edit.php',
'popup_onlyOpenIfSelected' => 1,
'icon' => 'edit2.gif',
'JSopenParams' => 'height=600,width=700,status=0,menubar=0,scrollbars=1,resizable=1',
)
)
)
),
'l18n_diffsource' => Array(
'config' => Array(
'type'=>'passthrough'
)
),
5) Extension laden, am besten eigenen Sysfolder für Extension anlegen, darin alternative Seitensprachen anlegen
Im Backend kann man jetzt bereits die Tabelle bearbeiten, samt Localizations
6) Bei Select-Abfragen im PHP-Code einfügen:
'... AND sys_language_uid='.$GLOBALS['TSFE']->sys_language_content'
noch zu klären wäre: wann/wie sind Overlays zu benutzen?
if ($GLOBALS['TSFE']->sys_language_content) {
$OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':'');
$row = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tx_foo', $row, $GLOBALS['TSFE']->sys_language_content, $OLmode);
}
ich versteh noch nicht, warum getRecordOverlay nötig
ist, man kann doch direkt per sys_language_uid den
entsprechenden Eintrag auslesen... vielleicht hat ja
jemand ne Idee?
Grüße,
Patrick