Bonjour à tous je suis depuis un certain temps le tuto créer un site web de A à Z de ce site:
au faite mois j'aimerais que c'est soit l'utilisateur qui édite un blog alors le problème est au niveau du slug ou l’url, on ne peut pas demander à un utilisateur de saisir un slug avec toutes ces contraintes (ex : ma-première-nuit-de-noce) c’est trop pertinent pour un utilisateur profane de le faire.
Alors il n’y a t-il pas une fonction php qui peut prendre automatiquement le titre du blog et y ajouter les - - - (les trait d’union) ?
Merci d'avance.

5 réponses


shinix
Réponse acceptée

Salut, tu peux le faire avec une fonction toute simple

function slugify($text)
{
    // replace non letter or digits by -
    $text = preg_replace('~[^\\pL\d]+~u', '-', $text);
    // trim
    $text = trim($text, '-');
    // transliterate
    if (function_exists('iconv'))
    {
        $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
    }
    // lowercase
    $text = strtolower($text);
    // remove unwanted characters
    $text = preg_replace('~[^-\w]+~', '', $text);
    if (empty($text))
    {
        return 'n-a';
    }
    return $text;
}
Lartak
Réponse acceptée

Bonjour.
Ce que tu voudrais c'est que le slug soit généré avant que les données du formulaire soit envoyées, dans ce cas là il te faut le faire via javascript.
Par contre, je n'en vois pas vraiment l'intérêt si le slug se retrouve dans un input qui sera de type hidden.
Autant laisser le formulaire être soumis et faire le traitement du slug juste avant que les données soit envoyé en base de données pour la sauvegarde.
Si encore il restait visible pour par exemple que l'utilisateur voit comment sera le slug au final avant qu'il ne soumette le formulaire, ça aurait une utilité, mais si c'est pour générer le slug dans un champ caché, c'est totalement inutile vu qu'il faudra que tu traites les données de ton formulaire après qu'il aura été soumis, ce sera un double travail pour rien.

Mn0073RF
Auteur

Merci bien j'essai d’implémenter la fonction et je vous dis quoi.

Mn0073RF
Auteur

Merci ça marche.
Mais ce que je veux en plus ce que quand un utilisateur ou l’administrateur saisi le titre de son blog directement cette fonction crée le slug et l’envoie directement sur la zone slug que je veux mettre à hidden.
Bref une action onchange qui fait passer directement le slug lors de la saisi. et où mettre tout ce codes ? dans le Controller ? dans les Postscontroller ? ou sur admin_edit parlant de l’administrateur ?.
Merci bien pour votre aide.

Mn0073RF
Auteur

C'est parfait j'ai opté pour ta proposition, de faire le traitement du slug juste avant que les données soient envoyé en base de données. merci bien c'est génial .