Come ricavare l’url senza querystring con strtok e $_SERVER[“REQUEST_URI”]

I cms sono una grande comodità, ma qualche volta, come si suol dire, si perdono in un bicchiere d’acqua!

Capita, infatti, che su IPB si possa cambiare il titolo (<title>…</title>) delle pagine (ad esempio le pagine singole nella sezione tools), ma non quello dei database senza cambiare anche il riferimento nei database stessi e quindi, ad esempio, il database “Articoli” (questo contenente l’articolo che state leggendo), che è impostato anche come homepage, non può avere un tag title diverso da “Articoli”!

Quindi, in teoria, l’unica cosa da fare sarebbe impostare un nuovo titolo allo stesso database, non chiamandolo più “Articoli”:

articoli

e non è ciò che voglio … insomma, storia complicata e a tratti decisamente ironica!

Così mi tocca agire manualmente e “fixare” il problema, assegnando un titolo customizzato specifico per l’homepage.

 

Come?

Potrebbe sembrare complicato, ma, semplicemente, cerco se l’url è quello dell’homepage (comprese querystring) e, se sì, forzo un nuovo titolo.

 

Un esempio?

Questo il titolo dinamico che il cms mi fornisce nel template:

{expression="output.getTitle( $title )"}

Come possiamo ben notare/intuire, il titolo ci viene fornito dinamicamente dalla variabile, ok?

Dunque devo anticipare questa variabile e modificarla se – e solo se – sono nell’homepage, ci siamo?

Il problema è “come capire quando siamo nell’homepage”?

Potrebbe bastare $_SERVER["REQUEST_URI"] per controllare dove siamo, ma rimane il problema delle eventuali querystring.

Da qui la domanda sorge spontanea: “come rimuovere le querystring (o variabile $_GET) da  $_SERVER["REQUEST_URI"] così da fare una verifica più sicura e precisa?

Beh, c’è chi usa explode, chi *_replace… Poi, invece, ho scoperto la funzione “strtok” e… mi è piaciuta!

 

Perfetto! Adesso so cosa modificare e che funzione utilizzare.
Adesso son pronto ad inserire, appena prima del <title>***</title>, il mio codice php!

{{$req_uri = strtok($_SERVER["REQUEST_URI"],'?'); $title = ($req_uri == "/" || $req_uri == "/homepage/") ? "My Custom Title" : $title;}}
<title>{expression="output.getTitle( $title )"}</title>

le parentesi sono il modo che ha ipb per scrivere la sintassi php – invece del classico <?php *** ?>

 

Spiego il tutto, non temete!

$req_uri = strtok($_SERVER["REQUEST_URI"],'?');

setto una variabile  $req_uri basata su $_SERVER["REQUEST_URI"] ma senza querystring grazie a strtok() :

$title = ($req_uri == "/" || $req_uri == "/homepage/") ? "New Title" : $title;

e vado di operatore ternario…

cerco se $req_uri (request_uri senza querystring) è “/” o “/homepage/”

se è uno di questi setto $title (il nostro titolo) con il nuovo valore, altrimenti, se l’url richiesto è diverso da questi, setto la variabile su se stessa (rimane com’era in origine).

 

Piuttosto semplice, non trovate? 😎

Questo è un piccolo esempio di come, a volte, i cms possano avere bisogno di interventi manuali e con questi piccoli codici (giusto una riga di php) possiamo risolvere i nostri problemi!

Sia chiaro che questo l’ho usato per ipb, ma può benissimo essere applicato, con le dovute correzioni, a qualunque situazione!

 

Risultato:

Prima:

old_url

Dopo:

new_url

 

Un buon titolo, soprattutto per l’homepage, è davvero importante e quindi son contento di averlo sistemato 🙂

 

Bene, è tutto!

Spero possa tornarvi utile 😉

 

Per dubbi, domande, opinioni o altro, non esitate a scrivere!




Lascia un commento