jsMarket - Frei definierbarer Anzeigemarkt

Installation und Konfiguration von jsMarket


Hier geht's zur Download-Seite von jsMarket

1. Allgemeines

1.1. Produktbeschreibung in Kürze

jsMarket ist ein frei definierbarer Kleinanzeigemarkt. Mit jsMarket können Sie beliebig viele, völlig unabhängige Anzeigemärkte definieren. Jedem Inserat können wahlweise eine beliebige Anzahl Bilder angehängt werden. Das komplette Aussehen kann via Templates angepasst werden. Die Verwaltung kann mittels einer webbasierter Administrations-Oberfläche vorgenommen werden. Unix/(Windows), deutsch, kostenlos.

1.2. Was kann jsMarket?

jsMarket ist ein Anzeigenmarkt für die eigene Homepage mit folgenden Funktionen:

1.3. Voraussetzungen

Der Server muss natürlich CGI's verarbeiten können. Nebst CGI-Unterstützung gelten noch folgende Voraussetzungen:

1.4. Lizenzbestimmungen

Dieses Skript basiert auf den STANDARD-Lizenzbedinungen, die Sie unter http://www.cgicorner.ch/download/download-info oder in der Datei cgicorner.txt im ZIP-Archiv finden.

2. Installation

2.1. Dateien kopieren und Berechtigungen setzen

Folgende Dateien müssen kopiert und mit den entsprechenden Berechtigungen versehen werden:

 cgi-bin - Verzeichnis, z.B. /cgi-bin/jsmarket/
. chmod 755 (od. 777) Verzeichnis
jsmarket.cgi chmod 755 Hauptscript
config.pl chmod 700 Konfiguration
subs.pl chmod 700 Zusatzfunktionen (*)
data chmod 755 (od. 777) Verzeichnis (Daten)

 images - Verzeichnis, z.B. /jsmarket/images/
. chmod 755/777 Verzeichnis
*.jpg, *.gif chmod 644 Bilder

 marketimages - Verzeichnis, z.B. /jsmarket/marketimages/
. chmod 755 (od. 777) Verzeichnis
*.jpg, *.gif, *.png chmod 644 Inserate-Bilder
 Daten-Verzeichnis, z.B. /cgi-bin/jsmarket/data/
 .htaccess Datei empfohlen, um Zugriffe via Webbrowser komplett zu verhindern
. chmod 755/777 Verzeichnis
style.css chmod 600 CSS für Administrationsbereich
cat.config chmod 600 Kategorie-Einstellungen
data.pl chmod 600 allgemeine Daten (*)
error.pl chmod 600 Fehlerhafte Loginversuche (*)
*.data chmod 600 Marktplatz-Daten (*)
*.mail chmod 600 Templates für verschiedene Mails
*.view chmod 600 Templates für Detailansichten
*.list chmod 600 Templates für Inserate-Übersicht
*.form chmod 600 Templates für Hinzufügen-Formulare
*.search chmod 600 Templates für Suchformulare
*.contact chmod 600 Templates für Kontaktformulare
*.recommend chmod 600 Templ. für Weiterempfehlen-Form.
*.edit chmod 600 Templates für Editieren (Passwort)
*.password chmod 600 Templ. für Passwort zurücksetzen

Anmerkung: Die mit (*) gekennzeichneten Dateien befinden sich nicht im ZIP-Archiv und werden erst im Betrieb erstellt.

Je nach Konfiguration des Webservers werden keine Bilder aus dem cgi-bin Verzeichnis angezeigt. Deshalb wird empfohlen, die Bilder in ein Verzeichnis ausserhalb von cgi-bin zu kopieren und die entsprechenden Bildpfade im Adminbereich anzupassen. Die Standard-Konfiguration des Scripts geht davon aus, dass Bilder im cgi-bin Verzeichnis angezeigt werden können und auch dort abgespeichert sind. Bei einer Ängerung der Installations-Verzeichnisse ist zwingend eine Anpassung im Adminbereich notwendig.

jsmarket.cgi benötigt Schreibzugriff auf das Script-Verzeichnis. Dazu ist - je nach Konfiguration des Webservers - ein chmod 777 für das Verzeichnis notwendig. Möglicherweise meldet das Script nach dem chmod 777 jedoch einen "Internal Server Error". Zuerst sollte also immer chmod 755 versucht werden.

Pfade und Dateinamen zu Bildern im Benutzer-Bereich (z.B. Kamera-Symbol bei Inserat mit Grafik) werden direkt in den entsprechenden Templates definiert (Kamera-Gif: *.list-Datei). Sofern das image-Verzeichnis ausserhalb des cgi-bin Verzeichnisses liegt, sollte dort der Pfad angepasst werden.

2.2. Update

Alle notwendigen Schritte für den Update sowie alle Neuerungen finden Sie in der Datei update.txt. Es müssen immer alle TODO-Einträge zwischen der eingesetzten und neuen Version beachtet werden.

Zudem steht ebenfalls ein Update-Script zur Verfügung. Um dieses zu nutzen, gehen Sie wie folgt vor:

3. Konfiguration

3.1. Erster Login

Die Administrationsoberfläche finden Sie unter: http://www.meinserver.ch/cgi-bin/jsmarket/jsmarket.cgi?action=admin

Beim ersten Login werden - je nach Konfiguration - die Bilder noch nicht geladen. Dies ist normal und muss Sie nicht weiter stören.

Loggen Sie sich nun mit dem Benutzername admin, ohne Passwort ein.

Sie gelangen nun ins Hauptmenü. Klicken Sie auf den Link "System-Einstellungen ändern". Hier können Sie verschiedene Einstellungen vornehmen. Kontrollieren Sie den Pfad zu sendmail und passen Sie ggf. die Dateipfade für die Konfigurationsdateien sowie Templates an.

3.2. Marktplätze ansehen

Die Links für die einzelnen Marktplätze sind einerseits in der Administrationsoberfläche (Kategorien), andererseits unter http://www.meinserver.ch/cgi-bin/jsmarket/jsmarket.cgi sichtbar. Diese Übersichtsseite lässt sich nicht per Templates steuern, weil es hier zu viele Einsatzmöglichkeiten gäbe (Integration ins Menü; nur ein Teil der Märkte sichtbar etc.). Es ist deshalb das Ziel, dass selber eine Übersichtsseite mit fixen Links erstellt wird.

Ein Beispiel einer Portalseite für mehrere Marktplätze bietet uebersicht.cgi, welches aber auf Wunsch eines Kunden programmiert wurde und an die eigenen Bedürfnisse angepasst werden müsste. Sie finden ein Beispiel dieses Portals unter http://www.cgicorner.ch/cgi-bin/demo/jsmarket/uebersicht.cgi.

3.3. Administrationsoberfläche

3.3.1. Login-Daten ändern
Unter "Login-Daten ändern" können Sie den Benutzername sowie das Passwort für die Administrationsoberfläche festlegen.
3.3.2. Einstellungen ändern
Unter "Einstellungen ändern" können Sie den Pfad zu sendmail sowie die Pfade und Dateinamen der einzelnen Templates, Datenbanken und Bildern für die Adminoberfläche konfigurieren.

Die Einstellungen im Detail:

Pfad zu sendmail Definiert den Pfad zu sendmail, notwendig für den Versand der Statistik per E-Mail
GMT Zeitzone Definiert die Zeitzone, welche in Mails als Absendezeit dienen soll. [auto] entspricht der eingestellten Zeitzone des Servers.
Korr. Serverzeit gegenüber GMT Dieses Feld muss nur bei einem falsch konfigurierten Webserver mit einem Wert gefüllt werden. In der Regel wird anhand der Server-Konfiguration die aktuelle Serverzeit auf die GMT (Greenwich Mean Time) umgerechnet und dann in die oben definierte Zeitzone gewandelt. Sollte auf dem Webserver die Zeit oder Zeitzone falsch konfiguriert sein, kann dies zu Zeitabweichungen führen, welche in dieser Maske korrigiert werden kann. Die Angabe der Korrektur erfolgt in Stunden, also z.B. "3" oder "-2".
Sommerzeit erzwingen jsNews ermittelt anhand der lokalen Zeitzone des Servers automatisch, ob es sich um Winter- oder Sommerzeit handelt. Steht der Server jedoch in einer Zeitzone, die keine Sommerzeit kennt oder ist fehlerhaft konfiguriert, funktioniert diese automatische Erkennung nicht. In diesem Fall kann mit dieser Option im Sommer die Sommerzeit manuell aktiviert und im Winter dann wieder deaktiviert werden. Im Normalfall kann diese Option auf "Nein" belassen werden.
Daten-Datei (temporär) Datei für temporäre Daten (letzte SIDs)
Error-Datei Logfile für fehlerhafte Login-Versuche
Copyright Copyright-Information (sichtbar in dem Administrationsbereich)
CSS für Administrationsbereich CSS-Datei für die Administrationsoberfläche
allg. Bilderverzeichnis Pfad zu den Bildern, nachfolgende GIFs für den Administrationsbereich sind abhängig von diesem Pfad, ebenfalls steht dieses Verzeichnis bei allen Templates mit <!--imgDir--> zur Verfügung. (Browser-Pfad)
Diverse Images Ablageort und Dateiname der einzelnen Bilder der Admin-Oberfläche. Browser-Pfad, in Abhängigkeit mit dem allg. Bilderverzeichnis.
Bei neuem Eintrag Mail an Hier kann eine E-Mail Adresse eingetragen werden, an die bei jedem neuen Inserat oder einer Änderung eines bestehenden Inserates ein Mail gesendet wird.
Template: Admin-Info Mail Template für das Mail an den Administrator
Validierung E-Mail Adressen notwendig Legt fest, ob bei neuen Inseraten zuerst noch die E-Mail Adresse des Inserenten bestätigt werden muss.
Flood-Sperre (Inserate von selber IP) Die Flood-Sperre legt fest, dass innerhalb eines definierten Zeitraumes von der gleichen IP nur ein Inserat erfasst werden kann (Schutz vor Mehrfach-Postings / sinnloses Abfüllen von Inseraten)
Flood-Sperre auch für Kontakt/Weiterempf. Legt fest, ob die Flood-Sperre auch für das Kontakt- oder Weiterempfehlungsformular verwendet werden soll
Nach Inserat erfassen/editieren Definiert, ob der Besucher nach dem erfassen/editieren eines Inserates wieder zur Kategorieübersicht oder direkt in die Detailansicht seines Inserates gelangt (sofern keine Validierung notwendig ist)
Nicht val. Inserate nach X Tagen löschen Definiert, nach wie vielen Tagen Inserate gelöscht werden sollen, wenn Sie noch nicht validiert sind (durch Benutzer und/oder Administrator, je nach Validierungsoptionen). Wird das Feld leer gelassen, werden nicht validierte Inserate wie validierte Inserate behandelt und nach der bei der Erfassung definierten Anzeigedauer gelöscht.
BB-Code in Inseraten erlauben Legt fest, ob in Inseraten BB-Code erlaubt ist, um bestimmte Textbereiche fett ([b]..[/b]), kursiv ([i]...[/i]) bzw. unterstrichen ([u]...[/u]) darzustellen.
Secure-Code (Missbrauchsschutz) Legt fest, ob der Secure-Code Missbrauchsschutz für die Inserate-Erfassung und/oder für die Kontakt- und Weiterempfehlungsformulare aktiviert ist. Ist dies der Fall, wird in einer Grafik eine fünfstellige Zahl angezeigt, welche in ein Eingabefeld abgetippt werden muss. Dies verhindert automatische Mailversände via Formulare durch Spammer und automatisierte Erfassung von Spam-Inseraten.
Secure-Code Hintergrund UNIX-Pfad zum Hintergrundbild des Secure-Codes. Nur relevant, wenn Secure-Code auch aktiviert ist.
Secure-Code Hintergrund-Schrift Hex-Code der Schriftfarbe für die "Störziffern" im Hintergrund des Secure-Codes.
Secure-Code Vordergrund-Schrift Hex-Code der Schriftfarbe des Secure-Codes.
Kategorien-Datei Datei, in der die Konfiguration der einzelnen Kategorien abgespeichert wird.
Marktplatz-Bilder (Upload) Browser und UNIX-Verzeichnis, in dem die Bilder zu den Inseraten abgespeichert werden, welche via Browser hochgeladen werden.
Wichtig: die tägliche Wartungsfunktion löscht in diesem Verzeichnis automatisch Dateien, welche nicht zu Inseraten gehören und mit "tmp_" oder "[Ziffern]_" beginnen! Dieses Verzeichnis sollte ausschliesslich für jsMarket verwendet werden.
zu grosse Marktplatz-Bilder Legt fest, ob zu grosse Bilder im Marktplatz mit einer Fehlermeldung abgelehnt werden sollen, oder ob die Grösse automatisch angepasst werden soll (benötigt GD-Modul, nur bei JPGs, max. Grösse in Pixel muss in Kategorie definiert sein)
maximale Bildgrösse in Bytes Definiert die maximale Bildgrösse in Bytes. Ist das Feld leer oder enthält den Wert 0, sind Bilder in unbeschränkter Grösse erlaubt (bzw. es wird nur noch die allfällig konfigurierte maximale Bildgrösse in Pixel pro Kategorie berücksichtigt).
Dateiuploads erlauben Legt fest, ob Inseraten nebst Bildern auch noch andere Dateien (z.B. PDFs etc.) enthalten dürfen. Ebenfalls, ob Kontakt-Formulare mit Dateianhängen versehen werden dürfen.
Template: Validation Mail Mailvorlage für das E-Mail Validierungsmail (Link, den der Inserent anklicken muss)
Template: Contact Mail Mailvorlage für den E-Mail Kontakt via HTML-Formular
Template: Passwort Reset Mail Mailvorlage für die Rücksetzung des Passwortes
Template: Weiterempfehlen Mail Mailvorlage für Weiterempfehlen eines Inserates via HTML-Formular
Fehlertext Diverse Fehlertexte
Meldungstexte Diverse Informationstexte
Suche... Texte für Suchergebnisse
3.3.3. Kategorien
In diesem Bereich können die einzelnen Marktplätze verwaltet werden. Für jeden Marktplatz sind folgende Einstellungen notwendig:

Name der Kategorie Titel des Markplatzes
Inserate Daten Datei Text-Datenbank, in welche die einzelnen Inserate gespeichert werden.
Einträge pro Seite Anzahl Einträge, die der Übersichtsseite angezeigt werden.
Default Anzeigedauer Anzahl Tage, die ein Inserat aktiv wird, wenn der Benutzer keine Änderung vornimmt.
Maximale Anzeigedauer Die maximale Dauer in Tagen, die ein Inserat geschaltet werden kann.
Validierung notwendig Legt fest, ob Einträge zuerst noch durch den Benutzer und/oder Administrator validiert werden müssen.
Mail: Admin-Info Mailadresse Ziel-Adresse für das Admin-Info-Mail. leer=globale Einstellungen werden übernommen.
sortieren legt fest, ob die Inserate anstatt nach Eintragungsdatum nach einem oder mehreren beliebigen Feldern sortiert werden soll. Dabei gibt es mehrere Varianten:
  • "nur manuell (Parameter)": die Datei wird nicht automatisch umsortiert, sondern nur mittels orderby-Parameter in der URL
  • "einmal pro Tag": beim jeweils ersten Aufruf pro Tag wird die Datendatei umsortiert. Erfasste Inserate am aktuellen Tag erscheinen zuoberst. Eine Sortierung via URL ist weiterhin möglich. Resourcen-schonend.
  • "bei jedem Aufruf": sofern in der URL kein anderes Sortierkriterium übergeben wird, wird die in der Kategorie definierte Sortierung angewandt.
Sortiert nach Legt durch ; getrennt die Sortierreihenfolge fest. Der Parameter hat nur dann eine Funktion, wenn bei "sortieren" der Parameter "einmal pro Tag" oder "bei jedem Aufruf" gewählt wurde.
Anzeigen-Counter Definiert, ob ein Anzeigen-Counter für diese Kategorie aktiviert werden soll, der zählt, wie oft eine Anzeige schon in der Detailansicht angezeigt wurde. Die Zahl lässt sich im Detail-Template mit <!--field:counter--> einblenden.
Felder Adminbereich Mit ; getrennte Liste von Feldern, die nebst Name, E-Mail und Titel des Inserates im Adminbereich bei "Einträge" zusätzlich angezeigt werden sollen, um den entsprechenden Eintrag leichter zu finden.
Felddefinitionen / Einschränkungen
Pflichtfelder Felder, welche zwingend einen Wert beinhalten müssen. Die Felder title, valid, password und email sind immer Pflichtfelder und müssen nicht aufgeführt werden.
Textbegrenzungen Maximale Textlängen der einzelnen Felder (Feldname=Maximallänge;Feldname2=Maximallänge2;etc.)
E-Mail-Felder Felder, welche immer eine E-Mail Adresse beinhalten müssen. email ist immer ein E-Mail-Feld.
numerische Felder Felder, welche nur Zahlen (Kommazahlen erlaubt) beinhalten dürfen.
numerische Einschränkungen Einschränkungen von numerischen Feldwerten, z.B. Alter muss grösser gleich 18 sein.
Text Einschränkungen Einschränkungen von Textfeldern anhand Positiv- (muss XYZ enthalten) oder Negativlisten (darf ABC nicht enthalten). Perl Regular Expressions sind möglich.
Maximale Bildgrösse Maximale Breite und Höhe in Pixel für ein Bild im Inserat, z.B. 400x300 für maximale Breite von 400 Pixel und max. Höhe von 300 Pixel. 0=beliebig
Thumbnail-Grösse Grösse des Thumbnails (nur JPG), z.B. 150x100 für 150 Breite und 100 Pixel Höhe (das Bild wird proportional verkleinert, bis Höhe und Breite <= Angabe sind).
Alternative Thumbnails Verwendet, falls kein Thumbnail existiert (z.B. bei GIF- oder PNG-Grafiken) das grosse Bild als Thumbnail und verkleinert es via HTTP-Resize (die Dateigrösse bleibt davon unverändert)
Templates
Eingabe-Formular HTML-Template für das Eingabeformular (gleiches Template kann für mehrere Märkte verwendet werden).
Detailansicht HTML-Template für die Detailansicht eines Inserates (gleiches Template kann für mehrere Märkte verwendet werden).
Übersicht/Suchergebnis HTML-Template für die Übersicht der Inserate. In diesem Formular werden auch die Suchergebnisse angezeigt (gleiches Template kann für mehrere Märkte verwendet werden).
Kontaktformular HTML-Template für das Kontakt-Formular (gleiches Template kann für mehrere Märkte verwendet werden).
Weiterempfehlen-Formular HTML-Template für das Weiterempfehlen-Formular (gleiches Template kann für mehrere Märkte verwendet werden).
Such-Formular HTML-Template für das Such-Formular (gleiches Template kann für mehrere Märkte verwendet werden).
Passwort-Abfrage Template für die Passwortabfrage zum Editieren eines Inserates oder Formular für die Zusendung des Passwort-Reset-Mails (gleiches Template kann für mehrere Märkte verwendet werden).
Passwort-Rücksetzen Template um das Passwort mit Hilfe des E-Mail Codes zurückzusetzen (gleiches Template kann für mehrere Märkte verwendet werden).
Mail: Kontakt Mail-Template für das Kontakt-Mail. leer=globale Einstellungen werden übernommen.
Mail: Weiterempfehlung Mail-Template für das Weiterempfehlen-Mail. leer=globale Einstellungen werden übernommen.
Mail: Validierung Mail-Template für das Validierungs-Mail. leer=globale Einstellungen werden übernommen.
Mail: Admin-Info Mail-Template für das Admin-Info-Mail. leer=globale Einstellungen werden übernommen.
Mail: Passwort-Reset Mail-Template für das Mail mit dem Code, um das Passwort zurück zu setzen. leer=globale Einstellungen werden übernommen.
3.3.4. Einträge
In diesem Menü können die einzelnen Inserate editiert oder gelöscht werden.
3.3.5. Backup

Der Menüpunkt Backup ermöglicht es, die Daten-Dateien mittels Knopfdruck zu sichern. Dabei kann ein Suffix angegeben werden, der der Datei hinten angestellt wird. Mit dem Suffix "test" wird die Datendatei demo.data unter demo.data.test gespeichert.

Ebenfalls kann wahlweise ein Verzeichnis angegeben werden: bleibt das Feld leer wird der Backup im selben Datei wie die Daten-Datei abgelegt. Wenn ein Verzeichnis angegeben wird (relativ zum Verzeichnis, in dem sich die jscards.cgi befindet), werden die Backups der Datendateien in diesem Verzeichnis abgelegt.

Wichtig: die Backup-Funktion sichert keine Templates, Konfigurationen oder Bilder zu Inseraten. Für einen kompletten Backup empfiehlt es sich, das jsmarket-Verzeichnis im cgi-bin-Ordner sowie das marketimages-Verzeichnis via FTP auf den lokalen PC zu kopieren.

3.4. Dateisperre

Jeder Schreibzugriff auf eine Datei wird mit einer betriebssystem-unabhängigen Dateisperre versehen. Diese Dateisperre sollte in der Regel wieder aufgehoben werden, kann aber in Ausnahmefällen (z.B. Script-Absturz) erhalten bleiben.

In der Regel kann die Datei wieder via Adminoberfläche entsperrt werden. Falls dies nicht geht, muss die entsprechende lock-Datei gelöscht werden (Beispiel: Lock-Datei für config.pl heisst config.pl.lock).

3.5. Online Versions-Check

Der Online Versions-Check ist eine einfache Möglichkeit, zu überprüfen, ob die eingesetzte Version noch aktuell ist.

Um den Versions-Check zu starten, muss man auf den Link bei der Versions-Nummer unten rechts klicken. Danach wird eine Verbindung mit dem Server von cgicorner.ch hergestellt. Dazu ist eine Internet-Verbindung notwendig.

Es wird nur die Versionsnummer sowie das letzte Änderungsdatum an den Server von cgicorner.ch übermittelt. cgicorner.ch garantiert, dass keine weiteren Konfigurationseinstellungen oder Benutzerdaten gesendet werden. Der Browser übermittelt möglicherweise noch den Referer, der mögliche Informationen über den Einsatzort liefert. Wenn Sie dies nicht möchten, installieren Sie eine Personal-Firewall, welcher die Referer-Informationen blockiert oder kopieren Sie den Link in die Zwischenablage und fügen Sie ihn manuell in die Browser-Adressleiste ein.

Als zweite Möglichkeit steht unter http://www.cgicorner.ch/cgi-bin/jsnews/jsnews.cgi ein Newsletter zur Verfügung. Nach der Anmeldung werden Sie über neue Versionen ihrer gewählten jsStyle-Produkte bequem per Mail informiert.

4. Templates

Für die einzelnen Templates stehen diverse Tags zur Verfügung, um spezielle Felder einzufügen. Es wird dringend empfohlen, ein bestehendes Template zu editieren, anstatt von Grund auf ein neues zu erstellen.

4.1. Übersichtseite

In der Inserate-Übersicht werden alle validierten Inserate angezeigt. Dabei stehen folgende Spezial-Tags zur Verfügung:
<!--SYSTEMMESSAGE-->System-Nachricht mit den Meldungstexten aus der Administrationsoberfläche
<!--cat-->ID der gewählten Kategorie
<!--catname-->Name der gewählten Kategorie
<!--CGIURL-->URL zum CGI-Script
<!--numAds-->Anzahl (validierte) Inserate in der aktuellen Kategorie
<!--prevLink:zurück-->Fügt einen Link mit dem Text "zurück" ein, wenn vorherige Inserate vorhanden sind (zurück kann durch einen anderen Text oder ein Bild ersetzt werden).
<!--nextLink:weiter-->Fügt einen Link mit dem Text "weiter" ein, wenn zusätzliche Inserate vorhanden sind (weiter kann durch einen anderen Text oder ein Bild ersetzt werden).
<!--directlink:2§css§[ § ] §... -->Fügt Links zu direkten Seite ein, z.B. "[1] ... [5] [6] [7] [8] [9] ... [58]". Die Definition des aussehens erfolgt durch mehrere durch § getrennte Parameter:
  1. Anzahl Seiten, die vor und nach der aktuellen Seite angezeigt werden sollen (erste und letzte Seite immer sichtbar). Im Beispiel wäre der Besucher auf Seite 7 und hätte 2 definiert (somit wird 5 und 6 vorher und 8 und 9 nachher dargestellt). Um alle Seiten anzuzeigen kann beispielsweise 9999 definiert werden.
  2. CSS-Klasse für Links (optional; hier "css" )
  3. Prefix: Text, der vor jeder Seitenzahl angefügt wird ("[ ")
  4. Suffix: Text der nach jeder Seitenzahl angefügt wird (" ] ")
  5. Trenntext, der zwischen der Seite 1 und erster anzuzeigender Seite gemäss aktueller Position und letzter anzuzeigender Seite gemäss aktueller Position und letzter Seite gemäss Datenbank eingefügt wird ("...")
<!--includeFile:myfile.dat-->Fügt die Datei myfile.dat 1:1 in das HTML-Template ein.
<!--ifSearch:Text-->Gibt "Text" aus, wenn eine Suche ausgeführt wurde.
<!--srchString-->Gibt den Suchstring aus, nachdem gesucht wurde (z.B. 'price'<1000, 'title' enthält 'test').


Für die Auflistung der Inserate gibt es noch spezielle Tags:
<!--startList-->Startet den Inserate-Bereich
<!--endList-->Schliesst den Inserate-Bereich ab


Jede Zeile innerhalb dieser zwei Tags wird für jedes Inserat wiederholt. In diesem Bereich stehen auch spezielle Tags zur Verfügung:
<!--cat-->ID der gewählten Kategorie
<!--catname-->Name der gewählten Kategorie
<!--field:image-->
<!--field:image0-->
bis
<!--field:image999-->
zeigt das Bild an, sofern vorhanden.
Optionale Parameter sind möglich, z.B. <!--field:image: width="300"--> (Bild wird mit einer Breite von 300 Pixel dargestellt). Wichtig ist das Leerzeichen nach dem zweiten Doppelpunkt!
<!--field:timage-->
<!--field:timage0-->
bis
<!--field:timage999-->
zeigt das Thumbnail an, sofern vorhanden (nur JPGs).
Optionale Parameter sind möglich, z.B. <!--field:timage: width="300"--> (Bild wird mit einer Breite von 300 Pixel dargestellt). Wichtig ist das Leerzeichen nach dem zweiten Doppelpunkt!
<!--field:rimage-->
<!--field:rimage0-->
bis
<!--field:rimage999-->
zeigt den Dateiname des Bildes ohne Pfadangabe
<!--field:rtimage-->
<!--field:rtimage0-->
bis
<!--field:rtimage999-->
zeigt den Dateiname des Thumbnails ohne Pfadangabe
<!--ifImage:Bild vorhanden-->zeigt den Text "Bild vorhanden" an, wenn ein Inserat zu diesem Bild vorhanden ist (Text kann abgeändert oder durch ein Bild ersetzt werden).
<!--field:file-->
<!--field:file0-->
bis
<!--field:file999-->
zeigt den Dateinamen einer hochgeladenen Datei an, sofern Uploads erlaubt (relativ zum Marketimages-Verzeichnis)
<!--field:feldname-->zeigt den Inhalt des Feldes "feldname" an. name kann durch beliebige Feldnamen ersetzt werden. Wird nach dem Feldnamen nochmals ein Doppelpunkt angegeben und dann eine Zahl, wird der Text auf diese Anzahl Zeichen beschränkt (z.B. in Inserateübersicht sinnvoll): <!--field:feldname:100--> beschränkt Text auf 100 Zeichen.Wird nochmals ein Doppelpunkt angegeben, kann ein Trennzeichen definiert werden. Dabei wird vor dem letzten Trennzeichen abgeschnitten, das Maximum aber nie überschritten. Beispiel: <!--field:feldname:100: --> trennt beim letzten Leerzeichen vor Überschreitung der 100 Zeichen Limite. Als zusätzlicher Parameter kann noch ein Suchen und Ersetzen String übergeben werden: <!--field:feldname:9999:§e§i--> beschränkt das Feld beispielsweise auf 9999 Zeichen und ersetzt alle "e" durch "i". Zeilenumbrüche können mit folgendem Befehl durch Leerzeichen ersetzt werden: <!--field:feldname:9999:§<br />§ -->
<!--detailurl-->URL zur Detailansicht des Inserats
<!--After[2]:text-->Gibt "text" nur nach jedem 2. Datensatz aus. Anzahl und "text" sind frei wählbar.


Als Letztes gibt es noch eine Möglichkeit, bestimmten Text nur dann anzuzeigen, wenn eine Bedinung erfüllt ist. Der Aufbau dazu sieht so aus: <!--if:feldname=wert§text-->. Beispielsweise kann ein Text nur unter bestimmten Voraussetzungen angezeigt werden:
<!--if:test=§Im Feld test befindet sich leider kein Text :(-->
Diese Abfrage lässt sich auch mit anderen Operanden durchführen:

<!--if:feldname!wert§text--> Feldname entspricht NICHT Wert
<!--if:feldname<wert§text--> Feldname ist kleiner als Wert
<!--if:feldname>wert§text--> Feldname ist grösser als Wert

4.2. Detailansicht

In der Detailansicht wird ein Inserat angezeigt. Dabei stehen folgende Spezial-Tags zur Verfügung:
<!--SYSTEMMESSAGE-->System-Nachricht mit den Meldungstexten aus der Administrationsoberfläche
<!--cat-->ID der gewählten Kategorie
<!--catname-->Name der gewählten Kategorie
<!--id-->ID des aktuellen Inserats
<!--CGIURL-->URL zum CGI-Script
<!--field:image-->
<!--field:image0-->
bis
<!--field:image999-->
zeigt das Bild an, sofern vorhanden.
Optionale Parameter sind möglich, z.B. <!--field:image: width="300"--> (Bild wird mit einer Breite von 300 Pixel dargestellt). Wichtig ist das Leerzeichen nach dem zweiten Doppelpunkt!
<!--field:timage-->
<!--field:timage0-->
bis
<!--field:timage999-->
zeigt das Thumbail an, sofern vorhanden (nur JPGs).
Optionale Parameter sind möglich, z.B. <!--field:timage: width="300"--> (Bild wird mit einer Breite von 300 Pixel dargestellt). Wichtig ist das Leerzeichen nach dem zweiten Doppelpunkt!
<!--field:rimage-->
<!--field:rimage0-->
bis
<!--field:rimage999-->
zeigt den Dateiname des Bildes ohne Pfadangabe
<!--field:rtimage-->
<!--field:rtimage0-->
bis
<!--field:rtimage999-->
zeigt den Dateiname des Thumbnails ohne Pfadangabe
<!--field:file-->
<!--field:file0-->
bis
<!--field:file999-->
zeigt den Dateinamen einer hochgeladenen Datei an, sofern Uploads erlaubt (relativ zum Marketimages-Verzeichnis)
<!--field:feldname-->zeigt den Inhalt des Feldes "feldname" an. name kann durch beliebige Feldnamen ersetzt werden. Wird nach dem Feldnamen nochmals ein Doppelpunkt angegeben und dann eine Zahl, wird der Text auf diese Anzahl Zeichen beschränkt (z.B. in Inserateübersicht sinnvoll): <!--field:feldname:100--> beschränkt Text auf 100 Zeichen.Wird nochmals ein Doppelpunkt angegeben, kann ein Trennzeichen definiert werden. Dabei wird vor dem letzten Trennzeichen abgeschnitten, das Maximum aber nie überschritten. Beispiel: <!--field:feldname:100: --> trennt beim letzten Leerzeichen vor Überschreitung der 100 Zeichen Limite. Als zusätzlicher Parameter kann noch ein Suchen und Ersetzen String übergeben werden: <!--field:feldname:9999:§e§i--> beschränkt das Feld beispielsweise auf 9999 Zeichen und ersetzt alle "e" durch "i". Zeilenumbrüche können mit folgendem Befehl durch Leerzeichen ersetzt werden: <!--field:feldname:9999:§<br />§ -->
<!--contact-->URL zum Kontaktformular
<!--recommend-->URL zum Weiterempfehlen-Formular
<!--editad-->URL zum editieren des Eintrages.
<!--mainurl-->URL zur Übersicht
<!--includeFile:myfile.dat-->Fügt die Datei myfile.dat 1:1 in das HTML-Template ein.
<!--field:counter-->Zeigt an, wie oft diese Anzeige schon dargestellt wurde. Counter muss im Adminbereich unter "Kategorie" pro Kategorie aktiviert werden.


Als Letztes gibt es noch eine Möglichkeit, bestimmten Text nur dann anzuzeigen, wenn eine Bedinung erfüllt ist. Der Aufbau dazu sieht so aus: <!--if:feldname=wert§text-->. Beispielsweise kann ein Text nur unter bestimmten Voraussetzungen angezeigt werden:
<!--if:test=§Im Feld test befindet sich leider kein Text :(-->
Diese Abfrage lässt sich auch mit anderen Operanden durchführen:

<!--if:feldname!wert§text--> Feldname entspricht NICHT Wert
<!--if:feldname<wert§text--> Feldname ist kleiner als Wert
<!--if:feldname>wert§text--> Feldname ist grösser als Wert

4.3. Kontaktformular und -mail

Das Kontaktformular dient zur Kontaktaufnahme, ohne dass die Mailadresse des Inserenten veröffentlicht werden muss. Dabei stehen folgende Spezial-Tags zur Verfügung:

<!--SYSTEMMESSAGE-->System-Nachricht mit den Meldungstexten aus der Administrationsoberfläche
<!--CGIURL-->URL zum CGI-Script
<!--cat-->ID der gewählten Kategorie
<!--detailurl-->URL zur Detailansicht des Inserats
<!--catname-->Name der gewählten Kategorie
<!--field:feldname-->zeigt den Inhalt des Feldes "feldname" an. name kann durch beliebige Feldnamen ersetzt werden. Wird nach dem Feldnamen nochmals ein Doppelpunkt angegeben und dann eine Zahl, wird der Text auf diese Anzahl Zeichen beschränkt (z.B. in Inserateübersicht sinnvoll): <!--field:feldname:100--> beschränkt Text auf 100 Zeichen.Wird nochmals ein Doppelpunkt angegeben, kann ein Trennzeichen definiert werden. Dabei wird vor dem letzten Trennzeichen abgeschnitten, das Maximum aber nie überschritten. Beispiel: <!--field:feldname:100: --> trennt beim letzten Leerzeichen vor Überschreitung der 100 Zeichen Limite. Als zusätzlicher Parameter kann noch ein Suchen und Ersetzen String übergeben werden: <!--field:feldname:9999:§e§i--> beschränkt das Feld beispielsweise auf 9999 Zeichen und ersetzt alle "e" durch "i". Zeilenumbrüche können mit folgendem Befehl durch Leerzeichen ersetzt werden: <!--field:feldname:9999:§<br />§ -->
<!--form:feldname-->Fügt den Wert des Formularwertes "feldname" ein.
<!--date-->Datum im Mailformat (für Headerzeile im Mail)
<!--messageid-->Message-ID (für Headerzeile im Mail)
<!--boundard-->Trennzeichen bei E-Mails mit Dateianhang
<!--includeFile:myfile.dat-->Fügt die Datei myfile.dat 1:1 in das HTML-Template ein.
<!--scid-->Secure-Code ID, welche bei aktiviertem Secure-Code als verstecktes Feld eingefügt werden muss.

Die Kontaktaufnahme besteht aus zwei Templates: dem HTML-Formular sowie dem Mail-Template. Die Felder "date", "messageid" und "boundary" sind nur im Mailtemplate verfügbar, includeFile nur im HTLM-Formular.

Die Felder name. email und subject sind Pflichtfelder, welche zwingend ausgefüllt werden müssen.

FORM bezieht sich immer auf Formulardaten, FIELD auf Feldern aus der Datenbank.

4.3.1. Kontaktformular mit Dateianhang

Bei Bedarf ist es auch möglich, dass der Absender eine oder mehrere Datei(en) mit dem Kontaktformular mitsenden kann. In diesem Fall muss sowohl das Kontaktformular als auch das Mailtemplate etwas umgebaut werden.

Das Formular muss noch um den enctype ergänzt werden. Der Form-Tag sieht dann so aus:
<form action="<!--CGIURL-->" method="post" enctype="multipart/form-data">
Der Dateiupload erfolgt mit einem Feld vom Typ "file" und muss zwingend mit FILE_ beginnen, also z.B.
<input type="file" name="FILE_file" />

Das Mail-Template muss im MIME-Standard aufgebaut sein. Für die Kennzeichnung des MIME-Parts existiert ein Tag <!--boundary-->. Ein E-Mail kann somit in etwa so aussehen:

From: "<!--formh:name-->" <<!--formh:email-->>
To: "<!--fieldh:name-->" <<!--fieldh:email-->>
Date: <!--date-->
Message-Id: <!--messageid-->
Subject: <!--formh:subject-->
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="<!--boundary-->"

--<!--boundary-->
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

Eigentlicher Mailinhalt inkl. Feldinhalten: <!--field:title-->

<!--form:FILE_file-->
<!--form:FILE_file2-->
--<!--boundary-->--

Mehrere Dateianhänge können einfach durch die Nennung der Feldnamen (eine pro Zeile) angefügt werden.

4.4. Hinzufügen Formular

Das Hinzufügen Formular dient auch zum editieren von Inseraten. Dabei sind folgende zusätzliche Felder erlaubt:
<!--SYSTEMMESSAGE-->System-Nachricht mit den Meldungstexten aus der Administrationsoberfläche
<!--CGIURL-->URL zum CGI-Script
<!--cat-->ID der gewählten Kategorie
<!--catname-->Name der gewählten Kategorie
<!--imgpath-->Browser-Pfad zum Bilderverzeichnis
SRV_image (Feldname)Verwendet angegebenes Bild aus dem Bilderverzeichnis
SRV_file (Feldname)Verwendet angegebenes Datei aus dem Bilderverzeichnis
<!--field:feldname-->zeigt den Inhalt des Feldes "feldname" an. name kann durch beliebige Feldnamen ersetzt werden. Wird nach dem Feldnamen nochmals ein Doppelpunkt angegeben und dann eine Zahl, wird der Text auf diese Anzahl Zeichen beschränkt (z.B. in Inserateübersicht sinnvoll): <!--field:feldname:100--> beschränkt Text auf 100 Zeichen.Wird nochmals ein Doppelpunkt angegeben, kann ein Trennzeichen definiert werden. Dabei wird vor dem letzten Trennzeichen abgeschnitten, das Maximum aber nie überschritten. Beispiel: <!--field:feldname:100: --> trennt beim letzten Leerzeichen vor Überschreitung der 100 Zeichen Limite. Als zusätzlicher Parameter kann noch ein Suchen und Ersetzen String übergeben werden: <!--field:feldname:9999:§e§i--> beschränkt das Feld beispielsweise auf 9999 Zeichen und ersetzt alle "e" durch "i". Zeilenumbrüche können mit folgendem Befehl durch Leerzeichen ersetzt werden: <!--field:feldname:9999:§<br />§ -->
<!--includeFile:myfile.dat-->Fügt die Datei myfile.dat 1:1 in das HTML-Template ein.
<!--form:feldname-->Fügt den Wert des Formularwertes "feldname" ein.
<!--fehler:feldname-->Gibt den Felderbezogenen Fehlertext aus (sofern Fehler vorhanden)
<!--scid-->Secure-Code ID, welche bei aktiviertem Secure-Code als verstecktes Feld eingefügt werden muss.


Text innerhalb der <!--editad   editad--> Tags wird nur dann angezeigt, wenn das Formular zum Editieren eines Formulars angezeigt wird (und nicht beim Erfassen eines neuen Inserats). So kann beispielsweise ein Link zum Löschen eines Inserats nur beim Editieren angezeigt werden.

Ebenfalls gibt es noch eine Möglichkeit, bestimmten Text nur dann anzuzeigen, wenn eine Bedinung erfüllt ist. Der Aufbau dazu sieht so aus: <!--if:feldname=wert§text-->. Beispielsweise kann so ein Radio-Button vorselektioniert werden:
<INPUT TYPE=radio NAME=test VALUE=1<!--if:test=1§ SELECTED-->>
Diese Abfrage lässt sich auch mit anderen Operanden durchführen:

<!--if:feldname!wert§text--> Feldname entspricht NICHT Wert
<!--if:feldname<wert§text--> Feldname ist kleiner als Wert
<!--if:feldname>wert§text--> Feldname ist grösser als Wert

HTML-Tags in Feldern werden in derr Regel als solche dargestellt (z.B. Ausgabe "<b>test</b>" und NICHT Ausgabe des Textes "test" in fetter Schrift). Wenn HTML-Tags als solche interpretiert werden sollen, muss ein verstecktes Feld "html_feldname" mit dem Wert "true") erstellt werden z.B. <input type="hidden" name="html_myfield" value="true"/> interpretiert HTML-Tags im Feld "myfield".

4.5. Such Formular

Das Suchformular dient zum Suchen von Inseraten. Dabei sind folgende zusätzliche Felder erlaubt:
<!--CGIURL-->URL zum CGI-Script
<!--cat-->ID der gewählten Kategorie
<!--catname-->Name der gewählten Kategorie
<!--includeFile:myfile.dat-->Fügt die Datei myfile.dat 1:1 in das HTML-Template ein.


Die Eingabefelder im Suchformular müssen den Feldnamen beinhalten. Um Beispielsweise im Feld "myfield" zu suchen, muss das Eingabeformular <input type="text" name="myfield"/> heissen. In Textfeldern kann mit Perl Regular Expressions gesucht werden (siehe srchalpha.htm). In numerischen Feldern kann mit Operatoren gesucht werden, z.B. "<10" (srchnum.htm). Ebenfalls ist es in numerischen Feldern möglich, zwei Eingabefelder mit VON-BIS darzustellen: von <input type="text" name="myfieldVON"/> bis <input type="text" name="myfieldBIS"/>. Dabei kann in der Suchanfrage dann natürlich auch nur ein Feld ausgefüllt werden, z.B. in VON den Wert 9, BIS leer zeigt alle Suchergebnisse mit einem Wert ">=9".

4.6. Editieren Formular (Passworteingabe/-erinnerung)

Das Editieren-Formular (Passwort) dient zur Eingabe des Passwortes, damit eine Anzeige editiert werden kann. Im Falle eines vergessenen Passwortes existiert die Möglichkeit, das Passwort mit Hilfe eines Mails zu ändern.
<!--CGIURL-->URL zum CGI-Script
<!--cat-->ID der gewählten Kategorie
<!--catname-->Name der gewählten Kategorie
<!--field:feldname-->zeigt den Inhalt des Feldes "feldname" an. name kann durch beliebige Feldnamen ersetzt werden. Wird nach dem Feldnamen nochmals ein Doppelpunkt angegeben und dann eine Zahl, wird der Text auf diese Anzahl Zeichen beschränkt (z.B. in Inserateübersicht sinnvoll): <!--field:feldname:100--> beschränkt Text auf 100 Zeichen.Wird nochmals ein Doppelpunkt angegeben, kann ein Trennzeichen definiert werden. Dabei wird vor dem letzten Trennzeichen abgeschnitten, das Maximum aber nie überschritten. Beispiel: <!--field:feldname:100: --> trennt beim letzten Leerzeichen vor Überschreitung der 100 Zeichen Limite. Als zusätzlicher Parameter kann noch ein Suchen und Ersetzen String übergeben werden: <!--field:feldname:9999:§e§i--> beschränkt das Feld beispielsweise auf 9999 Zeichen und ersetzt alle "e" durch "i". Zeilenumbrüche können mit folgendem Befehl durch Leerzeichen ersetzt werden: <!--field:feldname:9999:§<br />§ -->
<!--form:feldname-->Fügt den Wert des Formular-Parameters "feldname" ein.
<!--includeFile:myfile.dat-->Fügt die Datei myfile.dat 1:1 in das HTML-Template ein.


4.7. Sicherheitshinweise / Spam-Missbrauch

Zeilenumbrüche in Header-Feldern von Mails ermöglichen Spammern die Manipulation der Header-Informationen und somit die Anpassung von Empfängeradressen, Betreff bis hin zum eigentlichen Mailinhalt. Dadurch können Scripte zum Spam-Versand missbraucht werden.

jsMarket bietet die Möglichkeit, Zeilenumbrüche bei bestimmten Feldern automatisch zu entfernen und somit einen effizienten Schutz gegen diese Missbrauchsmöglichkeit. Dies lässt sich in den jeweiligen Templates mit der Verwendung von "fieldh" statt "field" resp. "formh" statt "form" erreichen.

Aus diesem Grund sollten bei allen Mail-Templates im Header-Bereich (vor der ersten Leerzeile) für Feld-Platzhalter die sicheren Tags "fieldh" und "formh" verwendet werden!

Unsicheres Weiterempfehlungsformular (recommend.mail)

From: "<!--form:sendname-->" <<!--form:sendmail-->>
To: "<!--form:rcptname-->" <<!--form:rcptmail-->>
Date: <!--date-->
Message-Id: <!--messageid-->
Subject: <!--form:subject-->

Sichere Variante:
From: "<!--formh:sendname-->" <<!--formh:sendmail-->>
To: "<!--formh:rcptname-->" <<!--formh:rcptmail-->>
Date: <!--date-->
Message-Id: <!--messageid-->
Subject: <!--formh:subject-->

Die "formh" und "fieldh" Felder können in allen Templates (auch bei Formularen) verwendet werden und sind gleich anzuwenden wie "form" und "field". Einziger Unterschied besteht in der Enfernung der Zeilenumbrüche bei den "h"-Varianten.

4.8. Secure-Code Spamschutz

Der Secure-Code ist ein fünfstelliger Code in einer Grafik, welcher optional für jede Inserate-Erfassung und/oder jeden Mailversand (Kontakt oder Weiterempfehlen) in ein Textfeld eingetragen werden muss. Der Zahlencode in der Grafik kann von automatisierten Spam-Scripts nicht ausgelesen werden und bietet so einen effizienten Schutz gegen einen automatisierten Mailversand und "Müll-Inserate". Gegen manuelle Werbeeintragungen (also durch einen natürlichen Mensch, der den Code lesen kann) hilft der Secure-Code hingegen nicht.

Der Secure-Code kann nicht pro Kategorie sondern nur pro jsMarket-Installation aktiviert oder deaktiviert werden, d.h. es müssen stets alle Kategorien angepasst werden. Ein Secure-Code in nur einem Teilbereich des Marktplatzes macht aber auch keinen Sinn, da Spammer sind ansonsten einfach auf die ungeschützten Kategorien konzentrieren würden.

Damit der Secure-Code benutzt werden kann sind einige Voraussetzungen notwendig:

Damit das Eingabefeld für den Secure-Code nur bei aktivierter Funktion angezeigt wird, müssen die entsprechenden Zeilen den Tag <!--scyes--> beinhalten. Dies bewirkt, dass die Zeile bei deaktiviertem Secure-Code komplett unterdrückt wird. Eine Secure-Code Zeile im Template, welche nur dann angezeigt wird, wenn diese auch aktiviert ist, sieht also so aus:

<!--scyes--><input type="text" name="seccode"> <img src="<!--CGIURL-->?action=seccode&amp;id=<!--scid-->"/>

5. Felder

5.1. Pflichtfelder

Folgende Felder müssen in jedem Formular enthalten sein:

5.2. Verbotene Feldnamen

Folgende Feldnamen werden für interne Zwecke gebraucht und dürfen nicht verwendet werden:

5.3. Bilder

Es können bis zu elf Bilder via Browser auf den Server geladen werden. Dies ist nur mit den Feldern "image" sowie "image0" bis "image9" möglich.

Formulare mit Bildern müssen mit der POST-Methode und dem ENCTYPE "multipart/form-data" übermittelt werden. Die Eingabefelder müssen den Typ "file" haben.


Copyright © 2011 by Jürg Sommer, scripts@cgicorner.ch
http://www.cgicorner.ch
Letzte Änderung: 2. Juni 2011