Blog



Support-Flatrate für eforia

Es ist soweit. Meine Elternzeit ist vorüber. Kurz und knapp: Ich bin jetzt wieder voll da, genauso wie eforia. Meinen Schätzungen zufolge dürften mittlerweile eine deutlich 4-stellige Anzahl Internetseiten in Deutschland mit eforia "laufen". Mir ist eine Agentur bekannt, die alleine 120 Kunden mit ewm betreut.

Support

Ich werde zwar öfter gelobt, wie schnell im Forum geantwortet wird, aber manche Dinge ließen sich direkt in wenigen Minuten erledigen, und im Forum ist nach 2 Tagen Ping-Pong das Problem immer noch nicht eingekreist.

Hier habe ich nach einer Lösung gesucht, wie eine solche Unterstützung für Anwender aussehen kann. Herausgekommen ist die eforia Support-Flatrate. Für einen geringen monatlichen Festpreis (49,99 EUR zzgl. MwSt.) stehe ich zur Verfügung und erledige Probleme direkt. Der Umfang ist so bemessen, dass es im Normalfall reichen sollte um Systeme zuverlässig zu betreuen. Sollte das doch nicht der Fall sein, werden zusätzliche Zeiten zu einem sehr fairen Satz abgerechnet.

Mein Angebot ist gerade für Agenturen sehr interessant, die selbst mehrere Kunden mit eforia Installationen betreuen. Aber natürlich auch für Firmen, die einen gewissen Mindestanspruch an ihre Website haben.

Für Details zur eforia-Support-Flatrate klicken Sie bitte hier.

PS: Ich biete auch generelle Beratung zu Internet-Themen und Suchmaschinenoptimierung. Dazu finden Sie alles auf meiner neuen Homepage: www.klier.net.

Dieser Artikel wurde veröffentlicht am 02.03.2009 um 09:00 Uhr. Noch kein Kommentar.

Handbücher und Schachteln zu verschenken

Letzte Woche hat Hermann (tdb) beim Räumen eines Kellers noch ein paar Kartons mit eforia Drucksachen gefunden. Die durfte ich nun am Montag abholen, weiß aber ehrlich gesagt auch nicht so recht, was ich damit machen soll. Es sind Handbücher, Schnellstart-Anleitungen, Schachteln und auch ein paar Flyer. Alles für die 4er Version.

Evtl. wäre es ja für Agenturen interessant, so etwas an Kunden weitergeben zu können, wenn man ihre Seite mit eforia macht. Wer Bedarf hat, kann sich einfach melden. Ich verschicke gegen Erstattung der realen Verpackungs und Versandkosten. Selbstabholung wäre nur nach Terminabsprache möglich, die Sachen lagern derzeit in meiner privaten Garage. Das Angebot gilt, solange Vorrat reicht, wobei ich mal davon ausgehe, dass noch genug da ist. Eine 3-stellige Anzahl von Allem dürfte es auf jeden Fall noch sein.

Wer was will, einfach Mail an horst@klier.net schreiben.

Dieser Artikel wurde veröffentlicht am 25.02.2009 um 11:13 Uhr. Noch kein Kommentar.

Update ewm5

Gerade habe ich mal wieder ein Update für den ewm5 abgestellt. Enthalten ist im Prinzip das, was ich hier im Blog schon angesprochen hatte. Der Cache hat sich bei meinen Testsystemen nun seit 2,5 Monaten bewährt. Außerdem ist eine neue Version des Captcha-Binaries für Linux dabei und eine neue Version des Baseman. Ich bin nämlich auf einen neuen Server umgezogen und dort läuft die neueste tdbengine, mit der die Vorversion Probleme hatte. Auch das Captcha verlangte nach der Installation einer Shared Library, was ich im abgewöhnt, indem ich diese einfach mit "rein" kompiliert habe (danke Sven, für den gcc-Bugfix).

Alles recht unspektakulär.

Übrigens: Weil ich immer wieder gefragt werde, wann die 5er offiziell wird. Es gibt in der tdbengine ein Problem, was mit bestimmten Web-Space Konfigurationen auftritt. Genau genommen ist das ein sehr tief liegendes Linux-Problem, aber es wirkt sich eben so aus, dass die tdbengine dann unter Umständen keine Dateien "sieht". Die Konfiguration ist selten, kommt aber vor. Für den ewm hat damals Serg eine Spezialversion gemacht, die das Problem einfach umschifft. Diese Funktionalität hat aber keinen Einzug in die normale Entwicklung gefunden. Die aktuelle tdbengine enthält den Fix also nicht, der 5er ewm benötigt aber diese. Lange Rede, kurzer Sinn: Sobald das Problem in der tdbengine gelöst ist, wird die 5er Version offiziell.


Dieser Artikel wurde veröffentlicht am 12.02.2009 um 20:29 Uhr. 4 Kommentare.

Mehr Cache für ewm5

ewm5 hat nun eine neue Cachefunktion. Im Prinzip ganz simpel: Es gibt ein Flag Cacheable. Dieses wird bei jeder neuen Seite auf 1 gesetzt, beim Speichern dann aber geprüft ob Tags benutzt werden, die ein Caching verhindern. Beispielsweise wenn man if-Abfragen benutzt oder - ganz einfach - die Uhrzeit ausgibt. Man kann aber auch bewusst das Flag setzen und löschen. Es versteckt sich unter "Statische Seiten", das ist etwas unglücklich, aber da war auf die Schnelle noch Platz. 8-)

Was dann mit dem Cache passiert ist wieder eine andere Sache. Konkret habe ich overview erweitert, dass dieses Datensätze mit Cachable-Flag intern zwischenspeichert. Wenn hunderte von Datensätzen auf einmal ausgegeben werden sollen, spart das eine Menge Last. Konkret kommt das bei einem Blog vor, wenn man das gleiche Tag oft benutzt und viel schreibt. Ich habe da ein solches Beispiel, dass derzeit 193 Seiten verarbeitet. Nachdem in so einer Übersicht die Texte nicht unbedingt direkt angezeigt, sondern beispielsweise mit simple gekürzt werden, kostet das doppelt Zeit. Overview cached deswegen den kompletten Block pro Datensatz und Template. Selbstverständlich wird anhand Zeitstempel dafür gesorgt, dass die Daten auch aktuell sind.

In der cache.ini kann man außerdem ein maximales Alter in Tagen für die Caches angeben:
[overview]
max_age=50000


Und weil ich sowieso schon an der Datenbank war, habe ich ein Feld aufgenommen, was die Textlänge in Zeichen speichert. Dabei werden HTML-Elemente nicht mitgerechnet sondern nur der reine Text inkl. Satz- und Leerzeichen. Mittels {chars} läßt sich der Wert ausgeben. Vielleicht hat ja der eine oder andere, der bei VG Wort Mitglied ist, dafür Verwendung. 8-)

Bevor ich ein Update abstelle, will ich auch noch für den Tag {template} eine Cache-Funktion einbauen. Ich nutze das gerne um feste Schnippsel zu hinterlegen und eine Website damit Modular aufzubauen. Da kommt es oft vor, dass eigentlich statischer Inhalt immer wieder neu berechnet wird. Beispielsweise bei Leben ohne Diät [Link entfernt, weil Linkziel leider nicht mehr verfügbar] die Top-Artikel. Das sind jedesmal ein paar Sekunden unnötige Rechenzeit. Das ist im Moment in Planung, aber ich werde nochmal darüber schlafen, ob sich nicht eine bessere Lösung finden lässt. Eine Erweiterung nur für einen einzigen Fall macht auch nicht soviel Sinn.


Dieser Artikel wurde veröffentlicht am 07.01.2009 um 19:59 Uhr. Noch kein Kommentar.

Tipp: CMS-Umzug

Ein kleiner Tipp am Rande, weil es bei mir gerade anstand. Ich hatte 2 laufende ewms, beide mit Grafiken und Dateien gut befüllt. Nun sollten die Inhalte eines der Systeme in das andere integriert werden. Alle Bilder und Dateien neu hochzuladen, ist aber eine Menge Arbeit.  Also habe ich mich entschlossen, das direkt auf Datenbankebene zu tun.

Vorgehensweise am Beispiel der Datenbank für Dateien (cms_files):
  • Bei beiden Systemen die Tabelle exportieren. Das erfolgt mit dem Baseman. Format SLK, alle Felder für den Export anwählen.
  • Beide Tabellen werden per Tabellenkalkulation geöffnet und per Copy&Paste in eine gemeinsame Datei kopiert.
    ACHTUNG: Beim Import werden die laufenden Nummern neu vergeben, die internen Verlinkungen (erste Spalte) müssen entsprechend angepasst werden
  • Neue Tabelle als CSV speichern.
    Name cms_files
    Trennzeichen ; und Text in "
    Auf Darstellung des Datums achten! Wenn kein Datum vorhanden (bei cms_gfx) geht auch Export als XLS-Format
  • Im Baseman die alte Tabelle löschen
  • Neue Tabelle per Baseman importieren
  • Importierte Tabelle von database nach sysbase verschieben
    Beispiel: mv ../database/cms_* ../sysbase/
  • Orginal sysdef-Definitionen wieder herstellen
    Beispiel: cp ../../anderes_ewm_system/sysdef/cms_files.def ../sysdef/
  • Definition aus workdef löschen
    Beispiel: rm ../workdef/cms_files.def
  • Tabelle im Baseman restrukturieren
  • Selbstverständlich müssen noch die Dateien aus dem Verzeichnis files oder gfx kopiert werden. 
Man sollte schon genau wissen was man tut. Ein Backup vorher schadet auch nicht. 8-)


Dieser Artikel wurde veröffentlicht am 02.01.2009 um 17:17 Uhr. Noch kein Kommentar.

Update

Ich habe wieder mal ein kleines Update abgestellt. Diesmal ist das schon angesprochene execprog dabei. Außerdem kann comments nun die letzten Kommentare anzeigen. Dazu einfach {execmacro="comments" param="last=5"} um die letzten 5 Kommentare auszugeben. Benutzt wird dazu eine Vorlage
comment/last-comment
<li><span class="small"><a href="{link="lfd:{PageLfd}"}#message{lfd}" class="small">{Name}</a>
bei <a href="{link="lfd:{PageLfd}"}" class="small">{PageTitle}</a>
({SDate} {STime} Uhr)</small></li>

Der Rest der Neuerungen sind eher Kleinigkeiten. Man kann nun z.B. angeben, dass statische Seiten nicht überschrieben werden, wenn sich nichts ändern würde. Dazu gibt man in cms.ini in SYSTEM
keepoldstatic=90
an. Der Sinn ist schlicht, dass der Webserver das Dateidatum schließlich auch überträgt. Der Wert gibt die Zeit in Tagen an, nach der die Seite auf jeden Fall wieder überschrieben wird. Was das soll, können vermutlich nur SEOs halbwegs verstehen.

Ebenso kann nun ein Timeout für cms_rsp angegeben werden. Der Default-Wert sind 30 Sekunden, das ist auch, wie sich cms_rsp bisher Verhalten hat. Der Grund sind schlicht Provider wie 1&1, bei denen ein Script nur begrenzt laufen darf. Wenn man eine Website mit 1000 einzelnen Seiten hat, die alle um 00:00 Uhr aufgefrischt werden sollen, reicht das schlicht nicht. Deswegen bricht cms_rsp nach Ablauf des Timeouts ab und macht beim nächsten Aufruf weiter.
Der Wert wird ebenfalls in cms.ini in SYSTEM angegeben:
refreshtimeout=150

Feedpeek kann nun auch den content und die description von Feeds ausgeben.

Die anderen Neuerungen sind nicht weiter der Rede wert. 8-)




Dieser Artikel wurde veröffentlicht am 01.12.2008 um 11:02 Uhr. 2 Kommentare.

Execprog

Irgendwie ist es manchmal zu aufwendig, für kleine Aufgaben extra ein eigenes Modul zu schreiben. Mit der if-Abfrage alleine kommt man aber auch nicht weiter. Also dachte ich zuerst, ich integriere Tags um Variablen zu definieren und Schleifen zu ermöglichen. Aber so richtig Übersichtlich ist das nicht, außerdem wäre es alles andere als schnell. Da fiel mir eine sehr, sehr alte Funktion der tdbengine ein: Execprog. Damit wird ein Stück Quellcode zur Laufzeit übersetzt und ausgeführt. Darum dann flugs einen Tag gebastelt:

Beispiel:
{execprog}
var fhAusgabe : integer
fhAusgabe:=Rewrite('ramtext:out')
writeln(fhAusgabe,'hallo welt')
close(fhAusgabe)
{/execprog}


Nachdem man ja nicht direkt an der aktuellen Stelle ausgeben kann, benutze ich einfach ramtext:out. Alles was man in dem Mini-Progrämmchen dorthin ausgibt, wird nach Beendigung an der aktuellen Stelle eingefügt.

Mit Variablen muss man ein wenig aufpassen, man kann eforia-Eigene nämlich auch überschreiben. Insgesammt ist die Funktion sehr mächtig, man sollte also wissen was man tut. Bei Compiler-Fehlern im Programm wird das Problem angezeigt, man muss also nicht ganz "blind" arbeiten.

Wo ist nun der Sinn?
Beispielsweise kann man in einem RSS-Feed Tags ausgeben. Allerdings einzeln in einer besonderen Weise. Intern gespeichert werden die Tags aber in einem Feld. Das muß man also etwas "umbauen". Das geht dann so:
{execprog}
  var fhAusgabe : integer
  var cTags,cTemp : string
  cTags:=getfield(cms_web,'Tags')
  fhAusgabe:=Rewrite('ramtext:out',0)
  while cTags#'' do
    write(fhAusgabe,'<category><!--[CDATA[')
    if pos(' ',cTags)>0 then
      cTemp:=cTags[1,pos(' ',cTags)-1]
      cTags:=cTags[pos(' ',cTags)+1,255]
    else
      cTemp:=cTags
      cTags:=''
    end
    write(fhAusgabe,cTemp)
    writeln(fhAusgabe,']]--></category>')
  end
  close(fhAusgabe)
{/execprog}

Ein Nachteil sei noch erwähnt: Der Programmcode muss im Quelltextmodus eingegeben werden. Sonst stören HTML-Codes für Zeilenumbrüche oder Leerzeichen. Hier muss ich mal einen neuen Button im Editor einbauen, der das dann so macht wie jetzt die Javascript oder PHP-Bereiche. Allerdings hat das keine hohe Priorität, weil ich es hauptsächlich für Vorlagen verwenden werde.


Dieser Artikel wurde veröffentlicht am 19.11.2008 um 17:24 Uhr. 3 Kommentare.

simple - Einfach mächtig

Es gibt mal wieder ein neues Tag: simple. Wird ein beliebiger Codeblock mit {simple} und {/simple} umschlossen, so werden schlicht alle darin enthaltenen HTML und eforia-Tags entfernt. Übrig bleibt also der blanke Text. Soweit nicht wirklich sinnvoll, aber man kann noch ein paar Parameter mitgeben:
  • br=Code für Zeilenumbruch
  • graphic=Breite:Höhe:Ausrichtung
  • textlength=Maximale Textlänge
  • linelength=Maximale Zeilenlänge
  • hellip=Zeichen am Ende, falls Text gekürzt wurde
  • stripendbr Abschließende Zeilenumbrüche entfernen
Was soll das nun?

Beispielsweise macht
{[6]simple="graphic=108:108:left;textlength=250;hellip=&hellip;"}
{[7]main}
{[6]/simple}</a>
aus dem Hauptinhalt ein Textschnippsel von 250 Zeichen und fügt vorne die Grafik linksbündig an. Benutzt wird immer die erste Grafik, die im Text gefunden wird. Der main-Tag hat übrigens höhere Priorität, weil sonst simple nur das Tag selbst bearbeiten würde. Aber es soll sich ja um den Inhalt kümmern, nachdem main ersetzt ist.

Wenn man das nun mit Overview kompiniert, bekommt man eine schicke Übersichtsseite mit Bildern aus den Unterseiten und einem kurzem einblick in den Text. Wer das mal live sehen will, kann sich gerne die Startseite von Leben ohne Diät [Link entfernt, weil Linkziel leider nicht mehr verfügbar] ansehen.

Dort benutze ich auch eine zweite Variante für den wöchentlichen Newsletter. Dieser wird in einer HTML und reinen Text-Mail verschickt. Man weiß ja nie, was das Mail-Programm beim Empfänger anzeigen kann, deswegen ist mir die Textversion wichtig. Zum zusammenstellen benutze ich das:
* {title} ({date})<br />
&nbsp;&nbsp;{[6]simple="br=<br />&nbsp;&nbsp;;linelength=58;stripendbr"}{[7]main}{[6]/simple}<br />
&nbsp;&nbsp;{link="url:full;type:static;pos:{position}"}<br />
&nbsp;&nbsp;________________________________________________________<br />
<br />

Der Code wird wiederum innerhalb eines Overview-Blocks benutzt. Im Ergebnis erhalte ich den Inhalt auf 60 Zeichen lange Zeilen gekürzt, wobei die ersten beiden Zeichen 2 Leerzeichen zur Einrückung sind. Ich muss nur noch mit Copy&Paste das Resultat in den Newsletter-Editor übertragen. Etwas ähnliches mache ich auch für die HTML-Variante, aber das geht sogar ohne simple. 8-)


Dieser Artikel wurde veröffentlicht am 14.11.2008 um 17:13 Uhr. Noch kein Kommentar.

Cronjob für Scheduler anlegen

Ich habe gerade für einen Bekannten einen Cronjob auf einem 1&1-Server angelegt um den Scheduler aufzurufen. Weil ich gleich mal alles mit geschrieben habe, damit er es das nächste mal selber machen kann, dachte ich mir, ich kann es auch gleich hier reinstellen.

Voraussetzung ist ein SSH Zugang und als Client-Software PuTTY.

  • PuTTY starten

  • SSH Verbindung zu ihrem_server.de

  • Login mit Username und Kennwort

  • cd verzeichnis-mit-ewm/
    Das ist das Verzeichnis, für das der Cronjob angelegt werden soll

  • pwd
    Damit wird der komplette Verzeichnispfad angezeigt. Dieser wird benötigt. Also aufschreiben/kopieren. Im Beispiel ist das:
    /kunden/homepages/1234/abc1234/htdocs/verzeichnis-mit-ewm

  • crontab -e
    Ruft den Cronjob-Editor auf. Achtung: das ist "vi", eine Zumutung für jeden normalen Menschen. Versuchen Sie bloß nicht mit den Pfeiltasten zu navigieren. Jeder falsche Tastendruck kann in einer Katastrophe enden.

  • o
    Das kleine "O" fügt neue Zeile nach der aktuellen ein. Dort können Sie nun Text eingeben.

  • */1 * * * * /kunden/homepages/1234/abc1234/htdocs/verzeichnis-mit-ewm/cgi-bin/tdbengine.cgi /kunden/homepages/1234/abc1234/htdocs/verzeichnis-mit-ewm/schedul/schedul.prg &>/kunden/homepages/1234/abc1234/htdocs/verzeichnis-mit-ewm/logfiles/cronlog.log
    Wie Sie sehen kommt hier dreimal der Pfad von vorhin vor. Einmal erweitert um cgi-bin/tdbengien.cgi, einmal schedul/schedul.prg und zum Schluss noch ein Logfile. Das wäre nicht unbedingt notwendig, aber man kann so leicht feststellen, ob alles richtig läuft.
    Die Sternchen am Anfang sind wichtig, bei bereits bestehenden Einträgen sehen Sie aber zusätzlich wie diese gesetzt werden müssen.

  • ESC :w
    Drücken Sie die Esc-Taste, dann den Doppelpunkt und zuletzt ein kleines "w". So wird die Datei gespeichert

  • ESC :q
    So wie gerade, nur mit q. So wird der Editor verlassen.

Jetzt können Sie noch mit "cd logfiles" in das Protokollverzeichnis wechseln und nachsehen, ob cronlog.log ein neues Datum bekommt. Mit "ls -l" wird das Verzeichnis aufgelistet. Wenn alles passt verändert sich Zeit und Datum der Datei nach spätestens einer Minute.

Der Editor ist leider eine echte Zumutung. Ohne Anleitung kann ich diesen auch nicht bedienen. Auf meinen Servern ist immer das erste, dass der rausgeschmissen wird und etwas sinnvolles benutzt wird. In der 1&1 Doku findet sich eine brauchbare Kurz-Anleitung zu vi oder auch hier [Link entfernt, weil Linkziel leider nicht mehr verfügbar] eine kurze Übersicht.


Dieser Artikel wurde veröffentlicht am 26.10.2008 um 10:50 Uhr. Noch kein Kommentar.

Double-Opt-In für Kommentar-Benachrichtigung

Es gibt ein neues Update für den ewm5. Der Hauptgrund dafür ist die Double-Opt-In-Funktion bei Kommentaren. Aufgrund rechtlicher Probleme sollte man die Mail-Benachrichtigung bei neuen Kommentaren besser nur noch mit dem sogenannten Double-Opt-In-Verfahren anbieten. Das bedeutet, dass zuerst eine Mail verschickt wird, bei der ein Link zur Bestätigung angeklickt werden muss. Damit ist sichergestellt, dass der Empfänger auch sicher zustimmt und niemand schlicht eine falsche Adresse angeben kann.

Dazu werden 3 neue Vorlagen benötigt und in comments.ini im Bereich [comments] muss
doubleoptin=1
gesetzt sein.

Die Vorlagen:

comment/mail-doubleoptin
Das ist die Nachricht mit dem Bestätigungslink. Diese sollte in etwa so aussehen:
tdbmail
{eMail}
blog@ihre_domain.de
Blog-Name -  Bitte bestätigen Sie die Benachrichtigung über Kommentare
Vielen Dank für Ihren Kommentar im Blog-Name beim Artikel
*{title}*

Sie haben die Option gewählt, dass Sie über neue Kommentare zu diesem Artikel informiert werden möchten. Da dies das erste Mal ist, müssen Sie die Benachrichtigung per Klick bestätigen. Für alle weiteren Kommentare, bei der Sie die gleiche Mail-Adresse verwenden, ist dies nicht mehr notwendig.

Sie müssen die Benachrichtigungsfunktion mit dem folgenden Link bestätigen.
{linktoactivate}

__________________________________________________________

Rechtlicher Hinweis:
Dies ist keine Werbemail! Der Zweck dieser eMail ist die Überprüfung des Wunsches einer Benachrichtigung bei neuen Kommentaren.
Dieses Verfahren (Double-Opt-In) soll sicherstellen keine unverlangten eMails zu versenden.
Weiterhin wird mit dieser eMail der Informationspflicht laut BDSG § 33 Abs. 1 sowie TDDSG § 4 Abs. 1 nachgekommen.
Ihre eMail-Adresse wurde in unserer Datenbank für Kommentare gespeichert. Ohne Aktivierung wird sie nach angemessener Zeit automatisch gelöscht.
Falls Sie nicht wissen, warum Sie diese Mail bekommen haben, hat sich vermutlich jemand einen Scherz erlaubt und Ihre eMail Adresse unberechtigt eingetragen.
Solange Sie nicht den obigen Link zum aktivieren benutzen werden Sie keine weiteren eMails erhalten.


comment/message-doubleoptin
Das sieht der Benutzer, wenn er den Link angeklickt hat und alles war OK. Beispiel:
<a name="message"></a>
<span class="headline" style="font-size:24px;">Vielen Dank. Sie erhalten nun eine Benachrichtigung, falls zu diesem Artikel ein neuer Kommentar verfasst wird.</span><br />


comment/message-doubleoptin-error
Das wird angezeigt, wenn es Probleme mit dem Bestätigungslink gibt. Beispielsweise wenn der Geheimcode nicht stimmt. Den brauchen wir ja, sonst könnte man die Bestätigung für andere übernehmen. Beispiel für die Vorlage:
<a name="message"></a>
<span class="headline" style="font-size:24px;">Es ist leider ein Problem aufgetreten.</span><br />
Die Bestätigung für den Empfang von Benachrichtigungen bei Kommentaren kann leider nicht akzeptiert werden.
Möglicherweise haben Sie den Link nicht korrekt aufgerufen oder zu lange gewartet.
<br /><br />


  • Ansonsten enthält das Update noch die neue overview-Version, die bereits vorgestellt wurde.
  • Der Trackback-Verschicker arbeitet wieder mit HTTP1.1, ich hatte kurzzeitig mal auf 1.0 umgestellt. Komischerweise funktionieren Trackbacks innerhalb des gleichen Servers bei mir nur mit HTTP1.0, was eigentlich genau falsch rum ist. 
  • Ein neuer rollmann ist auch dabei, ich habe den Verdacht beim alten gab es manchmal kleine Probleme mit mehreren Volltexten. Der Sache bin ich aber noch auf der Spur, weil es immer mehrere Tage dauert, bis das Problem überhaupt zu bemerken ist.
  • Beim scheduler ist eine Debug-Ausgabe geändert.


Dieser Artikel wurde veröffentlicht am 18.10.2008 um 13:09 Uhr. Noch kein Kommentar.
Zeige 41 - 50 von 102
Anfang Zurück Vorwärts Ende


Hier bloggt Horst Klier mit und über eforia web manager und was dazugehört (HTML, Javascript, Internet, Webdesign, Such- maschinenoptimierung, usw.).

>> Zur Blog Startseite

RSS-Feed
abonnieren


Übersicht über alle Beiträge



eforia® ist ein eingetragenes Markenzeichen.
Alle anderen Marken und Markenzeichen gehören Ihren jeweiligen Besitzern.
Letzte Aktualisierung dieser Seite: 18.07.2024 / 20:01:49
Suche  
Login / Userdaten
Impressum/Datenschutz