Implementierung der PHP Applikationen in RW – Gästebuch

Es gibt inzwischen schon ein Gästebuch-Plugin für RapidWeaver. Dass diese Erweiterung noch sehr spartanisch ist, verstehe ich. Die Entwicklung ist gerade am Anfang. Allerdings gibt es, aus meiner Sicht, sehr viele Sicherheitslücken, so dass ich immernoch für eine Implementierung einer schon ausgereiften PHP Applikation plädiere.
Das Gästebuch das ich hier vorstelle ist auch das gleiche das in der Homepage eingebunden ist.

Teil 1 – Download und Installation des Gästebuches

Gästebuch von STADTAUS.com downloaden und installieren:
1. Nach dem Entpacken der Ordner (z.Z. gbs1.9.2) in guestbook umbenennen.

2. in der Datei config.php die Änderungen vornehmen (siehe auch Erklärungen in der Datei guestbook_script_german.html aus dem Ordner docu Abschnitt Installation):
- in dem Bereich:

         $database['host']       = 'localhost';    // Database hostname
         $database['name']       = '';             // Database name
         $database['user']       = '';             // Database username
         $database['pass']       = '';             // Database password
         $database['prefix']     = 'gbs17_';

ändern in:

         $database['host']       = 'host_adresse_der_datenbank';
         $database['name']       = 'name_der_datenbank';
         $database['user']       = 'user';
         $database['pass']       = 'passwort';
         $database['prefix']     = 'gbs19_';

- die Sparache ändern:

          $language               = 'en';

in

          $language               = 'de';

3. erwartet man Besucher die u.U. andere Sprachen mit Unicode Buchstaben benutzen dann in der Datei language.de.inc.php aus dem Ordner languages den Characterset ändern:

'txt_charset'                      => 'iso-8859-1',

in

'txt_charset'                      => 'utf-8',

4. den Ordner guestbook auf dem Server laden

5. wie in der Datei guestbook_script_german.html aus dem Ordner docu bei Installation beschrieben wird, muss jetzt das Gästebuch installiert werden.

6. Bei einer Kaffeepause würde ich einige Eintargungen machen um einfach zu sehen wie es funktioniert.
Die User die sich mit phpMyAdmin auskennen und möchten Eintragungen aus anderen Gästebücher übernehmen würde ich die Seite Timestamp lesbar umwandeln empfehlen für die timestamps:
Es gibt leider keine Imprtmöglichkeit, also die Eintragungen werden per Copy & Paste aus den anderen Gästebücher übernommen. Allerdings dieses Einfügen erzeugt die Eintragungen an der jetztige Zeit, so dass timestamps der Eintragungen geändert werden können (mit der Hilfe des oberen Link). Die timestamps sind in Datenbank bei gbs19_data.

Teil 2 – Vorbereitung für die Anbindung in der Homepage

Aber zuerst etwas zum Verstehen der Problematik:

Der Hauptbereich einer von RW erzeugten html Datei befindet sich in dem

<div id="content">
	etc, etc, etc
</div>

In diesem <div id="content"> muss auch der Hauptbereich des Gästebuches kommen. Alles andere: Sidebar, Navigation (Subnavigation), Footer, <head> etc kann man von einer anderer Datei übernehmen. Allerdings damit die Pfade richtig stimmen muss eine Datei genommen werden die auf der gleiche Stufe in der Homepage ist wo man das Gästebuch einsetzen möchte. Es ist meistens so, dass das Gästebuch eine der Hauptseiten ist. Auf der gleiche Stufe mit Kontakt, Impressum, index.html etc. Da index.html eine besondere Stellung nimmt (im Bezug auf Pfaden) würde ich nicht empfehlen diese Datei für die Übernahme der “Umgebung”.
Ich würde eigentlich eine neue Seite erstellen ALS WÜRDE DIESE SEITE DAS GÄSTEBUCH SEIN.

Die zweite Problematik ist dass RW wird später diese Seite nicht “kontrolieren” können. Erzeugt man eine neue Seite später, wird diese Seite nicht in der Navigation des Gästebuches auftauchen. Sie muss per Hand (wenn sie in der Navigation des Gästebuches auftauchen muss) eingegeben werden.
Diese Problematik entsteht weil das Gästebuch von der Datei index.php (aus dem umbenannten Ordner guestbook) angetrieben wird aber die Umgebung der Seite (Navigation, Sidebar, Vorlage, Footer etc, etc) aus einer html Datei, Template genannt, kommt. Und diese Datei ist main_layout.tpl.html aus dem Ordner /templates/default/
Also es hilft nicht dem RW “zu sagen”:
Die Seite die erzeugt wird soll main_layout.tpl.html heissen (Pfad siehe oben) weil das Gästebuch nicht damit angetrieben wird und die Links die man damit erzeugt zu “nichts” ankommen.
Aber auch nicht die Seite die erzeugt wird soll index.php (aus dem Ordner guestbook) weil diese Datei eine php Datei ist und sie wird keine Links bekommen.
Die einzige Möglichkeit ist eine Weiterleitungsseite zu index.php (aus dem Ordner guestbook). Dadurch “verstehen” die andere Seiten der Homepage wo das Gästebuch sich befindet. Nicht aber das Gästebuch selbst. So dass neue Seiten, oder Umgestaltung der Homepage muss immer in dieser Datei main_layout.tpl.html per Hand geschrieben werden.

Mit diesem Prinzip kann man eine PHP Applikation in RW anbinden. Ob Gästebücher, WordPress, Fotogalerien, andere Mail-Skripte, genealogischen Datenbanken, FTP-Server, Foren etc, es ist so gesehen egal. RW muss wissen wo die “Start”seite der Applikation ist. Der Rest ist die Handarbeit bei der Vorlage der Applikation um ein möglichst angepassten Aussehen mit der anderen Seiten der Homepage. Es gibt Applikationen die etwa leicht (wie hier) anzupassen sind, andere wie vielleicht WordPress etwas schwerer.

Und jetzt zu den Vorbereitungen:

1. eine HTML Seite erzeugen und sie in der Navigation da anbringen wo später das Gästebuch stehen wird.

2. Dieser Seite folgenden Änderungen vornehmen:
- als Seitentitel und Browser-Titel den Namen Gästebuch geben (oder was auch immer)
- als Ordnername guestbook_testordner
- als Dateiname index.php
- als Codierung was in der Datei language.de.inc.php festgelegt wurde
- Ausgabe Standard
- die Seite muss aktiviert und im Menü erscheinen
- die Farb-, Sidebar- (etc) Änderungen die in Seitenspezifischen Vorlage-Teil nötig sind. Zu bedenken ist es hier dass u.U. (je nachdem wie breit die Vorlage ist die man benutzt) eine Einstellung ohne Sidebar (zusätlich) von Vorteil ist. Auch andere Einstellungen die einige Vorlagen habe wie Änderungsdatum z.B. (Vorlagen aus dem Hause multithemes.com) nichts bewirken. So ein Änderungsdatum wird von RW “kontrolliert”. Das Gästebuch hat kein Einfluss drauf. Sicherlich von Vorteil ist es die Benutzung von den eingebauten oder individuell erstellten Stile der Vorlage!
- andere Einstellungen vornehmen wie Meta-Tags oder die RW-Unterstützung ein-, abschalten

3. Als Inhalt braucht man (kann man) einfach nur ein Wort zu schreiben. Ob der eigener Name oder etwas anderes ist es absolut egal.

4. Publizieren (ggf. exportieren)

5. Nach dem Publizieren diese Seite deaktivieren und im Menü nicht mehr anzeigen lassen.

6. Eine Weiterleitungsseite genau an der Stelle wo die gerade deaktivierten Seite sich befindet.

7. Dieser Weiterleitungsseite bekommt:
- als Seitentitel und Browser-Titel Gästebuch (oder was auch immer die deaktivierte Seite bekommen hat)
- als Ordnername jetzt der richtigen Ordnername der Gästebuch in diesem Fall guestbook
- als Dateiname index.php
- und in dem letzten Reiter des Fensters Seiteneinstellungen (Plugin-Parameter) in dem Feld URL den Pfad zu der index.php aus dem Ordner guestbook. Befindet sich dieser Ordner auf der gleiche Ebene mit Startdatei der Homepage (index.html) dann müsste in diesem Feld etwa: http://www.domainname.de/guestbook/index.php stehen

8. Speichern und publizieren.

Die Punkte 1, 2 und 3 werden benutzt bei der Anpassung des Teplates des Gästebuches und die Punkte 6, 7 und 8 teilen allen Seiten der Homepage mit wo jetzt das Gästebuch sich befindet.

Teil 3 – Anpassung der Datei main_layout.tpl.html aus dem Ordner /templates/default/

Diese Datei beinhaltet die 3 Bereiche die auch die zum Test erstellten, publizierten und dann deaktivierten HTML Seite beinhaltet.
In diesen Bereichen Tauchen allerdings einige Variablen der Gästebuch-Applikation die immer zwischen { und } geschrieben werden. Die wichtigste ist natürlich {main_content} aus dem die das Wort, das bei dem vorherrigen Punkt 3 im Inhalt festgelegt worden ist, ersetzen wird.
Aber der Reihe nach:

Als Vorbereitung müssen die Dateien main_layout.tpl.html aus dem Ordner /templates/default/ und die Datei index.php aus dem Ordner guestbook_testordner in einem Texteditor wie TextWrangler geöffnet werden. Und wir erstellen einen neuen Textdokument (wahrscheinlich das Programm wird es untitled text benennen) umd dadrin die Codeteile einzufügen die wir brauchen.

Wir haben in main_layout.tpl.html drei Bereiche:
1. !doctype
2. <head> und
3. <body>

1. !doctype – Das Gästebuch benutzt XHTML 1.0 Transitional. Es kann sein dass die RW Vorlage ein strikten doctyp in der Datei index.php erstellt hat.
So dass in der main_layout.tpl.html den Code:

<!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="{txt_content_direction}">

kopiert und in dem untitled text eingesetzt wird.

2. <head> – In diesem Bereich der Datei main_layout.tpl.html hat das Gästebuch nur drei Unterbereiche:

<title>{txt_script_name} {txt_script_version} {txt_title}</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

und eine ganze Latte von CSS Angaben unter

<style type="text/css">

Aus der von RW publizierten (exportierten) index.php Datei (aus dem Ordner guestbook_testordner) kopieren wir den ganzen

<head>...</head>

Bereich und setzen in der untitled text Datei ein (hinter dem Code der schon da steht).
Dadurch werden:
- den richtigen Pfad zu dem Gästebuch,
- alle Pfad-Angaben,
- Einbindung der JavaScripts etc
erstellt, die die RW Vorlage braucht, und dem Gästebuch zur Verfügung gestellt.

Aus der Datei main_layout.tpl.html kopieren wir die lange CSS Angaben Liste und setzen wir sie und VOR dem </head> in dem untitled text ein.
Dadurch werden auch die CSS Angaben die das Gästebuch selbst benötigt eingebunden.

3. <body> – In diesem Bereich der Datei main_layout.tpl.html hat das Gästebuch nur ein Unterbereich: {main_content}. Das muss das Textwort ersetzen. Dafür:
Aus index.php den ganzen Bereich von <body> bis zu Ende der Datei kopieren und in untitled text einsetzen (nach dem schon befindlichen Code).

Dann das Testwort suchen (muss sich in dem <div id="content"> befinden) und da es mit {main_content} ersetzen.

4. Am Schluss den ganzen Inhalt der in main_layout.tpl.html löschen und mit dem ganzen Inhalt der sich in untitled text sich befindet ersetzen.
Speichern (ggf. auf dem Server laden).

Gästebuch eingebunden!

Teil 4 – Einige Anpassungen für das Gästebuch

1. Das Gästebuch soll eine Email Schicken bei einem Neueintrag:
Die 1.9.2er Version ist in dieser Richtung noch nicht so eingestellt. Aber mit zwei Zusatzcodes kann es aber auch.
Dazu muss die Datei sign.php so geändert werden:
In der Datei diesen Code:

]/*****************************************************
  ** Settings
  *****************************************************/
          $script_root  = './';
          $script_title = '';
          $query_string = '?';
          $show_form    = 'true';
          $captcha_content = '';
          $captcha_note    = '';

ersetzen mit:

/*****************************************************
  ** Settings
  *****************************************************/

          $script_root  = './';
          $script_title = '';
          $query_string = '?'; 
          $show_form    = 'true';
          $captcha_content = '';
          $captcha_note    = '';

          $empfaenger = 'deine@emailadresse.de';
          $betreff = 'Neuer Gästebucheintrag';
          $nachricht = 'Neuer Gästebucheintrag'; 
          $header = 'From: guestbook@domain_des_gaestebuches.de' . "\r\n" .
          'Reply-To: guestbook@domain_des_gaestebuches.de' . "\r\n" .
          'X-Mailer: PHP/' . phpversion();

die Email Adressen müssen natürlich angepasst werden.

und dieser Code:

/*****************************************************
  ** Write data to database
  *****************************************************/
          while (list($key, $val) = each($new_form_fields))
          {
              $field_list[] = $val['name'];
          }

          $field_list = array_merge($field_list, array('timestamp', 'ip_address', 'hostname', 'user_agent'));


          if ($db->add_details($field_list, $form_data, $full_text)) {
              $message[]           = array('message' => $txt['txt_entry_added'], 'addition' => '');
              $guestbook_entries[] = $html_form_data;

              unset($show_form);
          } else {
              $message[] = array('message' => $txt['txt_add_entry_failed'], 'addition' => '');
          }

muss mit diesem Code ersetzt werden:

/*****************************************************
 ** Write data to database
 *****************************************************/
        while (list($key, $val) = each($new_form_fields))
        {
            $field_list[] = $val['name'];
        }

        $field_list = array_merge($field_list, array('timestamp', 'ip_address', 'hostname', 'user_agent'));


        if ($db->add_details($field_list, $form_data, $full_text)) {
            mail($empfaenger, $betreff, $nachricht, $header); 
            $message[]           = array('message' => $txt['txt_entry_added'], 'addition' => '');
            $guestbook_entries[] = $html_form_data;

            unset($show_form);
        } else {
            $message[] = array('message' => $txt['txt_add_entry_failed'], 'addition' => '');
        }

2. Der Zeichensatz des Gästebuch und die Größe des Zeichensatzes soll gleich mit dem von der Homepage:
Die Liste der CSS Anpassungen die in der Datei main_layout.tpl.html eingefügt worden ist beinhaltet in:

body, p, td, br, form, div, span {
      font-family:Tahoma,Helvetica,Geneva,Sans-serif,sans-serif;
      font-size:9pt;
      }

die Zeichensätze des Gästebuches. Die überschreiben die Angaben aus der RW-Vorlage in einigen Punkten wie body oder p etc.
Einfach ist es den ganzen oberen Code zu löschen. Möchte man etwas anderes, hier sind die Änderungen zu machen.

3. Die Farben der Einträge:
Das Gästebuch stellt abwechselnd die Einträge in einer dunklen und einer helleren Farbe. Diese Farben sind auch in dieser Liste unter

.darkrow {
      background-color:#D2DBFF;
  }

  .lightrow {
      background-color:#ECF0FF;
  }

4. Die Breite der Einträge:
Die Breite der Tabelle aus der Datei entry_detail.tpl.html ist mit 500px angegeben:

<table border="0" cellpadding="4" cellspacing="1" width="500">

Einfach diese Größe an der Breite des Contents der Homepage ändern

5. Die Größe von “Gästebucheinträge anzeigen” und “xx Einträge · Seite x von xx”:
in der Datei entries.tpl.html “Gästebucheinträge anzeigen” befindet sich unter:

<h3>{txt_display_entries}</h3>

Einfach eine andere Überschriftgröße angeben.
Für “xx Einträge · Seite x von xx” ist der Code:

<h4 style="margin-top:30px;">{entries} {txt_entries} · {txt_page} {currentpage} {txt_page_of} {allpages}</h4>

Man kann also eine andere Überschriftgröße nehmen und die Entfernung zu “Ins Gästebuch eintragen” ändern.

6. Änderungen für das Eingabe-Layout:
- Die Größe von “Ins Gästebuch eintragen”: in der Datei sign.tpl.html die Überschriftgröße anpassen in dem Code

<h3>{txt_sign_guestbook}</h3>

- Smileys von der rechten Seite unter den Angabenfelder positionieren:
Die Tabele aus der Datei form_detail.tpl.html hat 3 Spalten und die Smileys werden neben dem Kommentar-Feld gesetzt. Die 30 Gesichter werden u.U. eine viel zu lange Zelle in Anspruch nehmen. Deswegen habe ich in dem unteren Code die Tabelle nur mit zwei Spalten gesetzt und die Smileys kommen damit unter dem Kommentar-Feld. Den ganzen Code aus form_detail.tpl.html ersetzen mit:

<table border="0">
	<tbody>
		<tr>
			<td>{label:%name%}*</td>
			<td>{field:%name%}</td>
		</tr>
		<tr>
			<td>{label:%location%}</td>
			<td>{field:%location%}</td>
		</tr>
		<tr>
			<td>{label:%homepage%}</td>
			<td>{field:%homepage%}</td>
		</tr>
		<tr>
			<td>{label:%email%}</td>
			<td>{field:%email%}</td>
		</tr>
		<tr valign="top">
			<td>{label:%comment%}*    </td>
			<td>{field:%comment%}</td>
		</tr>
		<tr valign="top">
			<td></td>
			<td>
				<script language="JavaScript" type="text/javascript">
				<!--
				function emoticons(sign)
				{
					var text_area = document.guestbookform.comment;

					text_area.value += sign;
					text_area.focus();
				}
				//-->
				</script>
				{emoticon_matrix}
			</td>
		</tr>
		<tr valign="top">
			<td></td>
			<td>
				<p style="width: 350px;">{captcha_note}</p>
				<p>{captcha_content}<br /> </p>
			</td>
		</tr>
		<tr valign="top">
			<td></td>
			<td>
				{field:%preview%}    
				{field:%send%}
			</td>
		</tr>
	</tbody>
</table>

<p>
* = {txt_mandatory_fields}
</p>

7. Der Text vor CAPTCHA: in der Datei language.de.inc.php ist die deutsche Übersetzung der Applikation. Einfach den Text für txt_captcha_note auswechseln mit was Ihr meint dass es besser mit Eueren Homepage-Styl passt. Natürlich die anderen Texte konnt ihr auch ändern.

Ich hoffe dass Ihr genug Anhaltspunkte habt das Gästebuch so anzupassen wie Ihr es wünscht.
Ich wünsche Euch viele schöne Einträge und wenig Spammer. (Die werden Euch aber finden wenn Ihr

<meta name="robots" content="all" />

in dem <header> von main_layout.tpl.html habt weil Google dann das Gästebuch indexiert. Also besser wäre natürlich:

<meta name="robots" content="none" />

)

Kommentieren ist momentan nicht möglich.