Diese Seite weiterempfehlen...
Stand vom 17.03.2008
von Thiemo Fetzer
Wer seinen Besuchern die Möglichkeit geben will, die gerade von ihm gelesene Seite an einen Freund weiterzuempfehlen, kann das auf vielerlei Weise tun. Wir machen das im Einbau und können mit zusätzlichen Features das Skript noch komfortabler machen. Zum Beispiel mit einem Virenschutz oder dem automatischen Auslesen der Meta-Description.
Eine solche Funktion gehört beinahe schon zum guten Ton. Sie wird häufig eingesetzt. In wie weit sie jedoch benutzt werden, hängt vom Profil der Besucher ab. Auf Spiegel-Online wird ein solches Tool stark benutzt. Zumindest lässt es jede Website komfortabler erscheinen.
Es funktioniert relativ einfach. Ein Besucher schaut sich eine Seite an, klickt auf den Link „Diese Seite einem Freund weiterempfehlen“ oder ähnlich - ein Fenster öffnet sich und eine Empfehlung kann ausgesprochen werden.
Der Empfehlungslink sieht wie folgt aus:
<a href="#"
onClick="window.open('empfehlen.php?ref
='+location.href,'NewWindow','width=400,
height=600')">Diese Seite weiterempfehlen?</a>
Dabei wird in einem neuen Popup-Fenster das Skript empfehlen.php aufgerufen. An dieses wird der Parameter "ref" weitergegeben. Der Parameter bekommt mit "location.href" die aktuelle Adresse übergeben.
Möchte man auf das Popup-Fenster verzichten, lässt sich die Sache auch über einen einfachen Link regeln.
<a href="javascript:
window.location.href='empfehlen.php?ref='+location.href">Diese Seite
weiterempfehlen?</a>
Das Empfehlen-Skript besteht zum einen aus einer Email-Funktion und zum anderen aus einem Formular. Des Weiteren müssen die Eingaben der Benutzer vor dem Absenden der Email auf Ihre syntaktische Korrektheit hin untersucht werden.
Das Skript dazu:
empfehlen.php
<html><head><title>Diese Seite
weiterempfehlen...</title></head>
<body>
<div
align="center">
<?php
$url = $_GET['ref'];
if
(isset($_POST['submit'])) { //ist das Formular abgesendet worden?
$error =
false;
$regex ="/^"."[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*"."@"
."([a-zA-Z0-9-]+\.)+"."([a-zA-Z]{2,4})"."$/";
if (!preg_match($regex,
$_POST['s_email'])) {
echo "Geben Sie eine gültige Sender-Emailadresse
ein!<br />";
$error = true;
}
if
(!preg_match($regex,$_POST['e_email'])) {
echo "Geben Sie eine gültige
Empfänger-Emailadresse ein!<br />";
$error = true;
}
if
($_POST['s_email'] == $_POST['e_email']) {
echo "Geben Sie zwei verschiedene
Emailadressen an<br />";
$error = true;
}
if ($_POST['s_name'] ==
"" or $_POST['e_name'] == "") {
echo "Geben Sie sowohl ihren Namen als auch
den Empfängernamen an<br />";
$error = true;
}
if ($error ==
true) {
echo "<a
href=\"javascript:history.back()\">Zurück</a>";
}
else
{ //Email versenden
//im folgenden wird die Nachricht
generiert.
$nachricht = "Hallo ".$_POST['e_name'].", \n";
$nachricht .=
$_POST['s_name'] ." hat gerade die Seite deineseite.de besucht und meint, dass
eventuell auch ".$ref." für dich interessant sein könnte. \n";
$nachricht .=
"Er hinterließ dir folgende Nachricht: \n";
$nachricht .=
$_POST['nachricht'];
$nachricht .= "\nEs würde uns freuen wenn du mal vorbei
schaust!\n";
$nachricht = strip_tags($nachricht); //nur zur
Sicherheit!
if (!mail($e_email,"Surftipp von
".$_POST['s_name'],$nachricht, "From: ".$s_email)) {
echo "Mail konnte nicht
versand werden!";
}
else {
echo "Die Email wurde erfolgreich
versendet!";
echo "<a href=\"javascript:window.close()\">Fenster
schließen</a>";
}
}
}
else {
?>
<p>Hier können Sie eine kurze Nachrichte an Freunde, Bekannte
oder Kollegen senden und den eben gelesenen Artikel weiterempfehlen, die
entsprechende URL wird automatisch übermittelt. Die Eingabe von Emailadressen
und Namen ist notwendig, sonst kann es nicht funktionieren. Adressen werden von
uns nicht weitergegeben.</p>
<form method="post" action="empfehlen.php">
Ihr Name:
<input type="text" name="s_name" /> <br />
Ihre Emailadresse:
<input type="text" name="s_email" /> <br />
Name ihres Freundes:
<input type="text" name="e_name" /> <br />
Email ihres Freundes:
<input type="text" name="e_email" /> <br />
<textarea
name="nachricht" cols="34" rows="4">Hey ich habe eine interessante Webseite
unter <?php echo $ref ?> gefunden! Schau sie dir mal an!</textarea>
<br />
<input type="submit" name="submit"
/>
</form>
<?php
}
?>
</div>
</body>
</html>
Der Aufbau des Skriptes ist relativ simpel. Zunächst wird durch isset($_POST['submit']) überprüft, ob das Formular abgesendet wurde. Ist dies der Fall, wird geprüft, ob alle notwendigen Angaben in dem Formular gemacht wurden. Bei der Kontrolle der Emailadressen wird auf reguläre Ausdrücke zurückgegriffen. Sofern keine Fehler bei der Eingabe der Daten entdeckt wurden, wird die Email versendet.
Zuvor wird die Nachricht an den Empfänger noch etwas modifiziert. Sicherheitshalber werden über strip_tags($nachricht); sämtliche HTML Tags aus der Nachricht entfernt. Über ein IMG-Tag könnten nämlich Viren an den Empfänger verschickt werden. Würde der Benutzer die Email dann öffnen und die Quelle auf die der IMG-Tag verweist geladen, könnte sich der Benutzer infizieren.
Nun so ist das Skript noch wenig spektakulär. Man kann dem Empfänger der Email jedoch weitere Informationen über die Seite übermitteln, die er besuchen soll. Es wäre doch praktisch wenn der Empfänger den Titel der Seite zu lesen bekäme, oder vielleicht eine kurze Beschreibung. Auch das ist ohne Probleme mit ein wenig Javascript möglich.
Übergabe des Titels
Den Titel können sie mit der
JavaScript-Eigenschaft "document.title" ebenfalls als Parameter übergeben. Der
Link zu der Seite würde dann wie folgt aussehen:
<a
href="javascript:window.location.href='empfehlen.php?
ref='+location.href+'&titel='+document.title">Diese
Seite weiterempfehlen?</a>
Übergabe der Meta-Description
Über das DOM kann auf die
Meta-Tags zugegriffen werden; so kann über
document.getElementsByTagName
("meta").description.content
auf den Inhalt der Meta-Description zugegriffen werden. Diese kann dann ebenfalls über den URL an das Empfehlungsskript übermittelt werden.
<a
href="javascript:window.location.href='empfehlen.php?
ref='+location.href+'&titel='+document.title+'&desc
='+document.getElementsByTagName
('meta').description.content">
Diese Seite weiterempfehlen?</a>
Wem das zu umständlich erscheint, der kann mit PHP vorgehen. Es gibt die Funktion get_meta_tags(), über die sämtliche Metatags einer Datei eingelesen werden und in ein assoziatives Array überführt werden. Dabei parst der PHP Interpreter die Datei nur bis zum letzten MetaTag-Eintrag. Es wird also nicht die vollständige Datei geladen.
Da über den ref-Parameter in unserem Skript die URL der zu empfehlenden Seite übertragen wird, können anhand dieser die MetaTags aus der Datei eingelesen werden. Das funktioniert auch bei dynamischen Webseiten.
Dieser Artikel ist ebenfalls bei Dr.Web erschienen!

HTML