zu langen string mit Punkten darstellen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anzahl
anzeigen
beispiel
bild
bringen
buchstabe
code
datei
ende
langem namen
pixel
schrift
schriftart
string
super wichtiges dokument
text
umdrehen
unterschied
url
zeichen
- 
    
    Hallo 
 
 Ich würde gerne eine Liste von Dateien in einem Ordner ausgeben. Mein Problem ist aber, dass sich die Seite verzieht wenn der Dateiname länger ist als der <div> breit ist.
 
 Deswegen würde ich gerne den Dateinamen gekürzt darstellen, also z.B.:
 
 01-super-wichtiges-dokument-mit-langem-namen.pdf
 wird zu:
 01-super-w[.....]-namen.pdf
 
 Was ich weiß ist, dass man mit PHP nach x Zeichen etwas ersetzen kann. Wenn ich aber nur die ersten 5 und die letzten 5 Zeichen anzeigen lasse, dann gibt es bei den Dateibreiten gehörige Unterschiede (WWWWW ist breiter als iiiii).
 
 Kann ich irgendwie den String auf eine gewisse Pixelbreite bringen? Irgendwie muss das doch gehen. 
 
 Google hilft mir da nicht viel weiter, ich fand z.B. eine Funktion, in der die Breite eines jeden Buchstaben angegeben ist und die "so ungefähr" die Breite berechnet, bloß müsste ich dann eben einzeln alles eintragen und dann kompliziert die Anzahl der Buchstaben berechnen, die noch angezeigt werden kann.
 
 Schriftart ist übrigens Verdana mit <h2> Gewünschte Maximalbreite des Strings ist 300 Pixel.
 
 
 mfg  
- 
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden! lima-city: Gratis werbefreier Webspace für deine eigene Homepage 
- 
    
    voloya schrieb: Mit PHP kannst du das nie erreichen, da du nicht sicher weißt welcher Schriftfont beim Client tatsächlich verwendet wird... du kannst mit PHP maximal den String in ein Bild rendern und das Bild zurückgeben, was aber auch nicht gut ist.
 Kann ich irgendwie den String auf eine gewisse Pixelbreite bringen?
 
 Was du maximal machen kannst ist clientseitig mit JavaScript schaun wie breit dein Container ist und dementsprechend den String darin solang verkürzen bis die Länge stimmt.
 
 Oder du nimmst einen Fixed-Width-Font (wie Courier), dann sind alle Buchstaben gleich lang und du tust dir leichter bei der Breitenberechnung.
- 
    
    voloya schrieb: 
 ... dann gibt es bei den Dateibreiten gehörige Unterschiede (WWWWW ist breiter als iiiii).
 
 ... Schriftart ist übrigens Verdana mit <h2> Gewünschte Maximalbreite des Strings ist 300 Pixel.
 
 
 doch, bei Schritart "mono" und "Courier" ist die Breite aller Buchstaben gleich
 (gibt evtl auch noch andere)
 
 CSS Beispiel:
 
 .mytext { font-family: "Courier New", Courier, mono; }
 
 oder direkt mit style-Attribut
 
 <div style="font-family: "Courier New", Courier, mono;">
 <br /> 5x i = iiiii
 <br /> 5x W = WWWWW
 </div>
 
 BSP:
 5x i = iiiii 5x W = WWWWW 
 
 
 Damit kannst du (durch Versuche) zumindest nahe an gewünschte Breite ran kommen
 also je nach Schrift-Größe ... Testen und Zählen, wieviele Zeichen in die 300px passen
 :)
 
 
 PS: vielleicht gibt es ja auch was in CSS um die Breite je Buschstabe zu bestimmen
 ich kenne jetzt nur letter-spacing, also für den Abstand zwischen den Buschstaben,
 aber das hilft hier wohl nicht weiter
 Beitrag zuletzt geändert: 10.6.2012 21:24:11 von grgiko
- 
    
    Hallo 
 
 grgiko schrieb: 
 doch, bei Schritart "mono" und "Courier" ist die Breite aller Buchstaben gleich
 (gibt evtl auch noch andere)
 
 CSS Beispiel:
 .mytext { font-family: "Courier New", Courier, mono; }
 
 
 Vielen Dank! Das war zwar nicht ganz das wonach ich suchte, aber es erfüllt seinen Zweck voll und ganz. Zudem schaut die Schrift auch wesentlich besser aus als Verdana.
 
 Wo wir schonmal hier sind, falls jemand Lust hat mir bei der Implementierung mit PHP zu helfen:
 
 x Buchstaben + ... + x Buchstaben
 
 1. strlen (string) > 21
 2. stringneu = substr (string, 0,9) .'...';
 
 ^ damit hätte ich schonmal "9 Buchstaben + ..."
 
 Wie bekomme ich die anderen 9? Muss ich das mit strrev umdrehen, 9 Zeichen abschneiden und wieder umdrehen oder gibt es da eine einfachere Lösung? 
 
 Vielen Dank und
 mfg 
 
- 
    
    voloya schrieb: 
 ... Wie bekomme ich die anderen 9?...
 und gegessen ;)$txt = '01-super-wichtiges-dokument-mit-langem-namen.pdf'; echo $txt = substr($txt, 0, 9) . '...' . substr($txt, -9);
 
 ich würde allendings auf hover den ganzen namen doch noch einblenden.
 Beitrag zuletzt geändert: 10.6.2012 23:04:54 von czibere
- 
    
    entweder mit CSS a:hover einen Tool-Tip einblenden
 oder (einfacher) direkt mit title="...." im Link
 
 und ich würde noch prüfen, ob der Link-Name überhaupt länger ist, als gewünscht
 BSP ein solcher Link-Name darf max. 21 Zeichen lang sein (9 + 3 + 9) (die 3 ist für ...)
 
 $files_dir = 'dateien/'; $max_zeichen = 21; $long_name = 'super-wichtiges-dokument-mit-langem-namen.pdf'; // ---- 45 Zeichen if (strlen($long_name) > $max_zeichen) { $short_name = substr($long_name, 0, 9) . '...' . substr($long_name, -9); } else { $short_name = $long_name; } $link_ausgabe = "<a href=\"".$files_dir.$long_name."\" target=\"_blank\" title=\"".$long_name."\">".$short_name."</a>"; echo "<div class=\"linkbox\">\n"; echo "<span class=\"mytext\">".$link_ausgabe."</span>\n"; echo "</div>\n";
 
 Ergebnis:
 (Link-Text mit 21 Zeichen = 9 + 3 + 9)super-wic...namen.pdf
 
 <div class="linkbox"> <span class="mytext"><a href="dateien/super-wichtiges-dokument-mit-langem-namen.pdf" target="_blank" title="super-wichtiges-dokument-mit-langem-namen.pdf">super-wic...namen.pdf</a></span> </div> 
 
 
 ohne die Prüfung, ob der Link-Name größer als die maximale Zeichenlänge ist
 würde ein eigentlich passender Links evt. blöd zerschnippelt ...
 
 BSP: (Link-Name mit 17 Zeichen)
 
 kurz_linkname.pdf
 
 würde zu: (21 Zeichen)
 
 kurz_link...kname.pdf
 
 also sogar 4 Zeichen länger
 weil bestehend aus: 9 Zeichen von vorne, dan ..., dann 9 Zeichen von hinten (9 + 3 + 9)
 auch wäre das k dann sogar doppelt :(
 
 also wenn die Anzahl der Zeichen kleiner oder gleich (nicht größer) als die Maximal-Zeichen,
 dann macht die Trennung da wohl eher keinen Sinn
 
 
 Beitrag zuletzt geändert: 11.6.2012 12:48:55 von grgiko
- 
    
    Du kannst die Datei einfach umbenneen oder als Link anzeigen, dann wird ein von dir eingegebener Text angezeigt.
 Bsp:
 <a href="datei-mit-langem-name.pdf">angezeigter Text</a>
- 
    
    Sehr viel einfacher geht es mit css, wenn du keinen besonderen Wert darauf legst, dass Anfang und Ende angezeigt werden:
 
 text-overflow: ellipsis;
 white-space: nowrap;
 
 Dies sorgt dafür, dass der Link dann in etwa so angezeigt wird:
 01-super-wichtiges-dokument-m...
 
 text-overflow: ellipsis; sorgt für die '...' am Ende und white-space: nowrap; verhindert, dass der Text umgebrochen wird.
- 
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden! lima-city: Gratis werbefreier Webspace für deine eigene Homepage 

