Seite 1 von 1

Wiki noch in Betrieb ? Fehler anpassen:

Verfasst: Mi 27. Nov 2013, 16:37
von rethus
Ist das Wiki hier noch in Betrieb:
http://www.contenido-wiki.org/wiki/inde ... =CMS_TYP's

Ich finde da nirgends ein "Register" Link um mich anzumelden. Mein Forum-Passwort geht auch nicht.
Zudem scheint es hier auch nochmal zu sein:
https://docs.contenido.org/display/CONDEVE/Content+type



Auf dieser Seite ist unten ein Fehler, da die unten stehende Variante 5.1 Eigenen CMS-Type nicht mehr mit < 4.1 kompatibel ist.

Der Code muss wie folgt angepasst werden:

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");

       if( !cRegistry::isBackendEditMode() ) {
           $db2     = cRegistry::getDb();
           #$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 = '".cSecurity::toInteger($idart)."' AND B.idlang = '".cSecurity::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;
   }

Re: Wiki noch in Betrieb ? Fehler anpassen:

Verfasst: Mi 27. Nov 2013, 16:59
von rethus
Mhh, sehe gerade, dass die Funktion dennoch nicht geht.
Gebe ich das erste SQL-Statement aus und führe es in der DB direkt aus, erhalte ich eine Ergebniszeile,
die Zeile

Code: Alles auswählen

	   $cms_code    = $db->f("code");
in der Funktion, gibt aber nichts zurück. Es scheint, die DB wird gar nicht abgefragt. Ein Fehler wird aber auch nicht geworfen.
Hat jemand ne Idee, woran das liegen kann?
$db->getErrorMessage gibt "null" zurück.

Re: Wiki noch in Betrieb ? Fehler anpassen:

Verfasst: Mi 27. Nov 2013, 18:28
von rethus
Ok, hab es nun soweit eingegrenzt, dass er aus der Tabelle con_type die Spalte code holt und via eval ausführen möchte, diese ist aber in der 4.9er leer.

Scheinbar hat sich hier etwas an der struktur geändert, denn in der 4.8 hat da noch was drin gestanden wie folgendes für CMS_HEAD :

Code: Alles auswählen

/**
 * CMS_HEAD
 */
$tmp = $a_content["CMS_HEAD"][$val];
$tmp = urldecode($tmp);
$tmp = htmlspecialchars($tmp);
$tmp = str_replace("'", "\'", $tmp);
$tmp = str_replace("\$",'\\\$',$tmp); 

if ($edit) {

   /* Edit anchor and image */
   $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_HEAD&typenr=$val&lang=$lang");
   $editAnchor = new cHTMLLink;
   $editAnchor->setClass('CMS_HEAD_'.$val.'_EDIT CMS_LINK_EDIT');
   $editAnchor->setLink("javascript:setcontent('$idartlang','".$editLink."');");
   //Save all content
   
   $editButton = new cHTMLImage;
   $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_edithead.gif");
   $editButton->setBorder(0);
   $editButton->setStyleDefinition("margin-right", "2px");
       
   $editAnchor->setContent($editButton);
   
   /* Process for output with echo */
   $finalEditButton = $editAnchor->render();
   $finalEditButton = AddSlashes(AddSlashes($finalEditButton));
   $finalEditButton = str_replace("\\\'","'",$finalEditButton);

   $tmp = $tmp.$finalEditButton;
}

Re: Wiki noch in Betrieb ? Fehler anpassen:

Verfasst: Mi 27. Nov 2013, 19:11
von rethus
Ok, ich denke in beiden Wikis sind die Einträge veraltet und nicht mehr auf 4.9 anwendbar.

Der Code Kann nun ganz einfach gegen einen anderen ersetzt werden.
Diesen Poste ich aber in einem Eigenen Thread, um es hier übersichtlich zu halten.

Hie der Link:

Re: Wiki noch in Betrieb ? Fehler anpassen:

Verfasst: Do 28. Nov 2013, 10:25
von xmurrix
Hallo rethus,

die Inhalte im Wiki wurden seit langem nicht mehr aktualisiert, genauso wie die Contenido-FAQ Seite. Finde es schade...

Nun zum Thema Content-Type:
In 4.9 wurde der Code der Content-Typen auf das Dateisystem verlagert, es ist nicht mehr in der Tabelle con_type drin.

Du kannst den Code für einen Content-Type auf 2 Arten implementieren, als eine Content-Type Klasse oder als ein include-Script, das Erstere mit der Klasse sollte verwendet werden.

Nehmen wir an, du hast einen eigenen Content-Type CMS_MYTYPE, dann gibt es folgende Mögichkeiten:

1. Content-Type Klasse
Eine Datei "class.content.type.mytype.php" im Verzeichnis "contenido/classes/content_types/" erstellen. Darin die Klasse "cContentTypeMytype" implementieren, diese sollte von "cContentTypeAbstract" erben.

Beispiel:

Code: Alles auswählen

class cContentTypeMytype extends cContentTypeAbstract {

    public function __construct($rawSettings, $id, array $contentTypes) {
        parent::__construct($rawSettings, $id, $contentTypes);
        $this->_type = 'CMS_MYTYPE';
    }

    // View Code generieren...
    public function generateViewCode() {
        $code = '...';
        return $code;
    }

    // Edit Code generieren...
    public function generateEditCode() {
        $code = '...';
        return $code;
    }

}
2. Content-Type include Datei
Alternativ zu Klasse kannst du eine Datei "include.CMS_MYTYPE.code.php" im Verzeichnis "contenido/includes/type/code/" erstellen.

Beispiel:

Code: Alles auswählen

$tmp = $a_content['CMS_MYTYPE'][$val];

if ($edit) {
    // Code für edit view
    $tmp = '...';
}

$tmp = addslashes($tmp);
$tmp = str_replace("\\'", "'", $tmp);
$tmp = str_replace("\$", '\\$', $tmp);
Der Code in dieser Datei braucht die globale Variable $a_content um sich den aktuellen Wert zu holen. Du musst damit rechnen, dass in Zukunft diese Variable $a_content wegfällt, da man Stück für Stück solche Anhängigkeiten abschafft.

Beide Beispiele sind nicht vollsändig, sollen aber grob die Richtung zeigen, wie das nun funktioniert. In der Version 4.9 gibt es zu allen gelieferten Content-Typen die cContentType* Klassen unter "contenido/classes/content_types/".
Ansonsten kannst du von 4.8 den Code aus der Tabelle con_type als Vorlage für die include-Version verwenden.

Gruß
xmurrix

Re: Wiki noch in Betrieb ? Fehler anpassen:

Verfasst: Do 28. Nov 2013, 12:52
von rethus
Danke für die Antwort, habe mich zwischenzeitlich durchgewurchtelt und dass hier erstellt:

http://forum.contenido.org/viewtopic.php?f=92&t=34744

Ich brauchte keinen eigenen neuen Content-Type, sondern lediglich einen dynamischen.
Mir ist es wirklich ein Rätsel, warum dass nicht schon längst umgesetzt wurde, da diese Anfrage schon seit Jahren immer wieder aufkommt.
Nun ja, mit der neuen Struktur gehts ja. Und wer mag darf gerne helfen das Modul weiter zu optimieren,

Re: Wiki noch in Betrieb ? Fehler anpassen:

Verfasst: Do 28. Nov 2013, 14:34
von Faar
Das Wiki ist in Betrieb und eigentlich müsste man sich nur einen Zugang geben lassen, um dort schreiben zu können.
Ich würde mal Dominik Ziegler als Ansprechpartner nennen.
Hier ist die jüngere Geschichte des Wiki: http://forum.contenido.org/viewtopic.php?f=78&t=33422

Mehr Doku wäre auf jeden Fall gut und im Wiki passt es gut, wenn sie auch von unserer Seite kommt.