CMS_TEXT mit In-Site-Editing?

Gesperrt
Oliver
Beiträge: 25
Registriert: Di 10. Dez 2002, 10:18
Kontaktdaten:

CMS_TEXT mit In-Site-Editing?

Beitrag von Oliver »

Hi!

Contenido 4.4.1:

Gibt's CMS_TEXT auch mit dem schicken In-Site-Editing (Eingabe/Speichern von Inhalten direkt in der Editor-Ansicht - wie bei CMS_HTML oder CMS_HEAD)?

Ich habe mal versucht, einfach den Code von CMS_HTML in der con_type zu übertragen und "CMS_HTML" mit "CMS_TEXT" zu ersetzen (Holzhammermethode). Tut's aber leider nicht. :(

Gruß
Oliver
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

Nein, das geht leider nicht. Liegt daran, daß der IE wie auch der Mozilla nur HTML mit In-Site können - und das wäre dann kein Text mehr.
Oliver
Beiträge: 25
Registriert: Di 10. Dez 2002, 10:18
Kontaktdaten:

Beitrag von Oliver »

Danke für die Info! Ich werde mal ein bisschen basteln. Vielleicht finde ich einen Workaround.

Gruß, Oliver
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

Hallo Oliver,

gibt es leider nicht. Technisch sieht es so aus, daß der Mozilla wie auch der Internet Explorer ein SPAN-Element (oder war's ein DIV?) editierbar machen - inklusive der Möglichkeit, aus fremden Quellen HTML-Text zu pasten. Das kannst du bei der Eingabe nicht verhindern.

Das einzige, was du machen kannst, ist, alle HTML-Tags nach dem Editieren zu strippen.

Grüße,
Timo
Oliver
Beiträge: 25
Registriert: Di 10. Dez 2002, 10:18
Kontaktdaten:

Beitrag von Oliver »

Hier ist der Workaround :P :

:arrow: In der Con_type neuen Eintrag CMS_HTMLINSITE erzeugen.

Feldinhalte:
idtype: 11
type: CMS_HTMLINSITE
code:

Code: Alles auswählen

/**
 * CMS_HTMLINSITE */
$tmp = $a_content['CMS_HTMLINSITE'][$val];
$tmp = urldecode($tmp);
$tmp = AddSlashes(AddSlashes($tmp));
$tmp = str_replace("\\\'","'",$tmp);
if ($edit) {

$before="<div id=\"HTMLINSITE_".$db->f("idtype")."_".$val."\" onFocus=\"this.style.border='1px solid #bb5577'\"".
       " onBlur=\"this.style.border='1px dashed #bfbfbf'\" style=\"border:1px dashed #bfbfbf\" contentEditable=\"true\" >";
$editbutton = "</div><a href=\"javascript:setcontent('$idartlang','0')\"><img src=\"".$cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_speichern.gif\" border=\"0\">   </a>";
$editbutton = AddSlashes(AddSlashes($editbutton));
$editbutton = str_replace("\\\'","'",$editbutton);
$before= AddSlashes(AddSlashes($before));
$before = str_replace("\\\'","'",$before);
if ($tmp == "") {
$tmp = "&nbsp;";
}
$tmp = $before.$tmp.$editbutton;}
(Es handelt sich um den Code aus dem "CMS_HTML"-Eintrag. "CMS_HTML" ist überall durch "CMS_HTMLINSITE" ersetzt, "HTML_" im div-Tag durch "HTMLINSITE_". Außerdem ist in der $editbutton der Link zum "Edit-Button" entfernt, so dass nur der "Speichern-Button" sichtbar ist.)

description: Text / Insite-Editing


Andere Felder werden automatisch belegt

:arrow: Modul Text (Insite-Editor) erstellen
Ausgabe:

Code: Alles auswählen

<?php echo "CMS_HTMLINSITE[1]"; ?>
:arrow: Modul wie gewohnt zuweisen.

:!: Für Funktion keine Gewähr... Bisher hat's aber geklappt.

Gruß
Oli
Oliver
Beiträge: 25
Registriert: Di 10. Dez 2002, 10:18
Kontaktdaten:

Beitrag von Oliver »

... Und hier noch der Workaround mit separatem Texteingabeformular:

:arrow: In der Con_type neuen Eintrag CMS_HTMLINSITE erzeugen. (z. B. mit phpMyAdmin)

Feldinhalte:
idtype: 11
type: CMS_HTMLINSITE

Code: Alles auswählen

/**
 * CMS_HTMLINSITE */

$tmp = $a_content['CMS_HTMLINSITE'][$val];
$tmp = urldecode($tmp);
$tmp = AddSlashes(AddSlashes($tmp));
$tmp = str_replace("\\\'","'",$tmp);

if ($edit) {

$before="<div id=\"HTMLINSITE_".$db->f("idtype")."_".$val."\" onFocus=\"this.style.border='1px solid #bb5577'\"".
       " onBlur=\"this.style.border='1px dashed #bfbfbf'\" style=\"border:1px dashed #bfbfbf\" contentEditable=\"true\" >";
$editbutton = "</div><a href=\"javascript:setcontent('$idartlang','".$sess->url("front_content.php?action=10&idcat=$idcat&idart=$idart&idartlang=$idartlang&type=CMS_HTMLINSITE&typenr=$val&lang=$lang")."')\">
<img src=\"".$cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_edittext.gif\" border=\"0\"></a>
<a href=\"javascript:setcontent('$idartlang','0')\"><img src=\"".$cfg["path"]["contenido_fullhtml"].$cfg["path"]["images"]."but_speichern.gif\" border=\"0\">   </a>";
$editbutton = AddSlashes(AddSlashes($editbutton));
$editbutton = str_replace("\\\'","'",$editbutton);
$before= AddSlashes(AddSlashes($before));
$before = str_replace("\\\'","'",$before);
if ($tmp == "") {
$tmp = "&nbsp;";
}
$tmp = $before.$tmp.$editbutton;}
(Es handelt sich um den Code aus dem "CMS_HTML"-Eintrag. "CMS_HTML" ist überall durch "CMS_HTMLINSITE" ersetzt, "HTML_" im div-Tag durch "HTMLINSITE_". Der Link zum "Edit-Button" in der $editbutton ist jetzt wieder da.)

description: Text / Insite-Editing

Andere Felder werden automatisch belegt

:arrow: Datei include.CMS_HTMLINSITE.php erstellen

Code: Alles auswählen

<?php

/******************************************
* File      :   include.CMS_HTMLINSITE.php
* Project   :   Contenido 
* Descr     :   Include file for editiing
*               content of type CMS_HTMLINSITE
*
******************************************/

if ($doedit == "1") {
        consaveContentEntry($idartlang, "CMS_HTMLINSITE", $typenr, $CMS_HTMLINSITE);
        conGenerateCodeForArtInAllCategories($idart);
        header("Location:".$sess->url($cfgClient[$client]["path"]["htmlpath"]."front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&lang=$lang&changeview=edit")."");
}
?>
<html>
<head>
<title></title>
    <link rel="stylesheet" type="text/css" href="<?php print $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["styles"] ?>contenido.css">
    <base href="<?php echo $cfgClient[$client]["path"]["htmlpath"]; ?>">
</head>
<body>
<table width="100%"  border=0 cellspacing="0" cellpadding="0" bgcolor="#ffffff">
  <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 name=\"editcontent\" 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=typenr value=\"$typenr\">";
        echo "  <INPUT type=hidden name=idart value=\"$idart\">";
        echo "  <INPUT type=hidden name=action value=\"10\">";
        echo "  <INPUT type=hidden name=type value=\"$type\">";
        echo "<INPUT type=hidden name=doedit value=1>";        
        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=$cellpadding cellspacing=$cellpadding border=0>";

        echo "  <TR><TD valign=top class=text_medium>&nbsp;".$typenr.".&nbsp;".$a_description[$type][$typenr].":&nbsp;</TD><TD class=content>";
        echo "  <TEXTAREA name=CMS_HTMLINSITE ROWS=15 COLS=90>".urldecode($a_content[$type][$typenr])."</TEXTAREA>";
        echo "  </TD></TR>";
        $tmp_area = "con_editcontent";
        echo "  <TR valign=top><TD colspan=2><br>
                      <a href=".$sess->url("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>
:arrow: Datei include.CMS_HTMLINSITE.php in das Verzeichnis [client]/contenido/includes hochladen

:arrow: Modul Text (Insite-Editor) erstellen
Ausgabe:

Code: Alles auswählen

<?php echo "CMS_HTMLINSITE[1]"; ?> 
oder

Code: Alles auswählen

<?php

$str_htmlinsite_1 = strip_tags("CMS_HTMLINSITE[1]");

if($contenido || ($str_htmlinsite_1 != "" && !ereg("^(&nbsp;| |\+|\n|\s)*$" , $str_htmlinsite_1)))  echo "<span class=\"small\">CMS_HTMLINSITE[1]<br></span>";
?>
Bei der zweiten Möglichkeit wird kein HTML-Code erzeugt, wenn das Feld leer ist. Das ermöglicht eine etwas offenere Layout-Getaltung.

:arrow: Modul wie gewohnt zuweisen.
Für Funktion keine Gewähr... Bisher hat's aber geklappt.

Gruß
Oli
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

Ist das auch komplett getestet - sprich: Keiner kann HTML-Code einfügen? Wenn ja, würden wir das gerne einbauen :)

(Und sorry für die Aussage, daß es nicht geht - es sollte wohl besser heißen: Nicht ohne erheblichen Aufwand, den du ja erfolgreich gemeistert hast :))
Oliver
Beiträge: 25
Registriert: Di 10. Dez 2002, 10:18
Kontaktdaten:

Beitrag von Oliver »

Ist bisher nur flüchtig auf die Funktionsfähigkeit getestet:

- Einfügen von Text im InSite-Editor
- Speichern im InSite-Editor (Button >>> Speichern)
- Übergabe des Textes in das Formular (Button >>> Text)
- Bearbeiten des Textes im Formular
- Speichern im Formular (über grünen Button)
- Abbrechen (über roten Button)

Wegen des HTML-Codes:
HTML-Tags werden nicht ausgeführt, sondern ausgegeben, z. B. "<b>" für <b>.

Probleme habe ich mit "<!--" festgestellt. Dieser Tag wird in con_content als "%3C%21--" gespeichert, bei der Ausgabe aber offenbar als Kommentar-Einleitung interpretiert. Das kriege ich aber auch noch hin... :evil:

Gruß
Oliver
Oliver
Beiträge: 25
Registriert: Di 10. Dez 2002, 10:18
Kontaktdaten:

Beitrag von Oliver »

Oliver hat geschrieben:Probleme habe ich mit "<!--" festgestellt. Dieser Tag wird in con_content als "%3C%21--" gespeichert, bei der Ausgabe aber offenbar als Kommentar-Einleitung interpretiert. Das kriege ich aber auch noch hin... :evil:
Problem gelöst:

In der include.CMS_HTMLINSITE.php fehlte ein htmlentities(). Zur Beseitigung Zeile 19...

Code: Alles auswählen

consaveContentEntry($idartlang, "CMS_HTMLINSITE", $typenr, $CMS_HTMLINSITE); 
... ersetzen durch:

Code: Alles auswählen

consaveContentEntry($idartlang, "CMS_HTMLINSITE", $typenr, htmlentities($CMS_HTMLINSITE)); 
Hier noch einmal der komplette Code der include.CMS_HTMLINSITE.php:

Code: Alles auswählen

<?php

/******************************************
* File      :   include.CMS_HTMLINSITE.php
* Project   :   Contenido 
* Descr     :   Include file for editiing
*               content of type CMS_HTMLINSITE
*
* Author    :   Oliver Beyer
* Based on  :   include.CMS_TEXT.php
*               by Jan Legowski                  
* Created   :   16.11.2003
* Modified  :   18.11.2003
*
* © four for business AG
******************************************/

if ($doedit == "1") {
        consaveContentEntry($idartlang, "CMS_HTMLINSITE", $typenr, htmlentities($CMS_HTMLINSITE));
        conGenerateCodeForArtInAllCategories($idart);
        header("Location:".$sess->url($cfgClient[$client]["path"]["htmlpath"]."front_content.php?area=$tmp_area&idart=$idart&idcat=$idcat&lang=$lang&changeview=edit")."");
}
?>
<html>
<head>
<title></title>
    <link rel="stylesheet" type="text/css" href="<?php print $cfg["path"]["contenido_fullhtml"] . $cfg["path"]["styles"] ?>contenido.css">
    <!-- OCB -->
    <base href="<?php echo $cfgClient[$client]["path"]["htmlpath"]; ?>">
    <!-- /OCB -->
</head>
<body>
<table width="100%"  border=0 cellspacing="0" cellpadding="0" bgcolor="#ffffff">
  <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 name="editcontent" method="post" action="front_content.php">";
//-- OCB --
        echo "  <FORM name="editcontent" method="post" action="".$cfg["path"]["contenido_fullhtml"].$cfg["path"]["includes"]."include.backendedit.php">";
//-- /OCB --	   
        $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=action value="10">";
        echo "  <INPUT type=hidden name=type value="$type">";
        echo "<INPUT type=hidden name=doedit value=1>";        
        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=$cellpadding cellspacing=$cellpadding border=0>";

        echo "  <TR><TD valign=top class=text_medium>&nbsp;".$typenr.".&nbsp;".$a_description[$type][$typenr].":&nbsp;</TD><TD class=content>";
        echo "  <TEXTAREA name=CMS_HTMLINSITE ROWS=15 COLS=90>".urldecode($a_content[$type][$typenr])."</TEXTAREA>";
        echo "  </TD></TR>";
        $tmp_area = "con_editcontent";
        echo "  <TR valign=top><TD colspan=2><br>
                      <a href=".$sess->url("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>
Ich würde mich natürlich freuen, wenn ich damit einen kleinen Beitrag zur Weiterentwicklung leisten kann. Ich werde natürlich auch weiterhin auf Bugs achten. Allerdings durchschaue ich die Funktionsweise von Contenido noch nicht genug, um die Fehlerfreiheit der Erweiterung komplett durchzutesten. Das ist bei Euch sicher in besseren Händen...

Gruß
Oliver
Gesperrt