Generare i "Pretty Permalinks"

Matteo - 9 mar 2006 02:32

Anche questo sito entra nel mondo dei permalink con tutto codice self-made.

Vediamo ad esempio le convenzioni adottate da me per generare un permalink:

  1. Indicare per prima la tabella di appartenenza: per il weblog non aggiungere nulla, per i koan aggiungere 'koan', per progetti aggiungere 'progetti'.
  2. Per l'inglese aggiungere 'ing'; non mi piace particolarmente, preferirei 'en' e che coinvolgesse anche 'progetti', ma per motivi implementativi ho fatto così.
  3. Se è attivo un filtro su un utente, aggiungere il nome dell'utente: Juna, Matteo...
  4. Se è attivo un filtro su una categoria, aggiungere il nome pulito della categoria: 'generale', 'flashback-bits'...
  5. Se è attivo un filtro sulla data e il link non è per un articolo, aggiungere la data in formato anno/mese/giorno: es. '2006/03/09'. Viene accettato anche un filtro parziale solo sull'anno o sull'anno più mese.
  6. Se il link è ad un articolo, aggiungere la data ed il titolo pulito dell'articolo con estensione finale html: es. '2006/03/09/generare-i-pretty-permalinks.html'
  7. Se il link è ad un rss, aggiungere rss come ultimo termine.

Quando dico che un nome o un titolo devono essere puliti intendo dire che passano attraverso una funzione php che li depuri di caratteri non simpatici su una url, spazi in eccesso ecc.. Il permalink viene salvato nel database insieme all'articolo o alla categoria e può essere modificato manualmente nel caso in cui il risultato generato automaticamente non sia soddisfacente. La funzione utilizzata è questa:

function genPermaLink($str)
{
// eventuali entita' vengono ritrasformate in testo e
// tutti i caratteri diventano minuscoli
$str = strtolower($str);
$str = strtr($str, array(
'à' => 'a', 'á' => 'a',
'è' => 'e', 'é' => 'e',
'ì' => 'i', 'í' => 'i',
'ò' => 'o', 'ó' => 'o',
'ù' => 'u', 'ú' => 'u'));
$str = html_entity_decode($str);
// sostituisce i caratteri non alfanumerici con trattini
$str = preg_replace('/[\W]+/','-',$str);
// elimina trattini iniziali o finali
$str = preg_replace('/\-+$|^\-+/','',$str);
// si assicura di non avere piu' di 30 caratteri
$parts = explode('-', $str);
$str = '';
foreach($parts as $part) {
if($str=='') {
$str = $part;
continue;
}
$l = strlen($str);
$p = strlen($part)+1;
if($l+$p > 30) break;
$str .= "-$part";
}
// converte i caratteri non ascii in codici esadecimali
$str = rawurlencode($str);

return ($str);
}

Alcuni esempi di permalink generati:

  • /2006/05/03/articolo-di-esempio.html - un articolo del blog scritto il 3 maggio 2006 e che si chiama probabilmente "Articolo di esempio".
  • /koan - semplicemente la pagina generale dei koan.
  • /koan/Juna - l'indice dei koan scritti da Juna.
  • /koan/Juna/2006/04 - l'indice dei koan scritti da Juna nell'aprile del 2006.
  • /progetti/Matteo/c-c - l'indice dei progetti di Matteo nella categoria C/C++.
  • /Matteo/delirio-mediatico/rss - l'rss relativo agli articoli del weblog scritti da Matteo nella categoria Delirio Mediatico.
 
Weblog Koan Progetti Foto Contatti DW.net map