German (Deutsch) translation by Tatsiana Bochkareva (you can also view the original English article)
Jeder Arbeiter braucht eine gute Werkzeugbox, und Webentwickler sind nicht anders. PHP-Hilfsfunktionen sollen sich wiederholende Aufgaben beschleunigen und homogenisieren und Ihnen das Leben erheblich erleichtern. In diesem ersten Tutorial wird erklärt, wie Sie Link-Helfer erstellen, die Ihre Methoden zum Hinzufügen von Hyperlinks und Mailto-Links in Ihren Webanwendungen verbessern.
Eine Einleitung

Ja, es gibt nichts Schöneres als großartige, zeitsparende Geräte, die das Leben leichter machen. Es gibt viele nützliche Werkzeugs, die Ihren Workflow verbessern können, von CSS-Grids und -Layouts bis hin zu vollwertigen Content-Management-Systemen und Frameworks.
Dieses Tutorial befasst sich jedoch mit dem Konzept der PHP-Hilfsfunktionen und damit, wie Sie verallgemeinerte Snippets für Ihre Site schreiben können, die Sie immer wieder verwenden können. Dies sind Funktionen, die Ihren Codierungsprozess beschleunigen und bereinigen, sodass sich wiederholende Aufgaben minimiert werden können und Sie mehr Zeit damit verbringen können, sich um die wichtigen Dinge im Leben zu kümmern... wie das Abendessen.
Hyperlink-Helfer
Eine der häufigsten sich wiederholenden Aufgaben, die wir schreiben müssen, ist der Hyperlink. Durch das Erstellen einer Hilfsfunktion können wir Zeit sparen, wenn wir eine schreiben müssen, das Risiko von Syntaxfehlern beseitigen und sicherstellen, dass der Code leicht aktualisiert werden kann, wenn Dateien verschoben werden oder wenn Sie eine Site auf eine andere verschieben Domain. Zunächst werden wir eine sehr einfache Funktion in einer Datei namens helpers.php erstellen:
1 |
<?php
|
2 |
function get_domain() |
3 |
{
|
4 |
//the variable $domain can be set to the domain your application is running from.
|
5 |
$domain = "https://www.my-site-domain.com/"; |
6 |
return $domain; |
7 |
}
|
Auf dieses kleine Baby kann immer dann verwiesen werden, wenn wir den vollständigen Pfad zu einer Datei benötigen, und es kann während der Entwicklung Ihrer Website immer wieder referenziert werden. Dies ist eine nützlichere Methode als das einfache Aufrufen der Domain mit der Methode $_SERVER ['HTTP_HOST'], da sie sich nicht ändert, wenn jemand die Domain mit oder ohne "www" eingegeben hat, und problemlos funktioniert, wenn Ihre Site aktiviert ist eine Subdomain, zum Beispiel "http://localhost/my-site".
Dies ist auch beim Verschieben der Site unglaublich nützlich, da sich alle absoluten Pfade auf diese einzelne Funktion beziehen. Wenn Sie also die Variable $domain in die neue Domain ändern, werden alle Ihre Links auf einen Schlag ortsweit geändert.
Optimieren Sie diesen Code
Wir wollen jetzt eine neue Funktion namens "anchor" erstellen, die eine kompatible Standard-HTML-Zeichenfolge mit einem Titel ausgibt. Hier ist ein Beispiel für das, was wir ausgeben möchten:
1 |
<a href="http://www.my-site-domain.com/new-page.php" title="New Page">New Page</a> |
Und hier ist, was wir eigentlich tippen möchten:
1 |
echo anchor('new-page.php','New Page'); |
Hier wird also auf eine PHP-Funktion verwiesen, an die zwei Variablen übergeben werden: eine für den Link und eine für den Anzeigetext. Jetzt, noch in unserer Datei helpers.php, können wir mit dem Schreiben der neuen Funktion beginnen:
1 |
function anchor($link, $text) // 1 |
2 |
{
|
3 |
$domain = get_domain(); // 2 |
4 |
$link = $domain . $link; // 3 |
5 |
|
6 |
$data = '<a href="' . $link . '"'; |
7 |
$data .= ' title="' . $text . '"'; //4 |
8 |
$data .= '>'; |
9 |
$data .= $text; //4 |
10 |
$data .= "</a>"; |
11 |
|
12 |
return $data; |
13 |
}
|
- Hier richten wir die Funktion "anchor" mit zwei übergebenen Variablen ein.
- Wir erhalten den Domainnamen dann von der Funktion get_domain(), die wir bereits erstellt haben
- Als nächstes hängen wir die Variable $link an, die an die Funktion gesendet wurde.
- Anschließend erstellen wir die Ausgabezeichenfolge in einer Variablen namens $data und verwenden die Variable $text, um sowohl den sichtbaren Text für die Site als auch das Tag 'title' für den Link zu verwenden.
Jetzt können wir das testen. Erstellen Sie eine neue Datei mit dem Namen index.php im selben Ordner wie diese Datei helpers.php und geben Sie Folgendes ein:
1 |
require('helpers.php'); |
2 |
echo anchor('new-page.php','New Page'); |
Hier haben wir die beiden Dateien mit der Funktion require() verbunden und dann die Funktion anchor() aufgerufen und zwei benutzerdefinierte Variablen damit gesendet. Wenn Sie dies in einem Browser testen, sehen Sie unser gewünschtes Ergebnis:
1 |
<a href="http://www.my-site-domain.com/new-page.php" title="New Page">New Page</a> |
Machen Sie es flexibel
Diese einfache Funktion kann nützlich sein, wird sich aber zweifellos früh genug verengen. Wir müssen drei neue Funktionen hinzufügen, bevor es wirklich fantastisch und flexibel wird. Erstens eine Option zum Hinzufügen von benutzerdefinierten Titel-Tags. zweitens, um CSS-Regeln hinzufügen zu können; und drittens eine Option, die bei Bedarf in einem neuen Fenster geöffnet werden kann.
Lassen Sie uns zuerst die benutzerdefinierten Titel-Tags überprüfen. Titel-Tags sind für SEO-Zwecke sehr wichtig, und wenn Sie sie im Moment nicht auf Ihre Links setzen, empfehle ich dringend, dass dies von nun an zur Gewohnheit wird. Diese Funktion wird Sie dazu zwingen - da das Hinzufügen viel einfacher ist und Sie keine manuell hinzugefügt haben, wird stattdessen eine Standardkopie des Anzeigetextes verwendet.
1 |
function anchor($link, $text, $title) //1 |
2 |
{
|
3 |
$domain = get_domain(); |
4 |
$link = $domain . $link; |
5 |
$data = '<a href="' . $link . '"'; |
6 |
|
7 |
if ($title) //2 |
8 |
{
|
9 |
$data .= ' title="' . $title . '"'; //3 |
10 |
}
|
11 |
else
|
12 |
{
|
13 |
$data .= ' title="' . $text . '"'; //4 |
14 |
}
|
15 |
|
16 |
$data.= '>'; |
17 |
|
18 |
$data .= $text; |
19 |
$data .= "</a>"; |
20 |
|
21 |
return $data; |
22 |
}
|
Hier ist eine modifizierte und verbesserte Version unserer Funktion anchor().
- Jetzt haben wir eine dritte Variable hinzugefügt, $title.
- Anschließend führen wir eine Überprüfung durch, um festzustellen, ob ein benutzerdefiniertes Titel-Tag eingegeben wurde.
- Wenn dies der Fall ist, fügen wir unserer Ausgabe-Datenzeichenfolge einen Teil hinzu, der den Titel tag3 festlegt.
- Wenn nichts eingegeben wurde, wird das Titel-Tag standardmäßig auf den Anzeigetext $text gesetzt, wie zuvor.
Wenn wir nun unseren Funktionsaufruf in index.php ändern in:
1 |
echo anchor('new-page.php','New Page','Custom Title Message!'); |
Wir werden mit diesem zufriedenstellenden Ergebnis enden:
1 |
<a href="http://www.my-site-domain.com/new-page.php" title="Custom Title Message!">New Page</a> |
Styling- und Zieloptionen
Um sicherzustellen, dass wir diesen Helfer auch dann verwenden können, wenn wir benutzerdefiniertes CSS oder Ziel-Tags hinzufügen müssen, fügen wir unserer Funktion jetzt einen Teil hinzu, der eine vierte Variable liest und das richtige HTML entsprechend ausgibt.
Diese Funktion muss intelligent genug sein, um zu sehen, ob wir eine CSS-Klasse, eine CSS-ID oder ein Ziel-Tag einfügen möchten, und wir möchten auch mehrere Optionen oder eine einzelne Option oder keine Optionen einfügen können überhaupt. Lassen Sie uns zunächst unsere Ankerfunktion ein wenig ändern:
1 |
function anchor($link, $text, $title, $extras)//1 |
2 |
{
|
3 |
$domain = get_domain(); |
4 |
$link = $domain . $link; |
5 |
$data = '<a href="' . $link . '"'; |
6 |
|
7 |
if ($title) |
8 |
{
|
9 |
$data .= ' title="' . $title . '"'; |
10 |
}
|
11 |
else
|
12 |
{
|
13 |
$data .= ' title="' . $text . '"'; |
14 |
}
|
15 |
|
16 |
if (is_array($extras))//2 |
17 |
{
|
18 |
foreach($extras as $rule)//3 |
19 |
{
|
20 |
$data .= parse_extras($rule);//4 |
21 |
}
|
22 |
}
|
23 |
|
24 |
if (is_string($extras))//5 |
25 |
{
|
26 |
$data .= parse_extras($extras);//6 |
27 |
}
|
28 |
|
29 |
$data.= '>'; |
30 |
|
31 |
$data .= $text; |
32 |
$data .= "</a>"; |
33 |
|
34 |
return $data; |
35 |
}
|
- Zuerst fügen wir eine vierte übergebene Variable hinzu, die "$extras" heißt. Dies enthält alle unsere zusätzlichen benutzerdefinierten Optionen.
- Danach prüfen wir, ob wir ein Array in dieser Variablen übergeben. Wir werden ein Array verwenden, wenn wir mehrere Extras an die Funktion übergeben, z.B. wenn wir eine CSS-ID und eine andere CSS-Klasse für unseren Link benötigen.
- Wenn es sich um ein Array handelt, werden wir es durchlaufen und jedes Element durch eine neue Funktion namens "parse_extras" führen. Diese Funktion verwendet die von uns eingegebenen zusätzlichen Bits und erstellt die richtige entsprechende HTML-Ausgabe.
- Wenn $extras eine Zeichenfolge ist, bedeutet dies, dass wir nur eine Regel durchlaufen haben. So können wir unsere neue Funktion parse_extras() für das einzelne Element ausführen. Nützlicherweise gibt die Funktion is_string() FALSE zurück, wenn die Variable leer ist. Wenn also mit diesem Code nichts durch $extras geleitet wird, wird kein Code ausgeführt und es wird übersprungen.
- Wir können das erste Zeichen einer Zeichenfolge mithilfe der Syntax $string[0] überprüfen. Sie sind möglicherweise daran gewöhnt, diese Syntax zum Abrufen des ersten Elements in einem Array zu verwenden, aber es ist auch eine sehr hilfreiche und schnelle Methode, um bestimmte Zeichen in Zeichenfolgen zu finden.
- Als nächstes erstellen wir eine neue Variable, die unsere eingegebene $rule ist, wobei das erste Zeichen abgeschnitten wird. Nachdem wir festgestellt haben, wofür die Regel gilt, benötigen wir sie für unsere HTML-Ausgabe nicht mehr. Diese Kombination von substr() und strlen() ist ein nützliches Snippet, um das erste Zeichen von einer Zeichenfolge zu entfernen.
- Wir können jetzt unsere $data-HTML-Ausgabezeichenfolge erstellen, die zur Rückgabe bereit ist. Diese Methode kann jetzt wiederholt werden - zunächst, wenn die $rule eine CSS-Klasse ist und dann, wenn es sich um ein HTML-Ziel-Tag handelt. Es ist erwähnenswert, dass wir das erste Zeichen für das Ziel-Tag nicht abschneiden müssen, da HTML im Gegensatz zu den CSS-Regeln den vorhergehenden Unterstrich (_) verwendet.
- Erstens durchlaufen wir immer noch vier Variablen für diese Funktion, obwohl wir aus kosmetischen Gründen die erste Variable in $email umbenannt haben.
- Jetzt erstellen wir eine neue Variable mit der HTML-Ausgabe für den Mailto-Link. Es ist erwähnenswert, dass wir vor den Anführungszeichen einen Backslash eingefügt haben, da diese Zeichenfolge später in der JavaScript-Funktion angezeigt wird, und wir müssen sicherstellen, dass die Anführungszeichen sie nicht verwechseln.
- Als nächstes implementieren wir die Funktion str_rot13() für die Variable $link, so dass sie codiert wird.
- Anschließend können wir unsere zurückgebende $data-Variable erstellen, die das zur Ausgabe bereitgestellte JavaScript enthält.
- Wir setzen unseren verschlüsselten $link in die Mitte all dessen - bereit zur Übersetzung.
- Nachdem das JavaScript zu unserer $data-Variablen hinzugefügt wurde, kommt Ihnen der Rest der Funktion bekannt vor.
- Wir überprüfen, ob ein benutzerdefiniertes Titel-Tag hinzugefügt wurde, und analysieren dann wie zuvor unsere $extras. Wieder einmal werden unsere Tags geschlossen...
- ...und geben Sie die Daten zurück.
Jetzt müssen wir unsere neue Funktion parse_extras() erstellen:
1 |
function parse_extras($rule) |
2 |
{
|
3 |
if ($rule[0] == "#") //1 |
4 |
{
|
5 |
$id = substr($rule,1,strlen($rule)); //2 |
6 |
$data = ' id="' . $id . '"'; //3 |
7 |
return $data; |
8 |
}
|
9 |
|
10 |
if ($rule[0] == ".") //4 |
11 |
{
|
12 |
$class = substr($rule,1,strlen($rule)); |
13 |
$data = ' class="' . $class . '"'; |
14 |
return $data; |
15 |
}
|
16 |
|
17 |
if ($rule[0] == "_") //5 |
18 |
{
|
19 |
$data = ' target="' . $rule . '"'; |
20 |
return $data; |
21 |
}
|
22 |
}
|
Diese Funktion nutzt die Tatsache, dass alle unsere Extras mit einer eindeutigen Kennung beginnen. Wenn wir eine CSS-ID übergeben, beginnt sie mit einem Hash (#). Wenn wir eine CSS-Klasse übergeben, beginnt sie mit einem Punkt (.), Und wenn wir ein Ziel übergeben, beginnt sie mit einem Unterstrich (_).
Nachdem wir alle erforderlichen Funktionen erstellt haben, können wir zu unserer Datei index.php zurückkehren und unseren Aufruf anchor() ändern.
1 |
echo anchor('new-page.php','New Page','Custom Title Message!','#special_link'); |
Hier übergeben wir eine CSS-ID und erhalten eine Ausgabe von:
1 |
<a href="http://www.my-site-domain.com/new-page.php" title="Custom Title Message!" id="special_link">New Page</a> |
Wenn wir eine Reihe von Extras hinzufügen würden, falls Sie möchten, dass sie in einem neuen Fenster geöffnet werden und eine bestimmte ID und Klasse haben (unwahrscheinlich, aber es lohnt sich, die Flexibilität zu demonstrieren!), Würden wir dies folgendermaßen tun:
1 |
$extras = array('#special_id','.special_class','_blank'); |
2 |
echo anchor('new-page.php','New Page','Custom Title Message!',$extras); |
Hier erstellen wir eine Array-Variable namens extras, um den Code aufgeräumt zu halten, und senden ihn dann zusammen mit der Funktion anchor(). Dies erzeugt die folgende Ausgabe:
1 |
<a href="http://www.my-site-domain.com/new-page.php" title="Custom Title Message!" id="special_id" class="special_class" target="_blank">New Page</a> |
Mailto-Links
Abschließend sehen wir uns an, wie Sie Mailto-Links in Ihren Anwendungen erstellen. Wir werden eine Funktion namens mailto() erstellen, die der Funktion anchor() sehr ähnlich ist, mit einem großen Unterschied: Wir werden eine Verschlüsselung in der HTML-Ausgabe implementieren, damit die E-Mail-Adresse nicht durch Spam gecrawlt werden kann. Spinnen, und wird die E-Mail-Adressen Ihres Kunden sicher halten.
Die Methode, mit der wir die E-Mail-Adresse ausblenden, verwendet die ziemlich beeindruckende PHP-Funktion str_rot13(), die einfach eine Zeichenfolge verwendet und alle alphabetischen Zeichen mit dreizehn Buchstaben im Alphabet verschiebt. Wenn Sie jemals zu Pfadfindern gegangen sind, erinnern Sie sich wahrscheinlich daran, wie Sie mit solchen Codes herumgespielt haben und entschieden haben, dass Sie wahrscheinlich ein Spion sein würden, wenn Sie erwachsen werden.
Die Chiffre gibt unseren Code verstümmelt aus. Anschließend können wir mithilfe einer JavaScript-Gegenmittelfunktion die Zeichen an dreizehn Stellen des Alphabets zurückziehen und ihre ursprüngliche Bedeutung wiederherstellen. Da diese Funktion jedoch clientseitig ist, werden nur die Gegenmittelaktionen ausgeführt, und der Text kehrt zu seinem normalen Selbst zurück, wenn er auf einem Bildschirm angezeigt wird. Daher haben Spinnen, Crawler und Spambots größtenteils keine Ahnung, was sie lesen.
Es ist wahrscheinlich erwähnenswert, dass es viele Methoden gibt, Mailto-Links zu verbergen, einige viel sicherer als diese, andere weniger. Ich verwende diese Methode gerne und habe noch nie Spam bei einem meiner Kunden gesehen. Erwähnenswert ist auch, dass die JavaScript-Methode selbst von Christoph Burgdorfer entwickelt wurde und folgendermaßen aussieht:
1 |
<script type="text/javascript"> |
2 |
document.write("Njrfbzr frperg fcl pbqr".replace(/[a-zA-Z]/g, function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);})); |
3 |
</script> |
Dies nimmt die verstümmelte Zeichenfolge "Njrfbzr frperg fcl pbqr" und verschiebt alle Zeichen, so dass die Anzeige auf Ihrem Bildschirm wie folgt aussieht:
1 |
Awesome secret spy code |
Wenn Sie jedoch den Quellcode überprüfen, den die Spider und Crawler sehen, wird dieses Ergebnis nicht erwähnt - es bleibt also verborgen.
Wir werden uns nicht die Vor- und Nachteile der Funktionsweise dieses JavaScript ansehen, da es sich schließlich um ein PHP-Tutorial handelt. Stattdessen werden wir untersuchen, wie wir dies in unserer neuen Funktion mailto() implementieren können.
1 |
function mailto($email, $text, $title, $extras) //1 |
2 |
{
|
3 |
$link = '<a href=\"mailto:' . $email; //2 |
4 |
$link = str_rot13($link); //3 |
5 |
|
6 |
$data = '<script type="text/javascript">document.write("'; //4 |
7 |
$data .= $link; //5 |
8 |
$data .= '".replace(/[a-zA-Z]/g, function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);})); |
9 |
</script>'; |
10 |
$data .= '"'; |
11 |
|
12 |
if ($title) //6 |
13 |
{
|
14 |
$data .= ' title="' . $title . '"'; |
15 |
}
|
16 |
else
|
17 |
{
|
18 |
$data .= ' title="' . $text . '"'; |
19 |
}
|
20 |
|
21 |
if (is_array($extras)) |
22 |
{
|
23 |
foreach($extras as $rule) |
24 |
{
|
25 |
$data .= parse_extras($rule); |
26 |
}
|
27 |
}
|
28 |
|
29 |
if (is_string($extras)) |
30 |
{
|
31 |
$data .= parse_extras($extras); |
32 |
}
|
33 |
$data .= ">"; |
34 |
|
35 |
$data .= $text; |
36 |
$data .= "</a>"; //7 |
37 |
return $data; //8 |
38 |
}
|
Schauen wir uns also an, was hier anders ist.
Wir können jetzt die folgende Syntax in unserer Datei index.php verwenden, um unseren Mailto-Link aufzurufen:
1 |
echo mailto('secret@emailaddress.com','Contact Me'); |
Wenn wir wie zuvor benutzerdefinierte Elemente benötigen, können wir weitere Variablen hinzufügen:
1 |
$extras = array('#special_id','.special_class','_blank'); |
2 |
echo mailto('secret@emailaddress.com','Contact me','Contact your good pal Barry.',$extras); |
Abschluss
Damit ist unser erster Ausflug in die PHP-Hilfsfunktionen abgeschlossen. Dies ist die Spitze des Eisbergs, und beim nächsten Mal werden wir im Namen der Formularhelfer einige komplexere Werkzeugs überprüfen.
Das Erstellen und Validieren von Formularen muss eine meiner Lieblingsbeschwerden sein, wenn ich sie von Grund auf neu erstelle. Es gibt viel sich wiederholenden Code, sorgfältiges Schreiben und die Möglichkeit von Fehlern. Eine Reihe von Funktionen, die sowohl korrekt strukturierte Formulare ausgeben als auch die Postdaten auf gültige E-Mail-Adressen, Kennwörter, Zeichenfolgenlänge usw. überprüfen, kann ein wahrer Lebensretter sein. Ah ja, das Erstellen von HTML-Formularen von Grund auf muss nicht so stöhnend sein, wie Sie zuvor gedacht haben.
Wenn Sie weitere Ideen haben, was in einer PHP-Hilfsfunktion wirklich hilfreich wäre, sollten Sie Ihre Ideen unbedingt kommentieren!



