Vorschlag: CMS Types komplett in Datenbank verlagern

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Vorschlag: CMS Types komplett in Datenbank verlagern

Beitrag von stese »

Ich bin mal wieder dabei ein Plugin zu schreiben, dabei ist mir folgendes aufgefallen was bissl ungünstig gelöst ist:

Momentan existieren die CMS Typen (wie CMS_TEXT, CMS_HTML, ...) sowohl in der Datenbank als auch im contenido/includes Ordner. Im includes Ordner wird praktisch die Eingabemaske und in der Datenbank die eigentliche Verarbeitung gespeichert.

Gerade für benutzerspezifische Projekte wäre es viel kleverer, wenn man beide Bestandteile in die Datenbank verlagern würde, um neue CMS Typen via Plugin erstellen zu können, die also einfach nachzuinstallieren oder zu entfernen sind. Sprich ich würde jetzt beispielsweise ein Plugin schreiben was einen benutzerdefinierten CMS-Typ CMS_FORM erstellt, was es später in der Website ermöglicht einen CMS_FORM[0] Abschnitt im Modul zu setzen um die Formulare artikelgebunden anzusprechen und abzuspeichern.

Meinungen? Wenn es später mal auch übernommen wird, dann würde ich mich auch um die Umprogrammierung des Core kümmern
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

hmm...

alles in die db zu verlagern, ja wäre ne möglichkeit...

die bestehenden teile könnte man dann entweder direkt in der db hinterlegen, oder mittels eines includes einfach einbinden...

die änderungen am core wären an sich nicht so umfangreich...
*** make your own tools (wishlist :: thx)
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Beitrag von xmurrix »

Hallo zusammen,

mit den CMS Typen hatte ich mich auch mal beschäftigt. Wenn ich mich nicht irre, kommt Darstellung zum Bearbeiten der CMS Typen aus der DB und die Include-Dateien finden nur dann Verwendung, wenn die eingegebenen Daten gespeichert werden sollen.

Sehr wahrscheinlich wird in diesen Include-Dateien jeweils der Code zum Speichern der Daten für den CMS Typ abgearbeitet. Beispiel:

Code: Alles auswählen

if ($doedit == '1') {
    consaveContentEntry($idartlang, 'CMS_HTML', $typenr, $CMS_HTML);
    conGenerateCodeForArtInAllCategories($idart);
    header('Location: '.$sess->url($cfgClient[$client]['path']['htmlpath']."front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&changeview=edit").'');
}
Falls diese Dateien wirklich nur dann eingebunden werden, wenn auch $doedit den Wert '1' hat, findet innerhalb der if-Bedingung sowieso eine header-Weiterleitung statt.

Eine andere Verwendung konnte ich nicht ausmachen, daher gehe ich mal davon aus, dass der nachfolgende Code in diesen Include-Dateien ein Übrigbleibsel aus früheren Zeiten ist.

Wer kennt sich eigentlich mit den Include-Dateien der CMS Typen aus?

Grüße
xnurrix
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

@xmurrix:
so wie ich das sehe werden die files für die eingabe benötigt, und die db elemente nur für die verarbeitung - also genau anders herum.
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Beitrag von xmurrix »

Hallo stese,
stese hat geschrieben:@xmurrix:
so wie ich das sehe werden die files für die eingabe benötigt, und die db elemente nur für die verarbeitung - also genau anders herum.
auf den ersten Blick scheint es so zu sein, wie du es schreibst. Habe mir zwar nicht alle DB Einträge zu den CMS Typen angesehen, aber bei einigen CMS Typen (CMS_HTML, CMS_TEXT) kommt der Code zum Bearbeiten der Daten aus der DB.

Beispiel DB-Code für CMS_HTML:

Code: Alles auswählen

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

$tmp = AddSlashes(AddSlashes($tmp));
$tmp = str_replace("\\\'","'",$tmp);


cInclude("includes", "functions.lang.php");
cInclude("classes", "class.htmlelements.php");

if ($edit) {
    if ($tmp == "") {
        $tmp = " ";
    }
    $insiteEditingDIV = new cHTMLDiv;
    $insiteEditingDIV->setId("HTML_".$db->f("idtype")."_".$val);
    $insiteEditingDIV->setEvent("Focus", "this.style.border='1px solid #bb5577';");
    $insiteEditingDIV->setEvent("Blur", "this.style.border='1px dashed #bfbfbf';");
    $insiteEditingDIV->setStyleDefinition("border", "1px dashed #bfbfbf");
    $insiteEditingDIV->setStyleDefinition("direction", langGetTextDirection($lang));
    
    $insiteEditingDIV->updateAttributes(array("contentEditable" => "true"));
    
    $insiteEditingDIV->setContent(stripslashes($tmp));
    

    /* Edit anchor and image */
    $editLink = $sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_HTML&typenr=$val");
    $editAnchor = new cHTMLLink;
    $editAnchor->setLink("javascript:setcontent('$idartlang','" . $editLink . "');");
    
    $editButton = new cHTMLImage;
    $editButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_edithtml.gif");
    $editButton->setBorder(0);
    $editButton->setStyleDefinition("margin-right", "2px");
        
    $editAnchor->setContent($editButton);
    
    
    /* Save anchor and image */
    $saveAnchor = new cHTMLLink;
    $saveAnchor->setLink("javascript:setcontent('$idartlang','0')");
    
    $saveButton = new cHTMLImage;
    $saveButton->setSrc($cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_speichern.gif");
    $saveButton->setBorder(0);
    
    $saveAnchor->setContent($saveButton);

    /* Process for output with echo */
    $finalEditButton = $editAnchor->render();
    $finalEditButton = str_replace('"', '"', $finalEditButton);
    $finalEditButton = str_replace('"', '"', $finalEditButton);
    
    $finalEditingDiv = $insiteEditingDIV->render();
    $finalEditingDiv = str_replace('"', '"', $finalEditingDiv);
    $finalEditingDiv = str_replace('"', '"', $finalEditingDiv);
    
    $finalSaveButton = $saveAnchor->render();
    $finalSaveButton = str_replace('"', '"', $finalSaveButton);
    $finalSaveButton = str_replace('"', '"', $finalSaveButton);
    
    $tmp =  $finalEditingDiv . $finalEditButton . $finalSaveButton;
    
}
Hier werden z. B. die contenteditable div-Container für CMS_HTML generiert, inklusive der Buttons für Speichern und Editieren im wysiwyg-Editor.

Beispiel include.CMS_HTML.php

Code: Alles auswählen

<?php

/******************************************
* File      :   include.CMS_HTML.php
* Project   :   Contenido
* Descr     :   Include file for editiing
*               content of type CMS_HTML
*
* Author    :   Jan Lengowski
* Created   :   07.05.2003
* Modified  :   07.05.2003
*
* © four for business AG
******************************************/

if ( $doedit == "1" ) {
    consaveContentEntry($idartlang, "CMS_HTML", $typenr, $CMS_HTML);
    conGenerateCodeForArtInAllCategories($idart);
    header( "location:".$sess->url($cfgClient[$client]["path"]["htmlpath"]."front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&changeview=edit")."");
}
header("Content-Type: text/html; charset={$encoding[$lang]}");
?>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="<?php print $cfg["path"]["contenido_fullhtml"].$cfg["path"]["styles"] ?>contenido.css">
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $encoding[$lang] ?>">
</head>
<body>
<table width="100%"  border=0 cellspacing="0" cellpadding="0">
  <tr>
    <td width="10" rowspan="4"><img src="<?php print $cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"] ?>spacer.gif" width="10" height="10"></td>
    <td width="100%"><img src="<?php print $cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"] ?>spacer.gif" width="10" height="10"></td>
    <td width="10" rowspan="4"><img src="<?php print $cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"] ?>spacer.gif" width="10" height="10"></td>
  </tr>
  <tr>
    <td>

<?php

        getAvailableContentTypes($idartlang);

        echo "  <FORM method="post" action="".$cfg["path"]["contenido_fullhtml"].$cfg["path"]["includes"]."include.backendedit.php">";
        $sess->hidden_session();
        echo "  <INPUT type=hidden name=lang value="$lang">";
//        echo "  <INPUT type=hidden name=submit value="editcontent">";
        echo "  <INPUT type=hidden name=typenr value="$typenr">";
        echo "  <INPUT type=hidden name=idart value="$idart">";
        echo "<INPUT type=hidden name=doedit value=1>";        
        echo "  <INPUT type=hidden name=action value="10">";
        echo "  <INPUT type=hidden name=type value="$type">";
        echo "  <INPUT type=hidden name=idcat value="$idcat">";
        echo "  <INPUT type=hidden name=idartlang value="$idartlang">";
        echo "<INPUT type=hidden name=changeview value="edit">";
        echo "  <TABLE cellpadding=2 width=100% cellspacing=0 border=0>";

        echo "  <TR><TD valign=top class=text_medium nowrap>&nbsp;".$typenr.".&nbsp;".$a_description[$type][$typenr].":&nbsp;</TD></tr><tr><td>";

        include ($cfg["path"]["wysiwyg"] . 'editor.php');
        

        echo "</td>  </TR>";
        $tmp_area = "con_editcontent";
        echo "  <TR valign=top><TD colspan=2><br>
                      <a href=".$sess->url($cfgClient[$client]["path"]["htmlpath"]."front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&lang=$lang")."><img src="".$cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_cancel.gif" border=0></a>
                      <INPUT type=image name=submit value=editcontent src="".$cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_ok.gif" border=0>
                      </TD></TR>";

        echo "  </TABLE>
                      </FORM>";

?>
</td></tr></table>

</body>
</HTML>
Am Anfang ist die eine if-Bedingung in der die Inhalte gespeichert werden (mit der header-Weiterleitung).
Falls die Bedingung nicht zutrifft, wird der Rest der Seite ausgegeben, die auch die Formularfelder zum Editieren der Daten für den CMS Typ enthalten. Allerdings konnte ich nicht feststellen, dass dieser Abschnitt überhaupt ausgeführt wird.
Habe testhalber nach der if-Bedingung eine die('foo') eingebaut, um zu sehen, ob was passiert - dem war nicht so.

Kann aber sein, dass das bei den anderen CMS Typen anders ist...
Jemand muss doch die Funktionalität zu den CMS Typen kennen, ein Feedback seitens 4fb zu diesem Thema würde einiges klären.

Gruß
xmurrix
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ähm der edit code aus dem con_type wird nur im insite editing angezeigt..
das betrifft sämtliche passagen in der spalte code... die include dateien werden erst dann nachgeladen wenn action == 10 gesetzt ist...

ist action == 20 wird nur eine speicherung der CMS_HTML* elemente vorgenommen...

siehe include.con_editcontent.php

der code in den jeweiligen include.CMS*.php dateien ist kein überbleibsel aus älteren tagen...
zeitweise wird ja ein reload der datei benötigt ohne wieder in den insite edit modus zu wechseln.. -> zb CMS_IMG
*** make your own tools (wishlist :: thx)
Antworten