Seite 1 von 1

Artikel einfügen (rechts) - Multilanguage Problem

Verfasst: Mo 5. Jun 2006, 20:43
von mvf
hallo community

dieses problem beschäftigt mich nun schon das ganze pfingstwochende :?

um in einer spalte im layout content auf allen seiten einzufügen, möchte ich den inhalt eines CMS_HTML[] types 1:1 übernehmen incl. verlinkter bilder, formate etc. der artikel der eingefügt werden soll kommt aus kategorie XY (Systemseiten) und dort immer der startartikel

dazu habe das standardmodul "Artikel einfügen (rechts)" verwendet, und das zunächst zum testen um den input gekürzt.

modified "Artikel einfügen (rechts)"
input: leer
output:

Code: Alles auswählen

<?php

$cms_idcat = 23;

	$sql = "SELECT
						b.idart AS idart
			   		FROM
	            		".$cfg["tab"]["cat_lang"]." AS a,
	            		".$cfg["tab"]["art_lang"]." AS b
						WHERE
						a.idcat = '".$cms_idcat."' AND
						a.startidartlang = b.idartlang AND 
						a.idlang = '".$lang."'";

	$db->query($sql);

	while ($db->next_record()) {
	$news_startarticle = $db->f('idart');
	}

$cms_idcatart = $news_startarticle;

$bDebug = true;
if ($bDebug) echo "<pre> cat $cms_idcat catart $cms_idcatart</pre>";

if ((strlen($cms_idcat) > 0 AND $cms_idcat != '0') AND (strlen($cms_idcatart) > 0 AND $cms_idcatart != '0')) {


    	$cms_catid = $cms_idcat;
    	$cms_artid = $cms_idcatart;
    	

	
	
    #Check if category is online or protected
    $sql = "SELECT public, visible FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".$cms_catid."' AND idlang='".$lang."'";
	if ($bDebug) {echo "<pre>";print_r($sql);echo "</pre>";}
    $db->query($sql);
    $db->next_record();

    $public = $db->f("public");
    $visible = $db->f("visible");
    	
    $db->free();

    #Check if article is online
    $sql = "SELECT online FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".$cms_artid."' AND idlang='".$lang."'";
	if ($bDebug) {echo "<pre>";print_r($sql);echo "</pre>";}
    $db->query($sql);
    $db->next_record();

    $online = $db->f("online");
    	
    $db->free();

    #If the article is online and the according category is not protected and visible, include the article

    if ($public == 1 AND $visible == 1 AND  $online == 1) {
		#Check if code creation is necessary
    	$sql = "SELECT
                createcode
            FROM
                ".$cfg["tab"]["cat_art"]."
            WHERE
                idcat = '".$cms_catid."' AND
                idart = '".$cms_artid."'";
		if ($bDebug) {echo "<pre>";print_r($sql);echo "</pre>";}
		$db->query($sql);
		if ($db->next_record()) {
			$createcode = $db->f("createcode");
		} else {
			$createcode = 1;
		}
	
		$db->free();
		
		#Create code if necessary
		if ($createcode == 1) {
			cInclude('includes', 'functions.con.php');
			cInclude('includes', 'functions.tpl.php');
			cInclude('includes', 'functions.mod.php');
			
        	conGenerateCode($cms_catid, $cms_artid, $lang, $client);
		}
		
		#Get code from database and execute it
		$sql = "SELECT code FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".$cms_idcatart."' AND idlang = '".$lang."'";
		if ($bDebug) {echo "<pre>";print_r($sql);echo "</pre>";}

		$db->query($sql);
		if ($db->next_record()) {
			$code = stripslashes($db->f("code"));
			
			$db->free();
			
			ob_start();
		
			eval("?>
".$code."
<?php
");
	
			$code = ob_get_contents();
	
			#Clean buffer
			ob_end_clean();
	
			$startpos = strpos($code, "<!--start:content-->");
			$endpos = strpos($code, "<!--end:content-->");
			$difflen = $endpos - $startpos;
		
			$code = substr($code, $startpos, $difflen);	
		
			echo $code;
		} else {
			echo "<!-- ERROR in module Article Include<pre>no code created for article to include!<br>idcat $cms_catid, idart $cms_artid, idlang $lang, idclient $client</pre>-->";
		}
    }
}

?>
soweit sogut, das funktioniert prima

der haken an der sache ...

wenn ich jetzt meinen baum in einer 2. sprache synchronisiere, dann passiert dort zunächst gar nichts. erst wenn ich in der 2. sprache den zu includierenden artikel speichere wird im frontend auch in der 2. sprache der artikel angezeigt.

switche ich nun zurück zur 1. sprache im frontend, dann ist dort wieder nix zu sehen, bis ich im backend den artikel in sprache 1 speichere und siehe da ... eben jetzt gehts aber in der 2. sprache wieder nicht. da steht in der con_code meines erachtens immer nur der last-save drin :(

die parts mit denen ich nicht klar komme sind

Code: Alles auswählen

		#Check if code creation is necessary
		#Create code if necessary
ok ich könnte eine artikelliste dafür verwenden, aber das ist IMHO too much für das was ich vor habe, und ich müsste arg viel umstricken, dass alle image-sizes übernommen werden, alle formate, links etc ...

gibt es einen ansatz der schon läuft für mein problem?

dank für euren input! :)

Verfasst: Mo 5. Jun 2006, 21:47
von Beleuchtfix
Hallo Guido

Gefühlsmäßig müsste der Fehler in der Gegend liegen:

Code: Alles auswählen

WHERE
                idcat = '".$cms_catid."' AND
                idart = '".$cms_artid."'"; 
Hier müßte eigentlich noch die Sprache berücksichtigt werden, idart allein ist nicht eindeutig genug.

Viel Erfolg
Florian

Verfasst: Mo 5. Jun 2006, 21:54
von mvf
Beleuchtfix hat geschrieben:Hallo Guido

Gefühlsmäßig müsste der Fehler in der Gegend liegen:
genauso ist es lieber florian ;)

wollte gerade den neuen code posten

Code: Alles auswählen

<?php

$cms_idcat = 23;

	$sql = "SELECT
						b.idart AS idart
			   		FROM
	            		".$cfg["tab"]["cat_lang"]." AS a,
	            		".$cfg["tab"]["art_lang"]." AS b
						WHERE
						a.idcat = '".$cms_idcat."' AND
						a.startidartlang = b.idartlang AND 
						a.idlang = '".$lang."'";

	$db->query($sql);

	while ($db->next_record()) {
	$news_startarticle = $db->f('idart');
	}

$cms_idcatart = $news_startarticle;

$bDebug = true;
if ($bDebug) echo "<pre> cat $cms_idcat catart $cms_idcatart</pre>";

if ((strlen($cms_idcat) > 0 AND $cms_idcat != '0') AND (strlen($cms_idcatart) > 0 AND $cms_idcatart != '0')) {


    	$cms_catid = $cms_idcat;
    	$cms_artid = $cms_idcatart;
    	

	
	
    #Check if category is online or protected
    $sql = "SELECT public, visible FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".$cms_catid."' AND idlang='".$lang."'";
	if ($bDebug) {echo "<pre>";print_r($sql);echo "</pre>";}
    $db->query($sql);
    $db->next_record();

    $public = $db->f("public");
    $visible = $db->f("visible");
    	
    $db->free();

    #Check if article is online
    $sql = "SELECT online FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".$cms_artid."' AND idlang='".$lang."'";
	if ($bDebug) {echo "<pre>";print_r($sql);echo "</pre>";}
    $db->query($sql);
    $db->next_record();

    $online = $db->f("online");
    	
    $db->free();

    #If the article is online and the according category is not protected and visible, include the article

    if ($public == 1 AND $visible == 1 AND  $online == 1) {
		#Check if code creation is necessary
    	$sql = "SELECT
                code
            FROM
                ".$cfg["tab"]["code"]."
            WHERE
                idcatart =  '".$cms_artid."' AND
                idlang = '".$lang."'";
    	
    	if ($bDebug) {echo "<pre>";print_r($sql);echo "</pre>";}
		$db->query($sql);
		if ($db->next_record()) {
			$createcode = $db->f("code");
		} else {
			$createcode = 1;
		}
	
		$db->free();
		
		#Create code if necessary
		if ($createcode == 1) {
			cInclude('includes', 'functions.con.php');
			cInclude('includes', 'functions.tpl.php');
			cInclude('includes', 'functions.mod.php');
			
        	conGenerateCode($cms_catid, $cms_artid, $lang, $client);
		}
		
		#Get code from database and execute it
		$sql = "SELECT code FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".$cms_idcatart."' AND idlang = '".$lang."'";
		if ($bDebug) {echo "<pre>";print_r($sql);echo "</pre>";}

		$db->query($sql);
		if ($db->next_record()) {
			$code = stripslashes($db->f("code"));
			
			$db->free();
			
			ob_start();
		
			eval("?>
".$code."
<?php
");
	
			$code = ob_get_contents();
	
			#Clean buffer
			ob_end_clean();
	
			$startpos = strpos($code, "<!--start:content-->");
			$endpos = strpos($code, "<!--end:content-->");
			$difflen = $endpos - $startpos;
		
			$code = substr($code, $startpos, $difflen);	
		
			echo $code;
		} else {
			echo "<!-- ERROR in module Article Include<pre>no code created for article to include!<br>idcat $cms_catid, idart $cms_artid, idlang $lang, idclient $client</pre>-->";
		}
    }
}

?>
jetzt noch die $cms_idcat in die mandanteneinstellungen ausgliedern und das wars

Verfasst: Mo 5. Jun 2006, 22:32
von Beleuchtfix
Nun ja, dann waren es doch noch schöne Pfingsten ;-)
Gruß
Florian

Verfasst: Di 6. Jun 2006, 08:06
von Beleuchtfix
jetzt noch die $cms_idcat in die mandanteneinstellungen ausgliedern und das wars
warum soll das in die Mandanteneinstellungen? Ich würde das im Input Teil machen, dann kannst du auch unterschiedliche Artikel einfügen
Gruß
Florian

Verfasst: Di 6. Jun 2006, 11:44
von mvf
Beleuchtfix hat geschrieben:
jetzt noch die $cms_idcat in die mandanteneinstellungen ausgliedern und das wars
warum soll das in die Mandanteneinstellungen? Ich würde das im Input Teil machen, dann kannst du auch unterschiedliche Artikel einfügen
Gruß
Florian
genau darum habe ich es aus dem Input raus genommen, damit man dies nicht tut, über die mandanteneinstellungen ist gewährleistet, dass immer aus der selben kategorie inkludiert wird, ohne dass redakteure dadran rumfummeln