functions.make_cms_type.php - kein Inhalt über con_code

Gesperrt
spectral
Beiträge: 38
Registriert: Mi 5. Mär 2008, 16:40
Kontaktdaten:

functions.make_cms_type.php - kein Inhalt über con_code

Beitrag von spectral »

Hallo!

Ich benutze functions.make_cms_type.php (siehe http://www.contenido-wiki.org/wiki/inde ... ent.2Cn.29) um einen Footer-Artikel mit zahlreichen Links zu erzeugen. Diesen binde ich mit Hilfe der Tabelle con_code in alle Seiten ein. Aber die eingegebenen Werte erscheinen nicht. Werte die mit CMS_VALUE[x] oder CMS_TEXT[x] im Artikel-Output eingebunden sind, kommen an. Eingaben die in durch make_cms_type("CMS_TEXT", x ) erzeugten Felder gemacht werden, bleiben leer.

Der Code im einzelnen (vereinfacht):

Das Footer-Modul:

Code: Alles auswählen

cInclude('includes', 'functions.make_cms_type.php');
echo"
  <!--start-->
  CMS_VALUE[100]
  CMS_TEXT[101]";

for($i=0; $i<10; $i++){
  echo'
    <a href="'.make_cms_type("CMS_LINK",( 200 + $i)).'" alt="'.make_cms_type("CMS_LINKTITLE",( 200 + $i)).'">'.make_cms_type("CMS_TEXT",( 250 + $i)).'</a>'.make_cms_type("CMS_LINKEDIT",( 200 + $i))';
}
echo'  <!--end-->';
Das Modul zur Einbindung des Footers auf alle Seiten:

Code: Alles auswählen

$sql = "SELECT code FROM ".$cfg["tab"]["code"]." WHERE idcatart = 35 AND idlang = 1";
$db->query($sql);

if ($db->next_record()) {
    $code = stripslashes($db->f("code"));
    $db->free();

    ob_start();
    eval("?>
".$code."
<?php
");
    $code = ob_get_contents();
    ob_end_clean();
    
    $startpos = strpos($code, "<!--start-->");
    $endpos = strpos($code, "<!--end-->");
    $difflen = $endpos - $startpos;
        
    $code = substr($code, $startpos, $difflen);
    echo $code;
}
Wie gesagt, die Werte, die für CMS_VALUE in der Artikel-Konfiguration bzw. die für CMS_TEXT im Artikel-Editor des Footer-Artikels eingegeben wurden, erscheinen. Die Eingaben, die in mit make_cms_type erzeugten Feldern gemacht wurden, erscheinen zwar im Footer-Artikel aber nicht mehr nach der Einbindung in einen anderen Artikel mit dem Modul oben, obwohl die Funktion make_cms_type jeweils ausgeführt wird, das habe ich getestet.

Meine Frage nun an die Experten: Gibt es einen Trick? Ist ein Fehler in meinem Code? Kann man functions.make_cms_type.php modifizieren, dass es geht - und wenn ja, wie?

Contenido 4.8.16

Schöne Grüße, Andras
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: functions.make_cms_type.php - kein Inhalt über con_code

Beitrag von Spider IT »

Hallo Andras,

schau dir für die Einbindung doch mal die /contenido/classes/class.article.php an, denn damit kannst du direkt die einzelnen Felder eines anderen Artikels abfragen.
Beispiel:

Code: Alles auswählen

cInclude('classes', 'class.article.php');
$oArt = new Article($my_idart, $client, $lang); # $my_idart vorher definieren
for ($i = 0; $i < 10; $i ++) {
    $sLink = $oArt->getContent('CMS_LINK', (200 + $i));
    # ...
}
Gruß
René
spectral
Beiträge: 38
Registriert: Mi 5. Mär 2008, 16:40
Kontaktdaten:

Re: functions.make_cms_type.php - kein Inhalt über con_code

Beitrag von spectral »

Hallo René,

danke für Deinen Tipp! Grundsätzlich ist das eine gute Idee, da aber in dem Footer fast 100 Direktlinks zu einzelen Maschinen sind (über Sinn und Unsinn davon brauchen wir nicht zu diskutieren - der Kunde will das so), wäre es schöner, wenn ich einfach das fertigel html des Footer Artikels einbinden könnte und nicht alle Werte einzeln holen und formatieren müsste.

Schönen Gruß, Andras
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: functions.make_cms_type.php - kein Inhalt über con_code

Beitrag von Spider IT »

Hallo Andras,

würde dir da nicht mein Modul Vererbung helfen?
Darin kannst du die ganzen Felder deklarieren und brauchst sie nur im Baum-Hauptartikel bearbeiten.

Oder du packst den Footer in ein separater Artikel und holst ihn per Ajax rüber.
Im dem Artikel kannst du dann per ob_end_clean(); die vorherige Ausgabe unterdrücken und nach der Ausgabe per die(); oder exit(); auch den Rest ignorieren.

Gruß
René
spectral
Beiträge: 38
Registriert: Mi 5. Mär 2008, 16:40
Kontaktdaten:

Re: functions.make_cms_type.php - kein Inhalt über con_code

Beitrag von spectral »

Das Modul Vererbung schaue ich mir mal an. Mit AJAX bin ich in diesem Zusammenhang vorsichtig, da das Suchmaschinenrelevante Links sind und ich nicht weiß, wie verlässlich das mit nachgeladenem Content erfasst wird.
spectral
Beiträge: 38
Registriert: Mi 5. Mär 2008, 16:40
Kontaktdaten:

Re: functions.make_cms_type.php - kein Inhalt über con_code

Beitrag von spectral »

So jetzt habe ich eine Lösung gefunden. Das functions.make_cms_type.php (siehe http://www.contenido-wiki.org/wiki/inde ... ent.2Cn.29) nimmt immer die aktuelle $idart, um die Daten aus der Datenbank zu holen. Da der Footer-Artikel natürlich eine ganz andere $idart hat, fehlen die Werte. Ich habe jetzt die Funktion make_cms_type modifiziert, dass man ihr eine idart (und auch eine Sprache) mitgeben kann:


function make_cms_type2( $container_type, $container_id, $my_idart, $my_lang ) {
global $a_content, $idartlang, $idart, $idcat, $lang, $db, $edit, $sess, $client, $cfg, $cfgClient;

$sql = "SELECT * FROM ".$cfg["tab"]["type"]." WHERE type = '$container_type'";
$db->query($sql);

$db->next_record();
$cms_code = $db->f("code");
$cms_idtype = $db->f("idtype");

if (!$my_idart || $my_idart == ''){
$my_idart = Contenido_Security::toInteger($idart);
}
if (!$my_lang || $my_lang == ''){
$my_lang = $lang;
}

if( !$edit ) {
$db2 = new DB_Contenido;
$sql = "SELECT * FROM ".$cfg["tab"]["content"]." AS A, ".$cfg["tab"]["art_lang"]." AS B, ".$cfg["tab"]["type"]." AS C
WHERE A.idtype = C.idtype AND A.idartlang = B.idartlang AND B.idart = '".$my_idart."' AND B.idlang = '".Contenido_Security::escapeDB($my_lang, $db)."' AND
A.idtype = '".$cms_idtype."' AND A.typeid = '".$container_id."'";
$db2->query($sql);
$db2->next_record();
$a_content[$db2->f("type")][$db2->f("typeid")] = $db2->f("value");
}

$val = $container_id;

eval($cms_code);
$tmp_output = str_replace('\\\"','"',$tmp);
$tmp_output = stripslashes($tmp_output);
return $tmp_output;

}
Gesperrt