Beiträge der Kategorie default

On-the-fly Suche mit JavaScript

Es war mal eine Textdatei. Da haben unterschiedliche Leute etwas reingeschrieben, z.B. Kochrezepte. Da Textdateien nicht strukturiert sind, wurde es immer schwieriger, in der Datei etwas zu finden (ok, von der Benutzung von Strg+F mal abgesehen). Da entstand die Idee aus der Textdatei eine HTML-Datei zu machen und mit einer Suche zu versehen, die sucht während man tippt. Am besten sollten die Inhalte immernoch für alle pflegbar sein und trotzdem strukturiert.

Ich hab rausgefunden, dann man in HTML auch auf XML-Daten zurückgreifen kann, wenn man sie per JavaScript lädt. Zunächst erstellt man eine XML-Datei. Da legt man in dem Dokumentelement viele Knoten an, in denen jeweils Texte drinstehen. In diesem Fall heißen die Knoten entry und haben drei Unterknoten: title, desc (für description) und tags. Diese Datei speichert man als food.xml ab.

Dann erstellt man eine HTML-Datei. Diese hat erstmal das Grundgerüst, also head und body. In den Head kann man ein wenig Style-Eigenschaften einfügen. Im Body erstellt man ein Element mit der Id “page” – da kommen dann die Ergenbisse rein und die Suchbox. Die Suchbox ist ein input-Feld, der Korrektheit halber packt man noch ein Form drumrum und fügt hinter das Eingabefeld ein Div ein, wo das getippte angezeigt wird (nur zur Kontrolle). Das Eingabefeld wird mit einem Event-Listener, nämlich on KeyUp versehen. Warum nicht onChange? Weil onChange erst ausgelöst wird, wenn man das Feld verläßt und wir wollen ja währenddessen suchen und onKeyUp meldet nach jeder Tasteneingabe. Die Suchbox hat eine Id (damit man darauf zugreifen kann) und von mir aus eine Klasse.

Was will man eigentlich durchsuchen? Die Daten stehen ja in der XML-Datei. Zunächst soll die Datei eingelesen und der Inhalt dargestellt werden. Beim Suchen werden die relevanten Teile ein- und ausgeblendet. Und um rauszufinden, welche Teile relevant sind, sollten die Inhalte vorher indiziert werden. Also: einlesen, darstellen, indizieren.

Das Einlesen sollte beim Aufruf der Seite stattfinden, also im body onLoad. Da wird die Funktion importXML aufgerufen. Nach einigem Suchen habe ich ein Skript gefunden, das meinen Vorstellungen entspricht und die XML-Datei “importiert” abhängig vom Browser. Wenn der Import beendet ist, werden die Inhalte dargestellt. Dazu holt man sich alle Elemente mit dem Tag entry. Den Inhalt von title fügt man in ein h1 ein, den Inhalt in ein p, aber erst nachdem man alle Zeilenumbrüche in br umgewandelt hat. Und die Tags kommen in eine Liste.

Wenn man mit dem Darstellen fertig ist, dann muss nur noch indiziert werden. Dazu läuft man alle entry-Elemente wieder durch und speichert die Daten in einem assoziativen Array. Die Indizes sind die Id des div-Elementes, in dem der Inhalt drin steht.

Die Funktion search ist daher ganz einfach: man läuft das assoziative Array ab und erfragt die Position des gesuchten Begriffes. Falls der Begriff vorkommt, setzt man die Sichtbarkeit des dazugehörigen div-Elementes auf true, ansonsten auf false (oder in diesem Fall display auf block bzw. none).

Zu beachten ist: es sollten keine Umlaute verwendet werden, weil dann der IE die Datei nicht lädt und nur meldet “Object erwartet” (die Fehlermeldung, die nur vor Aussagekraft strotz) und die Tags sollten richtig verschachtelt werden.

Und hier das Ergebnis:
XML-Datei als Vorlage
Suche mit JavaScript

PS: Vielen Dank an Maryna Hetsyuk für die wertvolle Hilfe, ist immer wieder sehr lustig 🙂

PayPal in Seite einbauen

Das ist eine einfach Möglichkeit, eine Abwicklung der Bezahlung über PayPal in eine Seite einzubauen. Da ich nichts dazu gefunden habe, wie man es macht, hier eine kleine Anleitung, für die die gar keine Ahnung davon hatten, so wie ich.

Bei PayPal gibt es zum Testen eine Developer Umgebung und eine Sandbox, in der man Testaccounts anlegen kann. Die Developer Umgebung findet man hier https://developer.paypal.com/. Da kann man sich ein Testaccount als Entwickler anlegen, z.B. als test@test.de.
Dann legt man sich zwei Testaccounts an, einen Verkäufer und einen Käufer. Dabei gibt man als Zugangsdaten eine leicht Abweichende E-Mail-Adresse ein, aus dieser wird PayPal sowieso eine Test-E-Mail-Adresse generieren, das könnte z.B. testseller@test.de sein. Die E-Mail Adresse wird gekürzt und um eine zufällige Zahl ergänzt.

Wenn man zwei Test-Accounts hat, kann man sich in der Sandbox einloggen. Dazu wählt man einen Account aus und drückt auf den Button “Enter Sandbox Test Site”. Das ist aber nur so zum Spaß.

Auf der Integration Center Seite findet man eine Anleitung dazu, wie man PayPal in die eigene Seite einbauen kann. Ich habe mich für die Website Payments Standard Methode entschieden. Das Bestellformular ist sehr einfach und soll erstmal nur die Artikel anzeigen mit einem Eingabe bzw. Auswahlfeld für die Menge. Das ist ein Einspiel-PHP-Code:

while ( $row = mysql_fetch_array( $aQResult ) ) {
$i++;
echo ‘

‘;
echo ‘

‘.$row[“Bez”].’

‘;
echo ‘

‘.$row[“Nr”].’

‘;
echo ‘

‘.$row[“VK”].’ €

‘;
if($row[“link”]!=””) {
echo ‘

‘.$row[“link”].’

‘;
} else {
echo ‘

‘;
echo ‘

‘;
}
echo ‘

‘;
}

Das Formular wird an die Seite selbst gesendet. Dort werden die Artikel ausgewertet. Falls die Summe 0 ist, dann eine Fehlermeldung anzeigen. Ansonsten werden die bestellten Artikel angezeigt und die Summe berechnet. PHP-Code-Schnipsel dafür:


$sum = 0;
$paypal = ”;
while ( $row = mysql_fetch_array( $aQResult ) ) {
if($_POST[‘amounts_’.$row[“Nr”]] > 0) {
$amount = $_POST[‘amounts_’.$row[“Nr”]];
$price = $row[“VK”]*$amount;
$sum+= $price;
echo ‘

‘;
for($i=0;$i<$amount;$i++) { $paypal.= '‘;
$paypal.= ‘‘;
$paypal_counter++;
}
echo ‘


‘.$row[“Bez”].’

‘;
echo ‘

‘.$row[“Nr”].’

‘;
echo ‘

‘.$row[“VK”].’ € x ‘.$amount.’

‘;
echo ‘

‘.$price.’

‘;
}
echo ‘

‘;
}
echo ‘

Gesamtsumme: ‘.$sum.’

‘;
if($sum > 0) {
echo ‘

zurück ‘.$paypal.’

‘;
} else {
echo ‘

zurück Sie haben keine Artikel ausgewählt

‘;
}

Der PayPal Counter ist extra notwenig, weil in der Anleitung steht, dass die Artikel durchnummeriert sein müssen und keine Zahl ausgelassen werden darf. Falls von zwei Artikeln mehrere bestellt worden sind, wird die Bestellung wieder in Einzelteile aufgeteilt.

Damit das Formular richtig verarbeitet werden kann, fehlen noch einige Daten, nämlich der Formularbeginn:





In der Anleitung steht, dass man als Formularadresse https://www.paypal.com/cgi-bin/webscr angeben sollte, aber es wird nicht funktionieren, da die Accounts ja nur in der Sandbox existieren. Daher habe ich nach einigem verzweifelten Tests rausgefunden, dass man die Sandbox-Adresse eintragen muss. Der Wert der Variablen business muss der E-Mail-Adresse des Testverkäufers entsprechen.

Man wird auf eine Seite weitergeleitet, auf der die Artikel angezeigt werden und die Möglichkeit zum Einloggen gegeben ist. Dort gibt man die E-Mail-Adresse des Testkäufers an. Und kann dann die Bestellung absenden.

Wenn man mit den Tests fertig ist, sollte man natürlich die URL im Formular auf die von PayPal angegebene ändern und die Adresse des echten Verkäufers eintragen.

Geschrieben in default | Kommentare deaktiviert für PayPal in Seite einbauen

Weiterleitung der Mails vom vServer

Ich habe einen Virtual Server (2oder2*), tolles Ding (grade wenn man einiges neu kompiliert, s.u.), die E-Mail Accounts sind aber über das Control Center eingerichtet, also nicht auf dem Virtual Server. Das Problem bestand darin, dass man über ein Kontaktformular keine Mails verschicken konnte. Genauer: Die Seite ist unter domain.de* zu finden, da ist ein Kontaktformular mit Name, Nachricht, das an test@domain.de geschickt werden soll. Die Mailbox ist aber auf einem anderen Server eingerichtet. Wenn man nun das Kontaktformular ausfüllt und senden will, versucht der Server das Kontaktformular lokal zuzustellen, die Adresse existiert aber nicht und so wird die Mail verworfen.

Das Problem habe ich mit Hilfe von serversupportforum.de und huschi.net gelöst. Als erstes muss man die Mailfunktion für die Domain ausschalten. Das geht entweder über Plesk (Domains > domain.de > Mail > disable) oder indem man die Einträge der Domain in /var/qmail/control/virtualdomains und /var/qmail/control/rcpthosts löscht. Dann legt man eine Datei mit dem Namen smtproutes im Ordner /var/qmail/control an und schreibt da :smtp.2oder2.de* rein. Das führt dazu, dass die Emails an den SMTP Server des Providers weitergeleitet werden.

*Name von der Redaktion geändert

Geschrieben in default | Kommentare deaktiviert für Weiterleitung der Mails vom vServer

Tipps zum Tunen eines vServers

Anstatt Hosting-Paket hab ich mich letztens für einen Virtual Server vond 1und1 entschieden – mit Plesk als Verwaltungsoberfläche. Es ist schon ganz schick, man kann so viele Sachen selbst machen. Die Installierte PHP-Version und die Apache Version waren mit einfach zu alt, deswegen hab ich einfach beschlossen Apache und PHP neu kompilieren. Als erstes die aktuellste Apache Version herunterladen, entpacken (gunzip, tar -xf), konfigurieren (.configure Optionen siehe unten), kompilieren (make) und installieren (make install). Dann in einen anderen Ordner PHP herunterladen und die gleiche Prozedur durchführen. Über Plesk den alten Apache stoppen und das automatische Starten unterbinden.

Hier die Konfiguration für Apache2

./configure --prefix=/opt/apache2
--enable-auth-digest --enable-cache
--enable-mem-cache --enable-rewrite
--enable-vhost-alias --enable-so

Hier die Konfiguration für PHP5
./configure --prefix=/opt/php5 --with-zlib
--with-gd --enable-gd-native-ttf
--with-freetype-dir --enable-exif
--with-mysql=/usr
--with-mysqli=/usr/bin/mysql_config
--with-regex=php
--with-apxs2=/opt/apache2/bin/apxs

Jetzt der Trick: Nachdem der Apache installiert ist, einige der Konfigurationsdateien aus dem alten Verzeichnis in das neue Verzeichnis kopieren, und die Pfade so ändern, dass einige der Dateien immer noch aus dem eigentlichen Verzeichnis ausgelesen werden, vor allem die Datei, in der die Virtual Hosts eingetragen werden (das ist wahrscheinlich die default-server.conf), dann kann man die Domains immer noch über Plesk konfigurieren. Eine wichtige Datei ist die load_modules.conf. Da werden bei dieser Konfiguration fast alle Einträge entfernt, und der Pfad zum neuen PHP-Modul eingefügt. Zwischendurch den Apache von der Konsole starten (Plesk geht nicht mehr) und schauen, ob alles funktioniert.

LoadModule php5_module /opt/php5/php-5.2.3/libs/libphp5.so

Die Dateien mit der Endung PHP mit dem folgenden Befehl als PHP interpretieren lassen. Server nochmal stoppen und starten. Fertig!

AddType application/x-httpd-php .php
AddType application/x-httpd-php .inc

Zu beachten: Domains können mit Plesk angelegt werden, dann muss aber nach dem Anlegen der Server neu gestartet werden.

Geschrieben in default | Kommentare deaktiviert für Tipps zum Tunen eines vServers