Bonsoir,
J'ai suivi le tuto sur l'url Rewriting. Tout fonctionne mais j'ai une question en plus et je ne trouve pas.
Quand je veux mettre une news de plus dans ma table "news" dans mon espace admin, comment le champs "url" pourrait-il se remplir avec le même champs que le champs "titre" ?
J'ai trouvé comment récupérer l'id dans ce champs mais ce que je veux c'est le titre
ajoutnews.php :

$test = $cnx->query('SELECT MAX( id ) FROM billets');
    $last = $test->fetch();
    $url = $last[0] + 1;

Merci

1 réponse


Si j'ai bien compris, tu veux un système de slug?
bref si c'est le cas en supposant que tu as ton titre dans $titre

$requete= "SELECT B.titre FROM billets AS B WHERE B.id =".$id;
$titre= $cnx->query($requete);

le code suivant peut te créer le slug à utiliser comme url

setlocale(LC_CTYPE, 'fr_FR');
    $slug = iconv('UTF-8', 'ASCII//TRANSLIT', $titre); // En gros ca change les é è ê en e les à en a etc....
    $slug = strtolower(trim($slug)); // je prend le titre, je le met en minuscule et j'enl_=èves les espaces à droite et à gauche
    // replace all non valid characters and spaces with an underscore
    $titre = preg_replace('/^a-z0-9-]/', '_', $titre); // dans le titre qui est devenu le slug, tout ce qui n'est pas de a à z ou de 0 à 9 ou le tiret moyen est changé en "_"
    $titre = preg_replace('/-+/', "_", $titre); je change tout les tirets moyens (une ou plusieurs occurence de suite) sont remplacà par un tiret bas "_"

Par exemple:
si $titre=" manger en toute sécurité";
alors $slug=" manger_en_toute_securite";

tu peux par exemple faire une fonction

function slug($chaine, $remplacement = '_') {
    return preg_replace('/-+/', $remplacement, preg_replace('/^a-z0-9-]/', $remplacement, strtolower(trim(iconv('UTF-8', 'ASCII//TRANSLIT', $chaine))));
}

vu que plusieurs personnes poses des questions sur le forum php en faisant référence à cakephp je tiens à préciser que si tu utilises cakephp tu as la fonction Inflector::slug($word, $replacement = '_') qui fait cela pour toi