Artikel einfügen (rechts) - Multilanguage Problem

Gesperrt
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Artikel einfügen (rechts) - Multilanguage Problem

Beitrag von mvf » Mo 5. Jun 2006, 20:43

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! :)
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams

Beleuchtfix
Beiträge: 1082
Registriert: Di 22. Jul 2003, 10:14
Wohnort: Hessen
Kontaktdaten:

Beitrag von Beleuchtfix » Mo 5. Jun 2006, 21:47

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

mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf » Mo 5. Jun 2006, 21:54

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
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams

Beleuchtfix
Beiträge: 1082
Registriert: Di 22. Jul 2003, 10:14
Wohnort: Hessen
Kontaktdaten:

Beitrag von Beleuchtfix » Mo 5. Jun 2006, 22:32

Nun ja, dann waren es doch noch schöne Pfingsten ;-)
Gruß
Florian

Beleuchtfix
Beiträge: 1082
Registriert: Di 22. Jul 2003, 10:14
Wohnort: Hessen
Kontaktdaten:

Beitrag von Beleuchtfix » Di 6. Jun 2006, 08:06

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

mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf » Di 6. Jun 2006, 11:44

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
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams

Gesperrt