Qui ho un bel dilemma e vorrei ricevere alcuni suggerimenti dalla comunità. Ecco il mio problema:Identificatore frammento di elaborazione PHP nell'URL
Ho creato un sito Web con molti contenuti dinamici, tutti i contenuti vengono estratti tramite AJAX e visualizzati tramite JS. Il modo in cui sto attualmente consente collegamenti diretti per il mio contenuto è modificando l'identificatore di frammento al volo con JS, ecco un esempio:
http://www.mysite.com/home#/123
dove 123 è l'ID del contenuto. Quando il contenuto è chiuso, rimuove nuovamente l'identificatore di frammento.
Questo funziona meravigliosamente, e quando le persone caricano la pagina la mia richiesta AJAX sta richiedendo con successo l'articolo "123". Ma ho appena implementato un pulsante simile a Facebook su tutti gli articoli, e ora ho colpito un muro di mattoni.
Fondamentalmente, il modo in cui Facebook trova l'anteprima, i titoli e l'URL da associare al contenuto "piaciuto" è quello di controllare i meta tag dell'URL trasmessi in fb come iframe. Lo fa facendo una richiesta GET all'URL, controllando il contenuto dei meta tag e quindi visualizzandoli su Facebook.
Il problema è che gli identificatori di frammenti non vengono passati al server, quindi non ho modo in PHP (che io sappia) di generare dinamicamente questi meta tag con il contenuto dell'articolo specificamente richiesto.
Per esempio, ho voluto essere in grado di fare qualcosa del genere:
$id_vals = get_id_values($hash_fragment);
echo '<meta property="og:title" content="'.$id_vals['title'].'" />';
Il tuo primo pensiero è probabilmente: Perché non utilizzare una richiesta GET o stringa di query? cioè .:
http://www.mysite.com/home?id=123
Tuttavia, il problema di questo approccio è che Javascript non può cambiare dinamicamente questa porzione di un URL, è possibile modificare solo l'identificatore di frammento. Ciò significa che tutti i link diretti ai nostri articoli richiederanno l'aggiornamento della pagina. Questo va contro il nostro intero approccio 'dinamico', che potrei aggiungere è davvero bello :)
Quindi sono un po 'perplesso al momento. L'unica semi-soluzione che posso pensare è di utilizzare un approccio di entrambi:
Nelle richieste fb, utilizzare i parametri get e per i collegamenti diretti utilizzare l'identificatore di frammento.
Ma questo pone i seguenti problemi:
- Se un collegamento diretto viene incollato su Facebook da un utente che includerà l'identificatore di frammento, e meta-dati corretti non verranno visualizzati su Facebook.
- Avrei bisogno di fare qualche strana magia di reindirizzamento per correggere il formato dell'URL per rimuovere l'ID (ad esempio, rilevare se il parametro GET è passato e reindirizzare all'identificatore del frammento equivalente). Ma non so se l'FB seguirà anche il reindirizzamento e recupererà i meta tag dalla pagina reindirizzata anziché dalla prima pagina, il che renderebbe comunque questa soluzione inutile.
Ci scusiamo per il muro di testo! Apprezzo ogni input che puoi fornire.
EDIT: Ho appena testato la mia soluzione proposta che coinvolge una combinazione di entrambi, e posso confermare Facebook segue il reindirizzamento, quindi questa soluzione non funziona affatto. Questo è deprimente!
edit Un possibile modo per implementare la mia idea 'mix' è quello di utilizzare un window.location reindirizzare invece di una chiamata di reindirizzamento intestazione PHP(), in modo da Facebook recupera i meta tag dalla pagina originale, per chi di te con un problema simile.
Grazie. Funzione
Perché il Javascript non può modificare i parametri GET dell'URL? –
Vorrei che tutti i nuovi poster su SO mostrassero la quantità di sforzi e ricerche che hai mostrato ... – jprofitt
Cheers jprofitt! Scott: I parametri GET non sono modificabili da JavaScript senza causare un reindirizzamento. Window.location tratta gli identificatori di frammenti e interroga le stringhe in modo diverso. – scrapii