CMS mit ca. 10 Sprachen und Datenaustausch untereinander

Gesperrt
asycs
Beiträge: 64
Registriert: Do 2. Feb 2006, 12:13
Kontaktdaten:

CMS mit ca. 10 Sprachen und Datenaustausch untereinander

Beitrag von asycs » Mi 25. Apr 2007, 17:09

Hallo

Für folgende Aufgabenstellung wäre ich über jede konstruktive Meinung dankbar.


CMS mit ca. 10-15 Sprachen.
Ausgangssprachen sind deutsch und englisch, welche bereits existieren.

Ich möchte nun bspw. für Finnland oder Schweiz eine eigene Sprache anlegen.

Zum einen soll der Inhalt aus dem deutschen bzw. englischen Master auf der Schweizer Seite erscheinen, aber die Schweizer Kollegen sollen zusätzlich ihren eigenen Inhalt pflegen können, ohne den Inhalt des Master bearbeiten zu können.

Frage:
Wie stelle ich das am sinnvollsten an?

Mehrere Mandanten oder nur über die Sprachen gehen?
Wie realisiere ich den Datenaustausch und dessen automatische Synchronisierung am besten?


Vielen Dank.

simu
Beiträge: 48
Registriert: Di 4. Okt 2005, 08:44
Wohnort: Schweiz
Kontaktdaten:

Beitrag von simu » Mi 25. Apr 2007, 17:47

Also ich würde dies nur über die Sprachen lösen, den Zugriff der einzelnen benutzer kannst du über das integrierte Rechtesystem lösen...

Danach würde ich einen Cronjob installieren der in jeder nacht die Sprachen synchronisiert... dies kannst du über die API-Funktionen lösen. Ich habe vor einiger Zeit ein kleines script geschrieben welches alle Artikel und Kategorien von einer Sprache in die andere synchronisiert ohne die vorhandenen zu ersetzen. Vielleicht kannst du es ja gebrauche...

Code: Alles auswählen

include_once ('[relativer_pfad_zu_deinem_contenido_verzeichnis]/includes/startup.php');

cInclude ("includes", 'functions.api.php');
cInclude ("includes", 'functions.general.php');

cInclude ("classes", 'class.plugin.php');
cInclude ("classes", 'class.xml.php');
cInclude ("classes", 'class.navigation.php');
cInclude ("classes", 'class.template.php');
cInclude ("classes", 'class.backend.php');
cInclude ("classes", 'class.notification.php');
cInclude ("classes", 'class.area.php');
cInclude ("classes", 'class.action.php');
cInclude ("classes", 'class.layout.php');
cInclude ("classes", 'class.treeitem.php');
cInclude ("classes", 'class.user.php');
cInclude ("classes", 'class.group.php');
cInclude ("classes", 'class.cat.php');
cInclude ("classes", 'class.client.php');
cInclude ("classes", 'class.inuse.php');
cInclude ("classes", 'class.table.php');

cInclude("includes","functions.tpl.php");
cInclude("includes","functions.str.php");
cInclude("classes", "class.todo.php");

cInclude ("includes", 'functions.con.php');

$sourcelanguage = 1;
$lang = 2;

$db = new DB_Contenido;

function syncCat( $idcat, $sourcelanguage, $lang ) {

	echo "<h1>$idcat</h1>";

	global $cfg;

	$db2 = new DB_Contenido;

	$sql = "SELECT
	                            a.idart AS idart,
	                a.idlang AS idlang,
	                            a.idartlang AS idartlang,
	                            a.title AS title,
	                            c.idcat AS idcat,
	                            c.idcatart AS idcatart,
	                            a.idtplcfg AS idtplcfg,
	                            a.online AS online,
	                            a.created AS created,
	                            a.lastmodified AS lastmodified,
	                            a.timemgmt AS timemgmt,
	                            a.datestart AS datestart,
	                            a.dateend AS dateend,
	                  a.artsort AS artsort,
	                  a.locked AS locked
	                        FROM
	                            ".$cfg["tab"]["art_lang"]." AS a,
	                            ".$cfg["tab"]["art"]." AS b,
	                            ".$cfg["tab"]["cat_art"]." AS c
	                        WHERE

	                 a.idlang    = '".$sourcelanguage."' AND
	                            a.idart     = b.idart AND
	                            b.idclient  = '1' AND
	                            b.idart     = c.idart AND
	                            c.idcat     = '".$idcat."'";

	$db2->query($sql);
	echo "<p>";
	while( $db2->next_record() ) {
	  $idart = $db2->f("idart");
	  $online = $db2->f("online");
	  echo $idart . "<br>";

	  /* Verify that the category is available in this language */
    $db3 = new DB_Contenido;
		$sql = "SELECT idcatlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='$idcat' AND idlang='$lang'";
	  $db3->query($sql);
	  if ($db3->next_record())
	  {
	    conSyncArticle($idart, $sourcelanguage, $lang);
	  } else {
	    strSyncCategory($idcat, $sourcelanguage, $lang);
	    conSyncArticle($idart, $sourcelanguage, $lang);
	  }

	  if( $online )
	    conMakeOnline( $idart, $lang );


	}
	echo "</p>";

	$db4 = new DB_Contenido;
	$db4->query("SELECT idcat FROM con_cat WHERE parentid = $idcat");

	while( $db4->next_record() ) {
	  syncCat( $db4->f("idcat"), $sourcelanguage, $lang );
	}

}

syncCat( 1, $sourcelanguage, $lang );
Sollte eigentlich funktionieren, habe es jedoch seit einiger Zeit nicht mehr verwendet, also unbedingt zuerst auf einer Test Installation testen...

asycs
Beiträge: 64
Registriert: Do 2. Feb 2006, 12:13
Kontaktdaten:

Beitrag von asycs » Mi 25. Apr 2007, 18:43

Werd ich gleich mal probieren.

Die Anzahl der Sprachen macht mir Sorgen.
Sollen irgendwann mal alle europäischen Länder über ein CMS laufen?

Macht das Sinn? Sind momentan schon 25 MB.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 26. Apr 2007, 13:09

Es hat Vor- und Nachteile. Die Datenmenge sollte nicht so das Problem sein. Erfolgt die Pflege verteilt (also z.B. in verschiedenen Ländern) und diese wollen eigene Templates/Strukturen und Du möchtest das getrennt sichern, ist es über getrennte Installationen besser.

Zur Verwaltung und für andere Aufgaben (e.g. Profile, Frontend-User) ist es dann wieder einfacher, nur eine Installation zu haben...

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

asycs
Beiträge: 64
Registriert: Do 2. Feb 2006, 12:13
Kontaktdaten:

Beitrag von asycs » Do 26. Apr 2007, 13:42

Auf Grund der Aufgabenstellung wird es wohl zwangsläufig auf unterschiedliche Templates unter den Sprachen hinauslaufen.

Die Integration der "Mastersprache" im Lesemodus und gleichzeitiges hinzufügen eigener Inhalte schreit doch nach unterschiedlichen Templates?

Die Schweizer bekommen wie gesagt ihre eigene Sprache, sollen jedoch alle Inhalte aus der deutschen Seite -sehen- und können zusätzlich eigene Inhalte pflegen. Jeweils in einem Artikel!

Generell würde das sicher mit ein paar Zeilen Code funktionieren.
Ist das aber sinnvoll und zukunftorientiert?

Ich habe die Befürchtung, das wird irgendwann krachen.


Über seperate Installationen habe ich auch schon nachgedacht.
An der Stelle dann aber die Frage nach der Machbarkeit.

Schweizer mit eigenem CMS und trotzdem Inhalte aus dem Master anzeigen?

Wäre meine persönliche Wunschlösung, aber ich hab halt Fristen und kaum Zeit lange zu experimentieren. Leider ..

Wenn es also eine Lösung gäbe, die Daten aus dem Master synchron bei den Schweizern anzeigen zu lassen, dann mal eine ungefähre Einschätzung:
Wie lang würde die Umsetzung ca. dauern? Sehr grob reicht schon.

Gruß
asycs

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 27. Apr 2007, 08:16

a) Templates sollten immer sprachneutral gestaltet sein. Das ist auch nicht sehr schwer - alles, was sprachabhängig ist, wird durch einen Container ersetzt und ein entsprechendes Modul integriert; dieses lässt sich leicht übersetzen. Auf diesem Weg sind auch unterschiedliche CSS-Dateien und Bilder möglich.
b) Wenn Du keine Zeit hast, nimm' eine Installation mit mehreren Sprachen. Kriegst Du zwar nie wieder auseinander, aber Du musst keine Zeit in Workarounds zum Zugriff über DB-Grenzen stecken (z.B. für die Suche).

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

RealKev
Beiträge: 4
Registriert: Fr 4. Mai 2007, 16:17
Kontaktdaten:

Beitrag von RealKev » Fr 4. Mai 2007, 16:48

simu hat geschrieben:Also ich würde dies nur über die Sprachen lösen, den Zugriff der einzelnen benutzer kannst du über das integrierte Rechtesystem lösen...

Danach würde ich einen Cronjob installieren der in jeder nacht die Sprachen synchronisiert... dies kannst du über die API-Funktionen lösen. Ich habe vor einiger Zeit ein kleines script geschrieben welches alle Artikel und Kategorien von einer Sprache in die andere synchronisiert ohne die vorhandenen zu ersetzen. Vielleicht kannst du es ja gebrauche...

Code: Alles auswählen

include_once ('[relativer_pfad_zu_deinem_contenido_verzeichnis]/includes/startup.php');

cInclude ("includes", 'functions.api.php');
cInclude ("includes", 'functions.general.php');

cInclude ("classes", 'class.plugin.php');
cInclude ("classes", 'class.xml.php');
cInclude ("classes", 'class.navigation.php');
cInclude ("classes", 'class.template.php');
cInclude ("classes", 'class.backend.php');
cInclude ("classes", 'class.notification.php');
cInclude ("classes", 'class.area.php');
cInclude ("classes", 'class.action.php');
cInclude ("classes", 'class.layout.php');
cInclude ("classes", 'class.treeitem.php');
cInclude ("classes", 'class.user.php');
cInclude ("classes", 'class.group.php');
cInclude ("classes", 'class.cat.php');
cInclude ("classes", 'class.client.php');
cInclude ("classes", 'class.inuse.php');
cInclude ("classes", 'class.table.php');

cInclude("includes","functions.tpl.php");
cInclude("includes","functions.str.php");
cInclude("classes", "class.todo.php");

cInclude ("includes", 'functions.con.php');

$sourcelanguage = 1;
$lang = 2;

$db = new DB_Contenido;

function syncCat( $idcat, $sourcelanguage, $lang ) {

	echo "<h1>$idcat</h1>";

	global $cfg;

	$db2 = new DB_Contenido;

	$sql = "SELECT
	                            a.idart AS idart,
	                a.idlang AS idlang,
	                            a.idartlang AS idartlang,
	                            a.title AS title,
	                            c.idcat AS idcat,
	                            c.idcatart AS idcatart,
	                            a.idtplcfg AS idtplcfg,
	                            a.online AS online,
	                            a.created AS created,
	                            a.lastmodified AS lastmodified,
	                            a.timemgmt AS timemgmt,
	                            a.datestart AS datestart,
	                            a.dateend AS dateend,
	                  a.artsort AS artsort,
	                  a.locked AS locked
	                        FROM
	                            ".$cfg["tab"]["art_lang"]." AS a,
	                            ".$cfg["tab"]["art"]." AS b,
	                            ".$cfg["tab"]["cat_art"]." AS c
	                        WHERE

	                 a.idlang    = '".$sourcelanguage."' AND
	                            a.idart     = b.idart AND
	                            b.idclient  = '1' AND
	                            b.idart     = c.idart AND
	                            c.idcat     = '".$idcat."'";

	$db2->query($sql);
	echo "<p>";
	while( $db2->next_record() ) {
	  $idart = $db2->f("idart");
	  $online = $db2->f("online");
	  echo $idart . "<br>";

	  /* Verify that the category is available in this language */
    $db3 = new DB_Contenido;
		$sql = "SELECT idcatlang FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='$idcat' AND idlang='$lang'";
	  $db3->query($sql);
	  if ($db3->next_record())
	  {
	    conSyncArticle($idart, $sourcelanguage, $lang);
	  } else {
	    strSyncCategory($idcat, $sourcelanguage, $lang);
	    conSyncArticle($idart, $sourcelanguage, $lang);
	  }

	  if( $online )
	    conMakeOnline( $idart, $lang );


	}
	echo "</p>";

	$db4 = new DB_Contenido;
	$db4->query("SELECT idcat FROM con_cat WHERE parentid = $idcat");

	while( $db4->next_record() ) {
	  syncCat( $db4->f("idcat"), $sourcelanguage, $lang );
	}

}

syncCat( 1, $sourcelanguage, $lang );
Sollte eigentlich funktionieren, habe es jedoch seit einiger Zeit nicht mehr verwendet, also unbedingt zuerst auf einer Test Installation testen...
Hi Simu,

habe da eine Frage: Ist das das komplette Skript? Frage mich weil ich die Funktion "conSyncArticle" in dem Skript nicht finde, oder gehört die zu Contenido?

Das Skript wäre nämlich genau das was ich brauchen würde, da der Benutzer oft neue Sprache anlegt und für jede neue Sprache alle Kategorien und Artikel übernehmen soll/will. Das ist natürlich mit der Contenido internen Lösung etwas aufwendig, da der Benutzer JEDE Kategorie und JEDEN Artikel händisch anklicken und kopieren muss.

Wir benutzen die Sprachen als Möglichkeit schnell und einfach eine komplett "neue" Seite zu generieren, in der dann nur noch einige Kategorien und Artikel angepasst werden müssen.

MfG RealKev

simu
Beiträge: 48
Registriert: Di 4. Okt 2005, 08:44
Wohnort: Schweiz
Kontaktdaten:

Beitrag von simu » Fr 4. Mai 2007, 18:08

habe da eine Frage: Ist das das komplette Skript? Frage mich weil ich die Funktion "conSyncArticle" in dem Skript nicht finde, oder gehört die zu Contenido?
Ja das ist das ganze Script, die Funktion "conSyncArticle" ist eine Contenido interne Funktion... aber wie gesagt das Script sollte nicht direkt auf einer produktiven Seite ausgeführt werden, unbedingt zuerst testen.[/quote]

Gesperrt