Daten aus dem Tiny MCE in eine existierende HTML Datei auf einem Webserver schreiben

...komplette Frage anzeigen

1 Antwort

Zum Speichern brauchst du ein serverseitiges Script (bspw. in PHP), welches die Daten dann wieder in die Datei schreibt.

Bedenke aber, dass TinyMCE eher weniger dafür gedacht ist, ganze Webseiten zu verwalten und Dateien zu schreiben. Tiny wird häufig in Content Management Systeme eingebunden und es werden damit keine ganzen Seiten, sondern nur Teile bearbeitet, die dann in dem CMS wieder zu einer Webseite zusammengesetzt werden.

Wen du etwas suchst, mit dem du deine HTML-Seiten auf dem Server bearbeiten kannst, ist TinyMCE daher nicht die erste Wahl.

ModellbauPortal 15.10.2012, 12:54

Hallo,

zunächst danke für deine antwort. ich kenne tiny mce von joomla her wobei ich da eher den jce nutze ... mein grundgedanke war bei einer webseite dem kunden die möglichkeit geben zu können seine inhalte relativ einfach zu bearbeiten ohne ahnung ... drum dachte ich an die lösung ... ich möchte halt nach möglichkeit eine lösung ohne datenbank.

gibt es irgendwo eine art democode den ich mir mal anschauen kann zum speichern oder gibt es in phpo passende befehle mit denen ich einfach eine stringvariable auf einem server schreiben kann ?

0
Babelfish 15.10.2012, 13:07
@ModellbauPortal

Ich könnte dir da sicherlich ein Beispiel schreiben und wenn du im Netz suchst, wirst du auch einiges finden. Jedoch würde ich dir definitiv davon abraten. Wenn du dich mit PHP mehr oder gar nicht nicht auskennst, dann solltest du nicht irgendwas provisorisches bastelt und deinem Kunden geben. Da gehört nämlich noch einiges mehr mit dazu (bspw. Zugriffs- und Rechteverwaltung) und wenn du da nicht genau aufpasst, hast du ganz schnell ein riesiges Sicherheitsproblem, bei dem Fremde die Seiten ändern können oder dein Kunde Schaden machen kann.

Warum nutzt du da nicht ein fertiges CMS und passt das dann an? Das bietet dir und deinen Kunden mehr Möglichkeiten und ist auch deutlich sicherer.

0
ModellbauPortal 15.10.2012, 16:56
@Babelfish

Hallo,

hier mal mein bisheriger code ... nein ... einem kunden geben will ich das so auf keinen fall ... mir gehts nur darum ob sowas machbar ist und wie ... ich bin ja in er lernphase und solange werde ich mich weiter eines cms bedienen :-)

hier mal mein bisheriger code des einbindens und des ladens des inhaltes der html datei in den tiny mce

<script type="text/javascript" src="./library/editor/tiny_mce/tiny_mce.js"></script>
<script type="text/javascript">
tinyMCE.init({
    // General options
    language : "de", // change language here
    mode : "textareas",
    theme : "advanced",
    plugins : "autolink,lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,advlist",

    // Theme options
    theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
    theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
    theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
    theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak",
    theme_advanced_toolbar_location : "top",
    theme_advanced_toolbar_align : "left",
    theme_advanced_statusbar_location : "bottom",
    theme_advanced_resizing : true,

    // Example content CSS (should be your site CSS)
    content_css : "css/typo.css",

    // Drop lists for link/image/media/template dialogs
    template_external_list_url : "js/template_list.js",
    external_link_list_url : "js/link_list.js",
    external_image_list_url : "js/image_list.js",
    media_external_list_url : "js/media_list.js",
});

function ajaxLoad() {
        var ed = tinyMCE.get('content');
        var contentdata;

        // Do you ajax call here, window.setTimeout fakes ajax call
        $.get('./content/content.html', function(data){
            contentdata= data;
        });

        ed.setProgressState(1); // Show progress
        window.setTimeout(function() {
                ed.setProgressState(0); // Hide progress
                ed.setContent(contentdata);
        }, 3000);
}

function ajaxSave() {
        var ed = tinyMCE.get('content');
        var contentdata;

        // Do you ajax call here, window.setTimeout fakes ajax call
        contentdata = ed.getContent();

        ed.setProgressState(1); // Show progress
        window.setTimeout(function() {
                ed.setProgressState(0); // Hide progress
                alert('Datei erfolgreich gespeichert');
        }, 3000);
}
</script>

<form method="post" action="somedata">
    <textarea name="content" style="width:100%; height:500px;"></textarea><br/>
    <input type="submit" name="load" value="Lade Inhalt" onclick="ajaxLoad();return false;" />
    <input type="submit" name="save" value="Speichere Inhalt" onclick="ajaxSave();return false;" />
    <input type="reset" name="reset" value="Reset" />
</form>
0
Babelfish 15.10.2012, 18:00
@ModellbauPortal

Ungetestet würde das in etwa so aussehen:

In der ajaxSave-Funktion ersetzt du den setTimeout-Teil mit diesem Code, der die Daten zu einem PHP-Script schicken:

$.post("tinysave.php", { file: "content", data: contentdata });

Dann erstellst du eine tinysave.php und schreibst das rein:

<?php
if (isset($_POST['file']) && isset($_POST['data']))
{
  file_put_contents('content/'.$_POST['file'].'.html', $_POST['data']);
}
?>

Bei den Pfaden musst du natürlich aufpassen, damit diese passen und auch sonst ist das nur ein sehr rudimentäres Beispiel aber es sollte schon mal in dieser Art funktionieren.

0
ModellbauPortal 15.10.2012, 18:22
@Babelfish

Hi,

ich habe das mal so eingebaut wobei ich die tinysave.php in dem subfolder für den editor habe .... wenn ich jetzt speichere sieht alles gut aus ... aber er scheint die änderungen nicht zu übernehmen ... wobei generell die frage ist ob das auf einem lokalen XAMPP auch gehen muss oder es nur auf dem webserver geht. laden geht lokal

0
Babelfish 15.10.2012, 21:21
@ModellbauPortal

Das geht auch auf XAMPP. Du musst halt alle Ordner anpassen – sowohl im JavaScript muss der Ordner richtig auf tinysave.php verweisen, als auch in der PHP-Datei muss content/ angepasst werden. Du kannst beides jetzt noch soweit anpassen, dass du zumindest eine einfache Rückmeldung bekommst:

$.post("tinysave.php", { file: "content", data: contentdata },
  function(data) {
    alert("Meldung: " + data);
  }
);

und:

<?php
if (isset($_POST['file']) && isset($_POST['data']))
{
  $filename = 'content/'.$_POST['file'].'.html';

  if (file_exists($filename))
  {
    file_put_contents($filename = 'content/'.$_POST['file'].'.html', $_POST['data']);
    return 'Datei gespeichert';
  }
  else
  {
    return $filename.' nicht gefunden';
  }
}
?>
0
ModellbauPortal 16.10.2012, 10:20
@Babelfish

Hi ... ich habe jetzt die tinysave.php vom pfad her angepasst

./library/editor/tinysave.php

und das script auch

<?php
if (isset($_POST['file']) && isset($_POST['data']))
{
  $filename = './content/'.$_POST['file'].'.html';

  if (file_exists($filename))
  {
    file_put_contents($filename = './content/'.$_POST['file'].'.html', $_POST['data']);
    return 'Datei gespeichert';
  }
  else
  {
    return $filename.' nicht gefunden';
  }
}
?>

Das Ergebnis ist das im Alertfenster nur steht Meldung: .... die Pfade müssten doch so ok sein oder macht man das nicht vom root aus mit dem ./ davor ?

0
Babelfish 16.10.2012, 10:27
@ModellbauPortal

./ ist nicht von root sondern von der aktuellen Dokumentenposition aus. Warum packst du die tinysave.php überhaupt in den TinyMCE-Ordner? Beim nächsten Update von TinyMCE musst du dann aufpassen, dass du nichts überschreibst. Pack die PHP-Datei zum Testen erst mal direkt unter DocumentRoot und gibt dann /tinysave.php an.

Wenn in der Alert-Box nichts ausgegeben wird, dann stimmt bei dir der Pfad vermutlich noch nicht. Das kannst du auch selber testen, indem du in der Fehlerconsole deines Browser nachsiehst.

0
ModellbauPortal 16.10.2012, 11:28
@Babelfish

Hi ... in der Fehlerkonsole steht nichts drin bei mir .... der pfad zum script scheint ok ... sobald ich einen scriptfehler in die tinysave.php einbaue kriege ich einen fehler im rückgabestring ... aber er speichert bisher nicht ab und selbst wenn ich am anfang der tinysave.php ein

return 'test';
exit;

setze passiert nichts im ausgabefenster außer Meldung:

0
Babelfish 16.10.2012, 11:45
@ModellbauPortal

Das mit dem return war auch Quatsch von mir. Du musst stattdessen echo schreiben:

<?php
if (isset($_POST['file']) && isset($_POST['data']))
{
  $filename = './content/'.$_POST['file'].'.html';

  if (file_exists($filename))
  {
    file_put_contents($filename = './content/'.$_POST['file'].'.html', $_POST['data']);
    echo 'Datei gespeichert';
  }
  else
  {
    echo $filename.' nicht gefunden';
  }
}
?>

War gestern schon zu spät.

0
ModellbauPortal 16.10.2012, 12:02
@Babelfish

hmmmm .... also mit dem angeben des dokument root per :/ funzt es nicht ... aber ich habs dank dir hinbekommen mit $SERVER[DOCUMENTROOT] :-) supi .... vielen vielen vielen dank ....

wie ich merke scheinst du absoluter profi zu sein ... kannst du mir ein buch empfehlen mit dem ich mich eventuell fortbilden kann in dem bereich oder sind das alles mehr oder minder erfahrungswerte bei dir ?

0

Was möchtest Du wissen?