Container IDs dynamisch erstellen

KrissKrass
Beiträge: 86
Registriert: Mi 2. Jun 2004, 16:01
Wohnort: Bochum
Kontaktdaten:

Re: Container IDs dynamisch erstellen

Beitrag von KrissKrass » Do 9. Apr 2009, 08:33

Morgen OliverL,

ganz ehrlich... Du bist mein persönlicher Held! :P
Ich danke dir wirklich vielmals. Es funktioniert nun einwandfrei und macht genau das was es soll.

Werde den Code nun noch in das Contenido-Wiki posten, damit alle etwas davon haben.

Nochmals vielen vielen Dank.

MfG
Christoph

Leo
Beiträge: 308
Registriert: Mi 19. Apr 2006, 19:26
Kontaktdaten:

Re: Container IDs dynamisch erstellen

Beitrag von Leo » Sa 9. Mai 2009, 22:38

Hallo,

ich habe den Code etwas angepasst. Wenn nämlich die Datenbank-Tabelle nicht con_type heißt, funktioniert das Script nicht mehr. Ich habe die 4 Zeile so geändert: $sql = "SELECT * FROM ".$cfg['sql']['sqlprefix']."_type WHERE type = '$container_type'";

Code: Alles auswählen

function make_cms_type( $container_type, $container_id ) {       
        global $a_content, $idartlang, $idart, $idcat, $lang, $db, $edit, $sess, $client, $cfg, $cfgClient;
       
        $sql = "SELECT * FROM ".$cfg['sql']['sqlprefix']."_type WHERE type = '$container_type'";
        $db->query($sql);
   
        $db->next_record();
        $cms_code = $db->f("code");
        $cms_idtype = $db->f("idtype");

        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 = '".Contenido_Security::toInteger($idart)."' AND B.idlang = '".Contenido_Security::escapeDB($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;
}   
Viele Grüße

Leonhard

OliverL
Beiträge: 870
Registriert: Do 28. Jun 2007, 09:28
Kontaktdaten:

Re: Container IDs dynamisch erstellen

Beitrag von OliverL » So 10. Mai 2009, 20:57

THX. eigentlich standard bei mir aber hab ich hier mal vergesessen.
Habs in meinem Post und im Wiki geändert.

mfg oliverL

mfweb
Beiträge: 270
Registriert: Mo 12. Sep 2005, 18:31
Kontaktdaten:

Re: Container IDs dynamisch erstellen

Beitrag von mfweb » Di 12. Mai 2009, 01:26

Wobei das doch genaugenommen

Code: Alles auswählen

$sql = "SELECT * FROM ".$cfg["tab"]["type"]." WHERE type = '$container_type'";
heißen müsste, oder?

Habe es mal im Wiki angepasst.

Grüße
mfweb
Immer mal ein Blick wert: Contenido Wiki ... auch schreibender Zugriff ist erlaubt!

OliverL
Beiträge: 870
Registriert: Do 28. Jun 2007, 09:28
Kontaktdaten:

Re: Container IDs dynamisch erstellen

Beitrag von OliverL » Di 12. Mai 2009, 07:03

jo ... thx fürs wiki update.

mfg OliverL

Ginche
Beiträge: 24
Registriert: Mi 20. Mai 2009, 07:31
Kontaktdaten:

Re: Container IDs dynamisch erstellen

Beitrag von Ginche » Fr 9. Okt 2009, 09:19

Hallo Leute!

ich stelle mich echt ungeschickt an :( aber ich bringe dieses Modul nicht zum laufen. Wo soll ich diese Funktion genau schreiben? wie kann ich sie auslagern, damit ich sie für verschiedene module, wie Picture, Text, Headline...verwenden könnte. Bis jetzt hab ich die funktion direkt in ein modul reinkopiert und....verschwand die ganze Seite, steht nur eine weisse Webseite :( Was mache ich falsch?

Danke Ginche

qualtext
Beiträge: 17
Registriert: Di 19. Jun 2012, 10:04
Kontaktdaten:

Re: Container IDs dynamisch erstellen

Beitrag von qualtext » Di 25. Jun 2013, 11:50

Hallo Gemeinde,

kann es sein, dass die aktuelle WikiFunktion (http://www.contenido-wiki.org/wiki/inde ... ent.2Cn.29) nicht mit dem Typen "CMS_FILELIST" funktioniert?

Ich arbeite viel mit diesem Snipped, aber die Filelist gibt dies aus:

Code: Alles auswählen

$filelist = make_cms_type('CMS_FILELIST',1);
print_r($filelist);
//ergibt: ";?>getAllWidgetOutput(); ?>
In der Funktion habe ich mal die variablen ausgegeben:

Code: Alles auswählen

//--sql:
SELECT * FROM con_type WHERE type = 'CMS_FILELIST'

//--cms_code:
$tmp = $a_content["CMS_FILELIST"][$val]; $oCmsFileList = new Cms_FileList($tmp, $val, $idartlang, $editLink, $cfg, $db, $belang, $client, $lang, $cfgClient, $sess); if($edit){ $tmp = $oCmsFileList->getAllWidgetEdit(); }else{ $tmp = $oCmsFileList->getAllWidgetView(); }

//--cms_idtype: 
21

//--edit:
true
Leider passieren solche Dinge immer wenn man Zeitdruck hat, daher freue ich mich sehr über Mithilfe und Tipps, woran das liegen mag.

Vielen Dank,
qualtext

qualtext
Beiträge: 17
Registriert: Di 19. Jun 2012, 10:04
Kontaktdaten:

Re: Container IDs dynamisch erstellen

Beitrag von qualtext » Di 25. Jun 2013, 13:48

Ich hab mich nochmal durchgefranzt...

Der Fehler liegt nicht in der Funktion make_cms_type(). Eher aber in der Filelistclass.

Die public function getAllWidgetView() in der class Cms_FileList gibt ihren sprintf falsch aus/bricht ab:

Code: Alles auswählen

public function getAllWidgetView() {
		$sCode = '\";?><?php 	 
					$oFileList = new Cms_FileList(\'%s\', %s, 0, "", $cfg, null, "", $client, $lang, $cfgClient, null);
					
					echo $oFileList->getAllWidgetOutput();
				 ?><?php echo \"';
		
		$sCode = sprintf($sCode, $this->sContent, $this->iId);
		return $sCode;
}

hier kommt nur ein abgebrochenes Stückchen raus, nämlich das (siehe vorheriger Beitrag):

Code: Alles auswählen

";?>getAllWidgetOutput(); ?>
Da ich mit make_cms_type('CMS_FILELIST',1) sowieso nur an die Schaltfläche zur Auswahl der Dateien und Sortierung ranwill, habe ich in der class die Function getAllWidgetEdit() kopiert, umbenannt und den Aufruf der getAllWidgetView() deaktivert:

Code: Alles auswählen

        public function getAllWidgetEdit() {	
		
                /* ... */

		$sCode = $oTpl->generate($this->aCfg['path']['contenido'].'templates/standard/template.cms_filelist_edit.html', 1);
		return $this->getAllWidgetView( true ) . $this->encodeForOutput($sCode);
	}

        public function getAllWidgetEdit2() {	
		
                /* ... */

		$sCode = $oTpl->generate($this->aCfg['path']['contenido'].'templates/standard/template.cms_filelist_edit.html', 1);
		//alt: return $this->getAllWidgetView( true ) . $this->encodeForOutput($sCode);
               return $this->encodeForOutput($sCode);
	}
Am Core rumbasteln ist nicht updatesicher... trotzdem muss ich das so machen.
Dadurch die Funktion make_cms_type() in der DB nachschaut, wie das CMS_Element aufgebaut ist, habe ich diese angepasst:

Code: Alles auswählen

function make_cms_type( $container_type, $container_id ) {       
       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");
	
       /*neu*/
       if($container_type=='CMS_FILELIST') {
		    //function getAllWidgetEdit2() has another return val
		   $cms_code = str_replace('getAllWidgetEdit()','getAllWidgetEdit2()', $cms_code);
       }
	   
       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 = '".Contenido_Security::toInteger($idart)."' AND B.idlang = '".Contenido_Security::escapeDB($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;
   	}
Damit bekomme ich die Schaltfläche für die Filelist. Funktioniert super.

Dadurch ich aber jetzt an der Class Änderungen gemacht habe, suche ich immer noch nach einer Lösung, die besser ist.
Ist das sprintf wirklich kaputt? Oder wird das nur bei mir falsch ausgegeben?
Und wieso existiert diese Funktion so überhaupt?

Naja,
qualtext.

Gesperrt