Mêttre des "/" entre chaque Tags

Eléphant du PHP | 54 Messages

05 oct. 2008, 04:25

Bonjour,

J'ai une question qui m'empêche d'avancer.
Je me suis créé un blog et quand je veux ajouter une new, dans mon formulaire, je dois obligatoirement entrer un ou plusieur tags (dans un zone de texte) et pour chaque tag je demande de mêttre une virgule entre chaque, de la facon suivant:

Tags: News, Jeu, PHP, Action, etc.
(J'enregistre sa dans ma BDD)

Ensuite je sais qu'il est possible de séparer une chaîne de caractère et j'aimerais bien le faire.
Je voudrais que le code qui gère la chaîne de caractère (juste avant l'affichage).
Prenne tout les tags, qu'il change leur facon d'être affiché de la facon suivante:
News, Jeu, PHP, Action -> News / Jeu / PHP / Action
Et qu'il ne retienne que les 3 premiers et les afficher dans ma page.
Aisi s'il y a plus de 3 tags, que lors de l'affichage que le code rajoute "..." à la fin de la facon suivant:

1- Il prend la chaîne: News, Jeu, PHP, Action
2- La transforme ainsi: News / Jeu / PHP / Action
3- Affiche comme cecis: News / Jeu / PHP ...

Mais quand il n'y a pas plus de 3 tags j'aimerais ne pas afficher les "..."
J'ai cherché et suivis le cours pour ce type de language sur le Site Du Zéro, mais je m'y perd complêtement!

Quelqu'un pourrait-il m'éclaircir?
Est-ce possible de faire ce genre de manipulation complexe? (bein complexe...il existe surement plus complexe :roll: )

Merci à celui ou celle qui m'aidera!
Maxime :wink:
S'il faut vivre longtemps, vaux mieu le faire avec le sourire.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

05 oct. 2008, 09:35

Bonjour,

Voici la solution que j'utiliserai,

1) je ferrais un explode(", ", $tags, 4)
", " car ce qui sépare tes tags c'est si j'ai bien compris une virgule suivi d'un espace (si l'espace n'est pas toujours mis, tu peux faire un explode sur la virgule puis faire un trim() sur chaque tag pour supprimer les espaces en trop.)
En indiquant en 3ème paramètre le chiffre "4", j'indique que le tableau que je vais récupérer devra comporter les 3 premiers éléments dans les 3 premières cellules du tableau puis tous les autres dans la 4ème cellule (bien sûr si il y a 3 tags ou moins seul les premières cellules seront remplis)
http://fr.php.net/explode
http://fr.php.net/trim

2) Ensuite un count() sur le tableau pour savoir combien j'ai récupéré de tags.
Si les 4 cellules du tableau sont remplis (=> j'ai + de 3 tags), je remplace la valeur de ma 4ème cellule (qui contient tous les tags inutile) par "..."

3) Enfin je fais un implode(" / ",$tablo) pour obtenir le résultat voulu :)
http://fr.php.net/implode
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 54 Messages

05 oct. 2008, 17:36

Wow,
Merci beaucoup de ton aide!
Je teste sa et je t'en donne des nouvelle!

Encore Merci!
Maxime

P.S. J'ai pas encore testé mais avec ton exemple, quand il fais l'affichage sa va pas donner quelque chose du genre? :
Tag(s): Action / Jeu / New /...
ou
Tag(s): Action / Jeu / New /

Quand au fond il faudrait qu'il donne quelque chose comme sa:
Tag(s): Action / Jeu / New...
ou
Tag(s): Action / Jeu / New
S'il faut vivre longtemps, vaux mieu le faire avec le sourire.

Eléphant du PHP | 54 Messages

01 nov. 2008, 04:25

J'enlève le statut "Résolu" car après un peu de temps de relâche je suis de retour et j'ai bien testé ce que @rthur m'a dit... Et comme prévu il y a toujours un "/" en trop (comme expliqué dans mon autre post).

Comment éviter ce genre de problème....
Est-ce possible de restreindre l'implode aux 2 premières cellules de mon tableau formé?

Merci beaucoup de votre aide! :wink:

Maxime
S'il faut vivre longtemps, vaux mieu le faire avec le sourire.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

01 nov. 2008, 11:35

Va falloir faire un petit effort de ton côté pour que tu réussisses à avancer par toi même. ;-)

Un petit str_replace() pour remplacer "/..." juste par "..." suffit largement
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 54 Messages

01 nov. 2008, 21:32

ouai, sa je savais...
Le problème c'est quand il n'y a pas plus que 3 tags...
donc pas la présence de "..." à la fin...

Donc je ne peux pas faire un :

str_replace() pour remplacé " / " par " "
C'est la que je bloque...

C'est pour sa que je demandais:
Est-ce possible de restreindre l'implode aux 2 premières cellules de mon tableau formé?

Max
S'il faut vivre longtemps, vaux mieu le faire avec le sourire.