Peter Rehm's Blog

apple,development,life & more

Escape special characters within JSON.stringify

Mit 2 Kommentaren

In order to stringify an Object to a JSON string you have to escape the special characters.
Specials characters are for example the following:

CODE:
\b  Backspace (ascii code 08)
\f  Form feed (ascii code 0C)
\n  New line
\r  Carriage return
      Tab
\v  Vertical tab
'  Apostrophe or single quote
"  Double quote
\  Backslash caracter
& Ampersand


Unfortunately JSON.stringify() is not taking care of the special characters. However you can
easily convert those characters with a replacer function within JSON.stringify().

The method to handle such characters looks as follows:

QUOTE:

// escape json strings
function escapeSpecialCharacters(string)
{
return string
.replace(/[']/g, "\\'")
.replace(/["]/g, '\\"')
.replace(/[&]/g, "\\&")
.replace(/[\n]/g, "\\n")
.replace(/[\r]/g, "\\r")
.replace(/[\t]/g, "\\t")
.replace(/[\b]/g, "\\b")
.replace(/[\v]/g, "\\v")
.replace(/[\f]/g, "\\f");
}

// replacer handler for JSON stringify
function stringifyReplacer(key, value)
{
if (typeof value === 'string') {
return escapeSpecialCharacters(value);
}

return value;
}


Now you only have to pass the function name "stringifyReplacer" to the stringify Method.

CODE:
var object = { 'asd' : 'as\nd' };
var json = JSON.stringify(object, stringifyReplacer);


Now you should have an valid JSON string which you can parse again with JSON.parse().

Always escaping whenever you stringify a object to JSON is a good idea to keep you application
working even when special characters are being provided.

Geschrieben von Peter Rehm

07.10.2014 um 19:11:34

Abgelegt in Programmierung

Tags für diesen Artikel: ,

Dateien im Filemenager vom FCK Editor löschen

Mit 7 Kommentaren

Als ich heute gefragt wurde ob der FCKedit auch das Löschen von Dateien
ermöglicht war ich ganz erstaunt, dass er das nicht kann, und hab ihn dann
gleich in meinen Sourcen anhand der Erläuterungen von Bramus
ergänzt. Da sich allerdings einige Kleinigkeiten verändert haben, wollte ich
die einzelnen Schritte noch einmal auflisten.

Die Erweiterungen basieren fast komplett auf den Erklärungen von Bramus,
der dies in seinem Blog alles erwähnt. Danke hierfür.

1.) Ablegen eines entsprechenden ICONS in

CODE:
editor/filemanager/browser/default/images/delete.gif


2.) Anpassen der Datei frmresourceslist.html

CODE:
editor/filemanager/browser/default/frmresourceslist.html


Suchen der Zeile:
CODE:
var sLink = '<a href="#" onclick="OpenFile('' + fileUrl + '');return false;">' ;


Danach folgende Zeile einfügen.
CODE:
       // Added by Bramus!
var dLink = '<a href="#" title="Delete file" onclick="DeleteFile('' + escape(fileName) + '');return false;">' ;    


Dann folgenden Block:

CODE:
return '<tr>' +
'<td width="16">' +
sLink + 
'<img alt="" src="images/icons/' + sIcon + '.gif" width="16" height="16" border="0"></a>' +
'</td><td>&nbsp;' +
sLink + 
fileName + 
'</a>' +
'</td><td align="right" nowrap>&nbsp;' +
fileSize + 
' KB' +
'</td></tr>' ;


durch diesen ersetzen. Hier wird das Bild dann eingefügt.

CODE:
return '<tr>' +
'<td width="35">' +
sLink + 
'<img alt="" src="images/icons/' + sIcon + '.gif" width="16" height="16" border="0"></a>' +
dLink + '<img alt="" src="images/delete.gif" width="16" height="16" border="0"></a>' +
'</td><td>&nbsp;' +
sLink + 
fileName + 
'</a>' +
'</td><td align="right" nowrap>&nbsp;' +
fileSize + 
' KB' +
'</td></tr>' ;


Zuletzt in der Datei bevor

CODE:
window.onload = function()
{
window.top.IsLoadedResourcesList = true ;
}


folgenden Code Block einfügen

CODE:
// Added by Bramus!
function DeleteFile( fileName, fileUrl ) {
if (confirm('Are you sure you wish to delete ' + unescape(fileName) + '?')) {
oConnector.SendCommand( 'DeleteFile', "FileName=" + fileName, DeleteFileCallBack ) ;
}
}

// Added by Bramus!
function DeleteFileCallBack ( fckXml ) {
var oNodes = fckXml.SelectNodes( 'Connector/Error' );
if (oNodes!=null && oNodes.length>0) {
var errNo = parseInt(oNodes[0].attributes.getNamedItem('number').value) ;
switch (errNo) {
case 0 :
break;
case 102 :
case 103 :
alert(oNodes[0].attributes.getNamedItem('originalDescription').value);
break;
default:
alert('DFi: Invalid XML response from connector..');
}        
} else {
alert('DFi: Invalid XML response from connector.');
}
Refresh();
}


3.) Nun geht es an die PHP Funktionen in der commands.php

In der folgenden Datei

CODE:
editor/filemanager/browser/default/conmectors/commands.php


muss nur der folgende Code am ENDE vor den ?> eingefügt werden.

CODE:
function DeleteFile($resourceType, $currentFolder) {
$sErrorNumber = '0' ;
$sErrorMsg = '' ;

if ( isset( $_GET['FileName'] ) ) {

// Map the virtual path to the local server path.
$sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ;

$sFileName = $_GET['FileName'] ;

if ( strpos( $sFileName, '..' ) !== FALSE ) {
$sErrorNumber = '102' ; // Invalid file name.
$sErrorMsg = 'Invalid file name';
} else {
if ( @unlink($sServerDir.$sFileName) ) {
$sErrorNumber = '0' ; // deleted
} else {
$sErrorNumber = '103' ; // not deleted
$sErrorMsg = 'Could not delete file '.$sServerDir.$sFileName;
}
}
} else {
$sErrorNumber = '102' ; // no file set
$sErrorMsg = 'No file specified';
}
   
// Create the "Error" node.
echo '<Error number="' . $sErrorNumber . '" originalDescription="' . ConvertToXmlAttribute( $sErrorMsg ) . '" />' ;
}


4.) Anpassen des Connectors

Im Connector muss noch das Switch Statement angepasst werden.

CODE:
editor/filemanager/browser/default/conmectors/commands.php


Sollte nur um folgendes ergänzt werden:

CODE:
case 'DeleteFile' :
DeleteFile( $sResourceType, $sCurrentFolder ) ;
break ;


In der 2.4.3 sieht das ganze dann so aus

CODE:
// Execute the required command.
switch ( $sCommand )
{
case 'GetFolders' :
GetFolders( $sResourceType, $sCurrentFolder ) ;
break ;
case 'GetFoldersAndFiles' :
GetFoldersAndFiles( $sResourceType, $sCurrentFolder ) ;
break ;
case 'CreateFolder' :
CreateFolder( $sResourceType, $sCurrentFolder ) ;
break ;

case 'DeleteFile' :
DeleteFile( $sResourceType, $sCurrentFolder ) ;
break ;

}


Viel Spaß damit!

Geschrieben von Peter Rehm

02.08.2007 um 22:51:33

Abgelegt in Programmierung

Tags für diesen Artikel:

$Id Zeilen mit Subversion

Mit 1 Kommentar

In den meisten Quellcodes die man so liest ist eine Id Zeile am Dateianfang zu finden,
die ungefähr so aussieht:

CODE:
/* $Id: test.cpp 3 2007-07-08 12:28:37Z peterrehm $ */


Dies bedeutet dass man die datei test.cpp sieht, zuletzt geändert in Revision 3 um 12:28 am 08.07.2007 von dem Benutzer peterrehm.
Dies ermöglicht einen schnellen Überblick über die Datei.
Die Information wird von Subversion selbst verwaltet.
Damit Subversion das tut, sind ein paar kleine Einstellungen notwendig.

1. Aktivieren der Keywors für die gewünschten Dateien

CODE:
svn propset svn:keywords "Id" test.cpp 


2. Definieren eines Platzhalters in der Quelldatei

Dazu einfach einen Code wie folgt in die Datei einfügen, je nach
Programmiersprache eben in entsprechender Kommentierung.

CODE:
/* $Id$ */


3. Datei committen

Mit dem nächsten Commit wird dann automatisch die eingefügt Zeile ersetzt.
Dies wird auch bei jedem weiteren Commit passieren. Die Id Zeile ist aber nicht
für SVN diffs relevant, auch wenn man selbst versuchen sollte die zu ändern,
also wenn man das Datum ändert, wird das nicht mit übertragen.

Die Dateiinformation bleibt solange bestehen bis man eine neuere Version committet,
oder ein anderer Benutzer des SVN Repositorys das übernimmt. Allerdings wird die
Zeile dann auch erst mit dem nächsten update aktualisiert.

Als letzte Information bleibt vielleicht noch zu nennen, dass ein $Log$ Keyword von
den SVN Entwicklern ausdrücklich nicht implementiert werden. Darauf wird in der
FAQ verwiesen.

Update: Fehler wurde behoben, Danke Sebastian!

Geschrieben von Peter Rehm

08.07.2007 um 16:44:04

Abgelegt in Programmierung

Tags für diesen Artikel:

Focus von beliebigen HTML Elementen entfernen

Ohne Kommentare

Hat man ein Element geklickt, und dadurch z.B. einen AJAX Request ausgelöst,
bleibt meist ein Focus auf dem Element. Dies wäre an sich nicht weiter schlimm.
würde der nicht so übel aussehen!

focus nach geklicktem element

Diesen Focus kann man einfach mit der JavaScript Methode blur() entfernen.

CODE:
<a href="#bla" onfocus="this.blur()">bla</a>


oder wie in meinem Fall mit Prototype:

CODE:
$('element').blur();

Geschrieben von Peter Rehm

30.04.2007 um 22:40:30

Abgelegt in Programmierung

Tags für diesen Artikel: , , ,

Internet Explorer 6 & 7, Focus auf Input Elemente nach AJAX Request

Mit 1 Kommentar

Bei einem aktuellen Projekt trat ein seltsames Problem auf.
In jedem Formular wird auf das erste Feld manuell ein focus() gesetzt,
dass man sehr benutzerfreundlich durch die Felder tabben kann und
sofort loslegen kann.

Nachdem ich wie gewohnt zunächst alles in Safari & Firefox entwickelt habe,
war ich sehr erstaunt, dass das focus() nicht an allen Stellen des Projektes
zu sehen war. Nach kurzer Zeit habe ich entdeckt, dass der Focus nur bei
den Seiten nicht angezeigt wird, wo der Inhalt per AJAX nachgeladen wurde.

Es gibt eine sehr einfache wenn auch sehr unschöne Lösung für das Problem.
Man kann den Focus einfach doppelt aufrufen, das habe ich dann in einer
Funktion implementiert, um es einfach wieder zu entfernen, wenn eine andere
Lösung möglich ist.

CODE:
function focus(name)
{
$(name).focus();
// called focus twice due to a bug with ie!!!
$(name).focus();
}

Geschrieben von Peter Rehm

29.04.2007 um 15:34:47

Abgelegt in Programmierung

Tags für diesen Artikel: ,

Komische Zeichen in UTF8 aka BOM (Byte order Mark)

Ohne Kommentare

Schon lange hab ich mich über die "komischen" Zeichen geärgert, die der Texteditor meines Vertrauens BBEdit am Anfang jeder UTF-8 Datei eingefügt hat. Ich hab dann sogar andere Texteditoren engesetzt, und irgendwie hatte ich immer das gleiche Problem.

Vor allem war ärgerlich, dass ich damit immer wieder nahezu unbrauchbare Dateien ausgeliefert habe, da der IE z.B. eine CSS Datei mit BOM auch einfach mal so ignorieren kann.

Heute habe ich des Rätsels Lösung gefunden. Eben das besagt BOM. Das Teufelszeug.

BOM = Bytereihenfolge-Markierung und wird dazu verwendet um z.B eine UTF-8 Datei als UTF-8 kodiert zu markieren.
Dies macht beim Datenaustausch sicher sinn, kann aber bei der Web oder C++ Entwicklung sich als sehr hinderlich erweisen. Die UTF-8-Kodierung des BOM besteht aus der Bytesequenz EF BB BF, die in den ISO-8859-1-Zeichen  erscheint.

Ich habe nun in BBEdit UTF-8 ohne BOM eingestellt und werde damit hoffentlich endlich Frieden finden :-)

Geschrieben von Peter Rehm

09.04.2007 um 22:28:42

Abgelegt in Programmierung

Tags für diesen Artikel: , ,

MSSQL to MySQL konvertieren

Ohne Kommentare

In einem aktuellen Projekt stand ich vor der Herausforderung, dass die bisherige Datenbank
in MSSQL gehalten wurde, und ich die Datenbank nur umständlich über ein Weboberfläche
"verwalten" konnte.

Da ich wenigstens die aktuelle Datenstruktur ansehen wollte, den Code der zu dem Projekt
gehört kann eh nicht weiterverwendet werden, musste ich irgendwie ein SQL Statement
erzeugen, was mit dem Tool aber nicht möglich war.

Dann stieß ich auf das MySQL Migration Toolkit, mit welchem man an sich
komfortabel eine MSSQL Datenbank auslesen könnte, und direkt in eine MySQL Datenbank
schreiben kann. Allerdings war, wie nicht anders zu erwarten, der SQL Server nicht von außen
zugänglich.

Die einzige Lösung die somit noch blieb war über ein PHP/ASP Skript, was direkt auf dem
Server liegen kann und soch somit auch verbinden kann. Nach längerer Suche stieß ich auf
das Greenlight SQL Tool.

Aus dem heruntergeladenen ZIP Archiv muss man nur noch die dumpdb.php hochladen und
anpassen. In meinem Fall wollte ich eine MSSQL DB auslesen und in ein MySQL Format bringen.

Standardmäßig sieht der erste teil der Config so aus

CODE:
$dbpasswd = @$HTTP_POST_VARS["dbpasswd"];
$dbhost = (! empty($HTTP_POST_VARS["dbhost"])) ? $HTTP_POST_VARS["dbhost"]
    : "localhost";
$dbname = @$HTTP_POST_VARS["dbname"];
$dbuser = @$HTTP_POST_VARS["dbuser"];
$dbtype = (! empty($HTTP_POST_VARS["dbtype"])) ? $HTTP_POST_VARS["dbtype"]
    : (function_exists("mssql_connect") ? "mssql" : "mysql");
$targetType = (! empty($HTTP_POST_VARS["targetType"]))
     ? $HTTP_POST_VARS["targetType"] : $dbtype;


Woher die HTTP_POST_VARS kommen sollen, war mir unklar daher habe ich das wie folgt
angepasst.

CODE:
$dbpasswd ='pass';
$dbhost = 'localhost';
$dbname = 'db123';
$dbuser = 'user123';
$dbtype = 'mssql';
$targetType = 'mysql';


Nun kann man das Skript über den Browser aufrufen und erhält die Datei direkt zum
Download. Ist dies nicht der Fall fehlt vermutlich PEAR::DB, welches unbedingt vorhanden
sein muss.

Dies kann man allerdings auch direkt in das Verzeichnis hochladen, wenn PEAR nicht
direkt gegeben ist. Auf dies komme ich in einem der nächsten Blog Einträge zurück.

Geschrieben von Peter Rehm

19.03.2007 um 09:19:21

Abgelegt in Programmierung

Tags für diesen Artikel: , ,

FCK Editor 2.4 und das Phänomen der kleingeschriebenen Pfade

Ohne Kommentare

Seit der Einführung von FCK Edit 2.4 wurde ein kleines Detail verändert.
Bisher hat der Editor die Dateien die man hochgeladen hat, immer in
/userfiles/Image/ oder z.b. /userfiles/File/ hochgeladen
Image oder File sind die Ressource Typen.

Seit 2.4 lädt der Editor aber die Dateien immer in /userfiles/image/.
Das ist ziemlich blöd, wenn der Kunde alle seine Bilder in /Image/ liegen hat.
Dazu gibt es 2 Lösungsansätze.

1.) Umbenennen von /Image/ in /image/

Das alte Verzeichnis kann einfach in kleingeschrieben umbenannt werden.
Dies sollte man mit allen Ressource Typen machen, die man verwendet.
Allerdings sollte man beachten, dass man evtl. noch eine Datenbank updaten
muss, wenn sich die Pfade geänder haben.

Dies kann man mit der Anleitung des vorherigen Blog Posts machen.

2.) Man passt die PHP Datein vom FCKEditor an

Seit der neuen Version hat sich hier was verändert

CODE:
editor/filemanager/browser/default/connectors/php/io.php:34:               
   return $GLOBALS["UserFilesPath"] . strtolower( $resourceType ) . $folderPath ;
editor/filemanager/browser/default/connectors/php/io.php:45:       
   $sResourceTypePath = $GLOBALS["UserFilesDirectory"] . strtolower( $resourceType ) . '/' ;


Und zwar ist das strtolower hinzugekommen. Entfernt man dieses verhält sich alles wieder wie gehabt.

CODE:
editor/filemanager/browser/default/connectors/php/io.php:34:               
   return $GLOBALS["UserFilesPath"] . $resourceType  . $folderPath ;
editor/filemanager/browser/default/connectors/php/io.php:45:       
   $sResourceTypePath = $GLOBALS["UserFilesDirectory"] . $resourceType . '/' ;


Zusammenfassung
Allerdings ist die Methode 1 sicher die zukunftssichere. Da man sonst bei jedem Update wieder an das ändern der
Dateien denken muss.


Geschrieben von Peter Rehm

18.03.2007 um 10:37:16

Abgelegt in Programmierung

Tags für diesen Artikel: ,

Suchen und Ersetzen mit MySQL

Ohne Kommentare

Ein Szenario, das sicher einigen bekannt vor kommt. Ein Kunde pflegt seine Daten über
einen längeren Zeitraum. Eines Tages möchte er einen Pfad den er dort immer eingegeben
hat ändern und hat keine Lust dazu alle Artikel nochmals zu bearbeiten.
Er meldet sich und sagt, man solle das doch "kurz" für Ihn erledigen.

Dank der REPLACE Funktion von MySQL auch in der Tat kein Problem.

CODE:
UPDATE articles
SET content = REPLACE (content,'alt','neu')


Geschrieben von Peter Rehm

18.03.2007 um 10:33:54

Abgelegt in Programmierung

Tags für diesen Artikel:

Erkenntnis des Tages

Ohne Kommentare

Mein MacBookPro ist einfach zu schnell um zu messen wie lange eine Zuweisungs oder eine Rechenoperation dauert :-) Resultat, komplett belegter Ram der mich zu einem Neustart zwang und die Erkenntnis dass 1000000 Zuweisungsoperationen weniger als 0,01 sekunden brauchen.

Juhuu!

Geschrieben von Peter Rehm

26.12.2006 um 21:07:08

Abgelegt in Programmierung

Tags für diesen Artikel: ,

Performancetests / Profiling in C

Ohne Kommentare

Dies musste ich heute einsetzen beim Testen eines Sortieralgorithmus.

Man compiliere sein Programm wie folgt:

CODE:
gcc -o ex1b -pg -ansi ex1b.c


Danach muss das Programm einmal ausgeführt werden

CODE:
./ex1b


Danach kann man sich direkt die Profiling Informationen anzeigen lassen, in meinem Fall:

CODE:
gprof ./ex1b


CODE:
granularity: each sample hit covers 4 byte(s) for 0.81% of 1.23 seconds

  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ms/call  ms/call  name    
 91.9       1.13     1.13        1  1130.00  1130.00  _ins_sort [3]
  2.4       1.16     0.03                             ___sfvwrite [4]
  1.6       1.18     0.02        2    10.00    10.00  _print_array [5]
  1.6       1.20     0.02                             _write [6]
  0.8       1.21     0.01                             ___vfprintf [7]
  0.8       1.22     0.01                             _localeconv_l [8]
  0.8       1.23     0.01                             _printf [9]
  0.0       1.23     0.00        1     0.00     0.00  _create_random_array [39]
  0.0       1.23     0.00        1     0.00  1150.00  _main [1]


Index by function name

   [4] ___sfvwrite           [3] _ins_sort             [5] _print_array       
   [7] ___vfprintf           [8] _localeconv_l         [9] _printf            
  [39] _create_random_arra   [1] _main                 [6] _write 

Geschrieben von Peter Rehm

01.12.2006 um 13:54:34

Abgelegt in Programmierung

Tags für diesen Artikel: , ,

malloc in C

Mit 2 Kommentaren

Die Erkenntnis des Tages: Manche Fehler sind echt dumm!!

Zur Erklärung:

Bei der Fehlermeldung

CODE:
structfun.c:41: warning: incompatible implicit declaration of built-in function 'malloc'


kommt man schnell zu einem Truschluss. Der Fehler befindet sich nicht in der Zeile 41
sondern liegt einfach an der Header Datei.

CODE:
#include <stdlib.h>


Damit sollte das Problem erledigt sein :-)

Geschrieben von Peter Rehm

27.11.2006 um 17:52:35

Abgelegt in Programmierung

Tags für diesen Artikel: , , ,

[PHP] String als Zipfile

Mit 2 Kommentaren

Wie oft habe ich bereits einen String in ein komprimiertes File schreiben wollen, das vollautomatisiert und zum Download für den User. Allerdings eignet sich dazu das gzip format nicht da die meisten Benutzer mit Windows arbeiten und man ein zusätzliches Tool installieren.

Daher benötigt man das PEAR Module Archive_Zip das hervorragend Zip Dateien erstellen kann. Allerdings benötige ich das Zip File nicht direkt, da ich das File nach dem Download nicht mehr benötige da es veraltet sein könnte. Daher habe ich mir eine Funktion gebaut, die auf Archive_Zip aufbaut, mit der ich das Problem erledigen kann.

Die Funktion stringtozip erstellt temporär das Archiv mit den gewünschten Dateinamen, und löscht danach alles wieder, um nur den String zurückzuliefern.

Aber sehet selbst!

CODE:
/**
* function to create an zip file from an string
* @param string $string content of the file
* @param string $filename name of the file includes the content
* @param string $zipdescription description in the zipfile
* @param string $tmpfolder path for the temporary files with an ending /
*/
function stringToZip($string,$filename,$zipdescription,$tmpfolder)
{
global $cfg;
$rand=rand();

if(!class_exists('Archive_Zip'))
{
// module archive_zip is not existing
return false;
}

if(!is_writable($tmpfolder))
{
// directory is not writeable
return false;
}

if(!file_exists($tmpfolder.$filename))
{
$int_filename=$tmpfolder.$filename;
} else {
$int_filename=$tmpfolder.$filename.'-'.$rand;
}

$fhandler=fopen($int_filename,'a');
fwrite($fhandler,$string);
fclose($fhandler);

$zipHandler=new Archive_Zip($tmpfolder.date("YmdHis").'-'.$zipdescription.'-'.$rand.'.zip');
$zipHandler->create($int_filename,array('remove_all_path'=>true));

// unlink the file containing the string
unlink($int_filename);

// store the data and delete the temp file
$data=file($tmpfolder.date("YmdHis").'-'.$zipdescription.'-'.$rand.'.zip');
unlink($tmpfolder.date("YmdHis").'-'.$zipdescription.'-'.$rand.'.zip');

return join("\n",$data);
}


Viel Spaß!

Geschrieben von Peter Rehm

15.09.2006 um 16:17:50

Abgelegt in PHP, Programmierung

Tags für diesen Artikel: ,

ADODB Table Prefix

Ohne Kommentare

Bei fast jedem Projekt arbeitet man mit Tabellen Prefixen, um das Projekt z.b. 2x in der gleichen Datenbank laufen zu lassen. Gestern habe ich angefangen mein Projekt auf ADOBD und dabei festgestellt dass es noch keine eingebaute Funktion für das Verwalten eines Prefixes gibt. Daher hab ich das nun auf meine Anforderungen angepasst.

Mein Prefix liegt in $cfg['tbl_prefix'].

Die Querys werden nun so aufgebaut ("SELECT * FROM ##daten").

Statt Execute nimmt man nun die neue Funktion pExecute.

Diese Funktion muss in die adodb.inc.php implementiert werden, ich hab diese in der aktuellen ADODB Version in Zeile 784 direkt vor Execute plaziert.

CODE:
/**
*    Function to Replace the Prefixes
*    After replacing it the SQL Statement will be passed to EXECUTE()
*    @param sql SQL statement to execute, ## will be replaced with the Prefix
*/
function &pExecute($sql)
{
global $cfg;
return $this->Execute(str_replace('##',$cfg['tbl_prefix'],$sql));
}

Geschrieben von Peter Rehm

28.06.2006 um 10:39:27

Abgelegt in PHP, Programmierung

Tags für diesen Artikel: ,

Multi List Drag & Drop - Sajax!

Mit 2 Kommentaren

Als ich über die Seite von Tom Westcott gestolpert bin war mir klar, ich muss das in mein neues CMS einbinden. Ich hatte mir damals schon vorgestellt dass das für die Inhaltsstruktur oder für die Sidebar interessant sein könnte, aber ich war damals noch in der Planungsphase.

Als ich dann die Implementation in Serendipity die ich durch Garvin's SuperBlog entdeckt habe getestet habe, war mir klar, genau das will ich auch. Allerdings hat mir nur die AJAX Implementierung zugesagt, da ich ganz genau weiss da manche kunden bei so futuristischen Anwendungen sicher vergessen das abzuschicken. Daher muss das automatisch gemacht werden. Tom hat glücklicherweise auch gleich beide Methoden bereitgestellt.

Allerdings war der Code sehr verworren, und daher habe ich angefangen den Code neu aufzubauen, da ich vor allem im CMS das dann schon sauber einbauen wollte. Anstelle der umfangreicheren Implementation reicht nun folgendes:

CODE:
/**
* db settings
*/
$cfg['server']['host'] = "localhost"; // server
$cfg['server']['user'] = "root"; // dbuser
$cfg['server']['pass'] = ""; // password
$cfg['server']['db'] = "sajaxdemo"; // dbname

/**
*    start the connection
*/
$conn = mysql_connect ($cfg['server']['host'],
$cfg['server']['user'],
$cfg['server']['pass']);
$result = mysql_select_db ($cfg['server']['db'],$conn);

/**
*    include the sajax file
*/
include("sajax.php");


Danach muss noch der Pfad in der sajax Datei angepasst werden, dass das einbinden der styles und des JS auch funktioniert.

CODE:
var $sajax_path='thirdparty/sajax/';


Die Funktion update_db sollte dann auch an die Gegebenheiten angepasst werden. Die Funktion greift auf die global Datenbankverbindung zu.

Das Auslesen wird dann direkt in dem File gemacht in dem Sie die Liste anzeigen möchten.

Um dies zu vereinfachen habe ich eine Bespiel Datei mitgeliefert, in der Sie das alles sehen können. Dazu auch der passende SQL dump.

Beispielseite - Download
    Ich hoffe dieses Script findet irgendwo sinvollen Einsatz. Über Feedback würde ich mich freuen.

Geschrieben von Peter Rehm

20.06.2006 um 00:33:22

Abgelegt in PHP, Programmierung

Tags für diesen Artikel: , ,