kostenloser Webspace werbefrei: lima-city


zu langen string mit Punkten darstellen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    voloya

    voloya hat kostenlosen Webspace.

    Hallo :wave:

    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. :wow:

    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 :wave:
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    voloya schrieb:
    Kann ich irgendwie den String auf eine gewisse Pixelbreite bringen?
    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.

    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.
  4. 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
  5. Autor dieses Themas

    voloya

    voloya hat kostenlosen Webspace.

    Hallo :wave:

    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? :wow:

    Vielen Dank und
    mfg :wave:
  6. voloya schrieb:
    ... Wie bekomme ich die anderen 9?...
    $txt = '01-super-wichtiges-dokument-mit-langem-namen.pdf';
    echo $txt = substr($txt, 0, 9) . '...' . substr($txt, -9);
    und gegessen ;)

    ich würde allendings auf hover den ganzen namen doch noch einblenden.

    Beitrag zuletzt geändert: 10.6.2012 23:04:54 von czibere
  7. 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:
    super-wic...namen.pdf
    (Link-Text mit 21 Zeichen = 9 + 3 + 9)

    <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
  8. 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>
  9. 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.
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!