|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Développeur Web Inscription : juillet 2009 Messages : 54 ![]() |
Bonjour,
je dois afficher une liste de produits (une centaine), et par souci d'esthétique je voudrais que toutes les lignes de cette liste aient une longueur similaire (ordre d'apparition de chaque produit indifférent). Pour l'instant je fais comme cela, mais c'est trop approximatif : Code :
Merci d'avance de votre aide! |
||
|
|
00
|
|
|
#2 | ||||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Hello
Tu peux faire ça de deux façon: - soit tu définis une taille maximum pour le conteneur de la chaine avec du CSS coté client (au rique que des lettres soient coupées ce qui est complêtement inhéstétique) - soit tu coupes / complêtes les chaines avec PHP. Prennons l'exemple suivant: Code :
Affiche: Code :
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||||
|
00
|
|
|
#3 |
|
Membre du Club
![]() Développeur Web Inscription : juillet 2009 Messages : 54 ![]() |
Merci Benjamin, mais je souhaiterais réaliser cela sans devoir tronquer des noms de produits.
Il me faudrait une fonction qui permette de mettre dans chaque ligne un nombre de lettres équivalent (à 2 ou 3 près) en jouant sur le nombre de mots par ligne. Par exemple : - raisin fraise coing kaki poire (30 lettres) - choux de Bruxelles pamplemousse (31 lettres) Une idée? |
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
pourquoi tu fais pas un text-align en CSS ?
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#5 | ||
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 239 ![]() |
Si tu veux couper ta chaine sur un espace (pour garder des mots entiers si la longueur du premier mot est inférieur à la longueur maximale désirée) tu peux faire :
Code :
Dans la fonction truncate, définir la variable $encodage selon ton encodage.
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
||
|
|
01
|
|
|
#6 | ||
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 239 ![]() |
... en option dans la deuxième partie de la fonction truncate tu peux mettre des points de suspension s'il reste des lettres ou des mots à afficher :
Code :
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
||
|
|
00
|
|
|
#7 | ||
|
Membre chevronné
![]() Inscription : mars 2005 Messages : 583 ![]() |
Hello,
Je crois pas qu'il existe une fonction de coupure de lignes qui respecte les règles de césure en PHP Du coup, vu ce que je comprends de la problématique, j'irais dans le sens de stealth35 et je laisserais HTML faire son travail. Un truc du genre : Code :
__________________
Pourfendeur de singletons en croisade
|
||
|
|
00
|
|
|
#8 | ||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Tiens avec ça on garde les mots entiers:
Code :
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||
|
00
|
|
|
#9 |
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 239 ![]() |
@Benjamin Delespierre
Je parierais bien 100 contre 1 que ma fonction, tout en étant plus simple, est plus performante que la tienne et le sera d'autant plus que les chaines à tronquer seront longues
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
|
|
00
|
|
|
#10 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
C'est juste: 0.24 sur 1000 entrées avec la tienne contre 0.45 sur 1000 entrées avec la mienne.
Ton algo est mieux pensé que le mien
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
|
|
#11 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
et moi ma fonction elle est 15 000x plus optimisé que la votre :
Code :
echo wordwrap(implode(' ', $mon_array), 50, '<br />');
__________________
http://blog.stealth35.com/ |
|
|
01
|
|
|
#12 | ||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
C'est pas tout à fait l'usage qu'on voulait au départ mais c'est vrai que ça marche comme ça.
J'ai fait ça pour clore le débat: Code :
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||
|
00
|
|
|
#13 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
mais ca pas du-tout ca qu'il veut...
il faire du justifier pas tronquer un texte...
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 239 ![]() |
Faut dire qu'on avait déjà étudié la question
Utiliser "strlen" est plus gourmand que "substr" sur des chaînes assez longues, et comme de plus ensuite tu explosais la chaîne pour faire des concaténations, mon pari n'était pas trop risqué
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
|
|
00
|
|
|
#15 | |
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 239 ![]() |
Citation:
Avec le tronquage de certains titres, suivis de points de suspension pour ceux qui ont été tronqués, on peut imaginer un "title" dans la balise html qui contiendrait le texte entier. En travaillant un peu les infobulles, ça pourrait être sympas. Bah sinon, on peut le faire à l'affichage en javascript : en mesurant la largeur effective du titre et puis en jouant sur le letter-spacing, dans une certaine mesure, pour réduire le texte à la valeur maximale autorisée, et si letter-spacing trop petit on tronque comme avec la fonction php.
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
|
|
|
00
|
|
|
#16 | |||
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
Citation:
Code :
__________________
http://blog.stealth35.com/ |
|||
|
|
00
|
|
|
#17 | |
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 239 ![]() |
Citation:
Donc du CSS, et s'il ne veut pas que des expressions (mots composés) soient coupées par un retour ligne ça peut se faire en javascript (si on veut bien faire les choses). Sinon au passage, pas bon ton exemple avec wordwrap : on ne peut quand même plus conseiller des fonctions incompatibles utf-8 de nos jours
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
|
|
|
00
|
|
|
#18 |
|
Membre du Club
![]() Développeur Web Inscription : juillet 2009 Messages : 54 ![]() |
Merci pour ces solutions intéressantes. Toutefois, il semble qu'aucune ne soit exactement ce que je veux, car je me suis mal exprimé (ou ce que je demande est impossible?)
En fait, j'ai un array avec une longue liste de mots et courtes expressions (issus d'une base de données) et je voudrais faire des lignes "justifiées" sans tronquer les mots ni me baser sur les espaces (car il y a des espaces dans les expressions). Je dois donc uniquement me baser sur le nombre de caractères par ligne, en jouant sur le nombre de mots/expressions par ligne ET sur l'ordre d'apparition des mots/expressions. En d'autres termes, il faudrait que la fonction décide "intelligemment" du placement des mots. Par exemple : s'il manque 15 caractères pour finir une ligne, elle prend un mot de 15 lettres, ou 2 mots de 7 lettres (+1 espace), ou 3 mots de 4 lettres (+2 espaces), etc. Si quelqu'un avait une solution miracle... Merci d'avance! |
|
|
00
|
|
|
#19 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
En effet c'est assez différent de ta demande de départ.
Ce que tu cherches à faire s'apparente plus à un tag cloud dans ce cas, il faudrait que tu cherches dans cette voie.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
Copyright © 2000-2012 - www.developpez.com