Ich habe ein ziemliches Dilemma hier und möchte einige Anregungen aus der Community. Hier ist mein Problem:PHP Verarbeitung Fragment Identifier in URL
Ich habe eine Website erstellt, die viele dynamische Inhalte hat, alle Inhalte werden über AJAX gezogen und über JS angezeigt. Die Art, wie ich bin derzeit eine direkte Anbindung an meine Inhalte erlaubt ist, indem die Fragmentbezeichner on the fly mit JS ändern, hier ein Beispiel:
http://www.mysite.com/home#/123
Wo 123 die ID des Inhalts ist. Wenn der Inhalt geschlossen wird, wird die Fragmentkennung wieder entfernt.
Das funktioniert wunderbar, und wenn die Leute die Seite laden, wird meine AJAX-Anfrage erfolgreich den '123' Artikel anfordern. Aber ich habe gerade einen Facebook-Like-Button auf allen Artikeln implementiert, und jetzt habe ich eine Mauer getroffen.
Grundsätzlich ermittelt Facebook anhand der Thumbnails, Titel und URLs, die mit Ihrem "geliebten" Inhalt verknüpft werden sollen, die Metatags der URL, die wie iframe an den fb übergeben werden. Dazu wird eine GET-Anfrage an die URL gestellt, der Inhalt der Meta-Tags geprüft und anschließend auf Facebook angezeigt.
Das Problem ist, dass Fragment-IDs nicht an den Server übergeben werden, also habe ich keine Möglichkeit in PHP (die ich kenne), diese Meta-Tags dynamisch mit dem Inhalt des speziell angeforderten Artikels zu generieren.
Zum Beispiel wollte ich in der Lage sein, so etwas zu tun:
$id_vals = get_id_values($hash_fragment);
echo '<meta property="og:title" content="'.$id_vals['title'].'" />';
Ihr erster Gedanke ist wohl: Warum nicht eine GET-Anforderung oder Query-String verwenden? d.h .:
http://www.mysite.com/home?id=123
jedoch das Problem mit diesem Ansatz ist, dass Javascript nicht dynamisch diesen Teil einer URL zu ändern, kann es nur die Fragmentbezeichner ändern. Dies bedeutet, dass alle direkten Links zu unseren Artikeln Seitenaktualisierungen erfordern. Dies geht gegen unseren gesamten "dynamischen" Ansatz, den wir haben - was ich hinzufügen kann, ist wirklich nett :)
Also bin ich im Moment ziemlich ratlos. Die einzige Semi-Lösung, die ich mir vorstellen kann, ist, einen Ansatz von beiden zu verwenden:
In den fb like Anfragen verwenden Sie get Parameter und für direkte Links verwenden Sie Fragment-ID.
Aber das wirft folgende Probleme auf:
- Wenn ein direkter Link auf Facebook von einem Benutzer eingefügt wird, wird es die Fragmentbezeichner umfassen, und die richtigen Meta-Daten werden auf Facebook nicht angezeigt werden soll.
- Ich würde einige seltsame Umleitung Magie tun müssen, um das Format der URL zu beheben, um die ID zu entfernen (d. H. Erkennen, ob GET-Parameter übergeben und umleiten, um das Fragment Bezeichner entspricht). Aber ich weiß nicht, ob FB auch der Weiterleitung folgen und die Metatags von der umgeleiteten Seite statt von der ersten Seite holen würde, was diese Lösung tatsächlich nutzlos machen würde.
Sorry für die Wand des Textes! Schätzen Sie alle Eingaben, die Sie bereitstellen können.
EDIT: Ich habe gerade meine vorgeschlagene Lösung mit einer Kombination aus beidem getestet, und ich kann bestätigen, Facebook folgt der Umleitung, so dass diese Lösung überhaupt nicht funktioniert. Das ist deprimierend!
EDIT EDIT: Eine Möglichkeit, meine ‚Mix‘ Idee umzusetzen ist ein window.location umleiten anstelle einer PHP header() Anruf-Weiterleitung zu verwenden, so Facebook die Meta-Tags aus der ursprünglichen Seite, für diejenigen abruft von dir mit einem ähnlichen Problem.
Danke.
Warum kann Javascript die GET-Parameter der URL nicht ändern? –
Ich wünschte, alle neuen Poster auf SO könnten die Menge an Aufwand und Forschung zeigen, die Sie gezeigt haben ... – jprofitt
Prost jprofit! Scott: Die GET-Parameter können nicht von JavaScript geändert werden, ohne dass eine Umleitung erfolgt. Window.location behandelt Fragmentbezeichner und Abfragezeichenfolgen unterschiedlich. – scrapii