Hallo Zusammen,
ich habe eine relativ umfangreiche Site welche als Standardsprache Englisch hat. Im Laufe der Zeit hat es sich aber herausgestellt das Inhalte zuerst in Deutsch kommen und dann evtl. ins Englische übersetzt werden. Es ist sehr nervig die Seiten erst in Englisch anzulegen obwohl es keine Inhalte gibt und dann die Übersetzungen einzufügen. Die Redakteure tun sich auch etwas schwer das sauber zu handhaben.
Typo3 4.5.11
Templavoila 1.6.1
1. Seitenbaum Sprache anpassen
Mit der Extension Language changer (sflangchange) wird recht komfortabel der Seitenbaum Übersetzt.
2. Content Elemente
Nach einiger Recherche bin ich auf dieses PHP-Script gestoßen. Mit diesem PHP-Script transferiere ich die Inhalte der tt_content Tabelle und passe die Referenzen zu den Elternobjekten an.
Das ganze klappt bis zu einem Punkt wunderbar… in der Listenansicht werden die Content Elemente richtig angezeigt und die Vererbung der Standardsprache mit Englisch passt auch. Wechselt man im Backend in die Seitenansicht erscheinen erstmal nur die englischen Content Elemente.
Mein Problem:
Elemente der neuen Standardsprache (Deutsch) befinden sich unter "nicht verwendete Elemente".
Fügt man diese wieder in die Spalten ein wird ein korrektes Inhalts Element eingefügt samt der Übersetzung. Das bereits vorhandene englische Element ist dann doppelt und kann per Hand gelöscht werden.
Weiß jemand in welcher Ecke ich suchen muss um diesen manuellen Schritt auch automatisch zu bewerkstelligen? Aber ab hier fehlt mir der Horizont zum weiterkommen. Hat jemand eine Idee wie ich die "nicht verwendeten Elemente wieder in die Content Spalten bekomme?
Das PHP-Script für tt_content:
<?php
$mysqlhost="localhost";// MySQL-Host angeben
$mysqluser="xxx";// MySQL-User angeben
$mysqlpwd="xxxx"; // Passwort angeben
$mysqldb="xxxx"; // Gewuenschte Datenbank angeben
$connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die ("Verbindungsversuch fehlgeschlagen");
mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen.");
$new_default_language_uid = 1; // Inhalte dieser ID werden werden zu Default [0]
$old_default_language_name = 'English'; // Alter Name der Standardsprache
$old_default_language_flag = 'gb'; // Altes icon der Standardsprache
$dummy_language_uid = 999;
// Auswählen der Datensätze welche in die neue Standardsprache bewegt werden
$sql = "SELECT `uid`,`pid`,`l18n_parent` FROM `tt_content`
WHERE `sys_language_uid` = ".$new_default_language_uid." AND `l18n_parent` > 0";
$result = mysql_query($sql);
if (!$result) die(mysql_error());
else {
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
// Set new references (for all languages except former default language)
$sql = "UPDATE `tt_content`
SET `l18n_parent` = ". $row['uid'] . "
WHERE `l18n_parent` = " . $row['l18n_parent'];
mysql_query($sql) or die(mysql_error());
echo $sql;
// Set new reference in default language objects which formerly
//have been referenced (by new default language objects).
$sql = "UPDATE `tt_content`
SET `l18n_parent` = ". $row['uid'] . ",`sys_language_uid` = ".$dummy_language_uid."
WHERE `uid` = " .$row['l18n_parent'];
mysql_query($sql) or die(mysql_error());
}
// Make new language the default language (and clear the parent reference)
$sql = "UPDATE `tt_content` SET `sys_language_uid` = 0, `l18n_parent` = 0
WHERE `sys_language_uid` = ".$new_default_language_uid;
mysql_query($sql) or die(mysql_error());
// Make formerly default language objects the language which is now default language
$sql = "UPDATE `tt_content` SET `sys_language_uid` = " . $new_default_language_uid . "
WHERE `sys_language_uid` = ".$dummy_language_uid;
mysql_query($sql) or die(mysql_error());
$sql = "UPDATE `sys_language` SET `title` = '" . $old_default_language_name . "', `flag` = '" . $old_default_language_flag . "'
WHERE `uid` = " . $new_default_language_uid;
#echo $sql."<br>\n";
mysql_query($sql) or die(mysql_error());
}
?>