CKEditor 3.0 Send and Receive data with AJAX
Attention: This is a quick tutorial and no in depth information will be provided. Use Google or whatever you want to learn more about PHP, Javascript and AJAX calls. Also on the CKEditor site you can find more info about the editor itself.
The old FCKEditor is now called CKEditor 3.0 and it’s:
CKEditor is a text editor to be used inside web pages. It’s a WYSIWYG editor, which means that the text being edited on it looks as similar as possible to the results users have when publishing it. It brings to the web common editing features found on desktop editing applications like Microsoft Word and OpenOffice.
You can download it from here: http://ckeditor.com.
OK.. so I wanted to edit some HTML template files from an Admin area module and the new CKEditor looks pretty nice so I gave it a try.
First I install the CKEditor and this is pretty easy to do, just download the editor and copy the files to the server.
Create a link to the editor:
1 | <script type="text/javascript" src="/ckeditor/ckeditor.js"></script> |
and then creat a text field area:
1 | <textarea name="template_body" id="template_body" >page content here</textarea> |
and add the javascript code to load the editor:
1 2 3 | <script type="text/javascript"> CKEDITOR.replace( 'template_body' ); </script> |
I added also a div to hold the received messages from the AJAX calls:
1 | <div id="saveButton" style="font-weight:bold"></div> |
Then I generated a tree/file view of all the template files(for sake of simplicity I will not show you how to do that).
The links are generated like this:
1 | <a href="" onclick="getFile('test.html'); return false;" id="file" >test.html</a> |
The return false is so than I won’t need to use the stupid # on the href=”" so that the page won’t refresh.
And the two Javascript functions that make the Ajax calls are:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <script type="text/javascript"> function getFile(file) { var httpRequest = (!window.XMLHttpRequest)? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); httpRequest.onreadystatechange = function() { if(httpRequest.readyState == 4) { // send info to editor CKEDITOR.instances.template_body.setData(httpRequest.responseText); document.getElementById('saveButton').innerHTML = '<a href="" onclick="saveFile(\'' + file + '\'); return false;" >SAVE TEMPLATE</a>'; } } httpRequest.open("GET","/ajax/get_file.php?file="+file,true); httpRequest.send(null); } function saveFile(filename) { // get info from editor var editordata = CKEDITOR.instances.template_body.getData(); var httpRequest = (!window.XMLHttpRequest)? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); httpRequest.onreadystatechange = function() { if(httpRequest.readyState == 4) { if(httpRequest.responseText == "success") { document.getElementById('saveButton').innerHTML = '<span style="color:red">Template saved</span>'; } else { document.getElementById('saveButton').innerHTML = httpRequest.responseText; } } } var passingData = "file="+filename+"&template_body="+ escape(editordata) httpRequest.open("POST", "/ajax/save_file.php?"+passingData, true); httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); httpRequest.send(passingData); } </script> |
The first function getFile(), gets the name of the file to load and send the response text from the PHP script to the editor.
The PHP script gets the name of the file and with file_get_contents function I retrieve that template’s contents.
1 | echo file_get_contents('/templates/'.$_GET['file']); |
The editor shows the received data with the command:
1 | CKEDITOR.instances.template_body.setData(httpRequest.responseText); |
“template_body” is the name of the text field that is replaced by the CKEditor.
In this function I also add a new link to the page with innerHTML that makes the reference to the second function: saveFile().
The second function saveFile() get the current name of the loaded template (test.html for example) and saves the data from the editor to
a variable “editordata” with the call:
1 | CKEDITOR.instances.template_body.getData(); |
The editor data is sent to the PHP script, escaped and urlencoded with POST.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | // write content to file $filename = '/templates/'.$_POST['file']; $template_body = $_POST['template_body']; if (is_writable($filename)) // check file first { if (!$handle = fopen($filename, 'w')) // open file { echo 'fail open'; } if (fwrite($handle, $template_body) === FALSE) // write file { echo 'fail write'; } fclose($handle); // and close the file echo 'success'; } else { echo 'fail not writable'; } |
The PHP code is straight forward: open file, write contents to file, close file.
If success is returned then with innerHTML we write that the template was saved if not the specific fail message will be shown.
(usually those errors appear if the file is missing or the file path is wrong or the file permissions are wrong.)
So here you have it an browser based template editor.
Oh and if your template has
1 | <html>, <body> |
tags they will be deleted by the editor. Don’t know how to override that shit functionality.
Over and out.
How to block spamm comments in WordPress
1. Activate Akismet
2. Add this in the .htaccess file.
1 2 3 4 5 6 | RewriteEngine On RewriteCond %{REQUEST_METHOD} POST RewriteCond %{REQUEST_URI} .wp-comments-post\.php* RewriteCond %{HTTP_REFERER} !.*yourblog.com.* [OR] RewriteCond %{HTTP_USER_AGENT} ^$ RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L] |
Replace yourblog.com with your blog address.
It block all comments from direct access to wp-comments-post.php.
3. Add this to the .htaccess file also.
Block all spammer IP’s one by one:
1 2 3 4 5 6 7 | <Limit GET POST> order allow,deny deny from 78.133.218.68 deny from 219.159.67.187 deny from 77.41.123.182 allow from all </Limit> |
Just add more IP to this list.
Anti link/email spam script
1 2 3 4 5 6 | <script type='text/javascript'> function nerf_email(){ return 'offi'.replace(/i/, 'ice') + '@' + 'point'.replace(/t/, 't47.com'); } document.write(nerf_email()); </script> |
The above script will show: office @ point47.com
Cute Bubbles – WordPress Theme – Updated
Version 1.0 is live and it has full IE6 support, improved header graphic and some more tweaks here and there.

You can download the theme from here Cute Bubbles WordPress Theme.
Drepturi de upload mai mare cu .htaccess
In mod normal PHP-ul e setat sa poti uploada fisiere de maxim 8MB(sau chiar doar 2MB).
Poti schimba asta insa din php.ini:
1 2 | post_max_size = 40M upload_max_filesize = 40M |
.. dar asta inseamna sa dai drepturi la tot serverul sa poata incarca fisiere de pana in 40MB
Dar daca vrei sa dai drepturi doar fisierelor dintr-un anumit folder poti sa faci un fisier “.htaccess” si sa scrii urmatorul cod.
1 2 3 4 | <FilesMatch "\.(php)$"> php_value post_max_size "40M" php_value upload_max_filesize "40M" </FilesMatch> |
Astfel toate fisierele din acel folder au dreptul de uploada fisiere de pana in 40mb.
Dar cred ca si codul asta e functional, daca vrei sa dai drepturi doar unui anumit fisier:
1 2 3 4 | <Files "upload.php"> php_value post_max_size "40M" php_value upload_max_filesize "40M" </FilesMatch> |
sau doar pentru 2 fisiere:
1 2 3 4 | <FilesMatch "^(upload|multi_upload)\.php$"> php_value post_max_size "40M" php_value upload_max_filesize "40M" </FilesMatch> |
! Daca aveti hosting cumparat pe undeva tebuie sa verificati mai intai daca sunt drepturi ca .htaccess-ul sa suprascrie setarile default.

