Avatar billede JJ77 Juniormester
10. januar 2006 - 19:44 Der er 5 kommentarer og
1 løsning

funktion som klipper tekst over mest hensigtsmæssigt. fx 30 ord

hvordan får jeg kaldt nedenstående funktion i det kodeeksempel jeg viser aller nederst på siden? Altså så den korter teksten ned på feltet "supplerendeTekst"


//  Funktion, der "klipper" en tekst over på det mest hensigtsmæssige sted (".", " ", )
// str klip(str tekst, int længde, int tolerance)

function klip($tekst, $laengde = 50, $tolerance = 10) // $laengde og $tolerance kan udelades
{
    $punktum  = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), "."); // position af punktum
    $mellemrum = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), " "); // position af mellemrum
    $mere      = "..."; // punktummer hvis mere tekst

    if (strlen($tekst) <= $laengde + $tolerance) {
        $slut_pos = strlen($tekst); // slutposition = slut på tekst, da denne er kortere end $laengde og $tolerance
        $mere = ""; // ikke andet
    } elseif ($punktum !== false) {
        $slut_pos = $laengde-$tolerance+$punktum; // slutposition = punktum
    } elseif ($mellemrum !== false) {
        $slut_pos = $laengde-$tolerance+$mellemrum; // slutposition = mellemrum
    } else {
        $slut_pos = $laengde; // slutposition $laengde (ikke noget at gøre - skær ord over)
    }

    return substr($tekst, 0, $slut_pos) . $mere; // udskriv del + evt. punktummer
}


Min kode
---------------------------------------------------------------
require_once("../members/common.php");

// Hent først data ud
$resultat = mysql_query("select * from salgAfProdukt");

// Kør så igennem for hver række
while ($raekke = mysql_fetch_array($resultat)) {
  echo "
  <tr>
  <td width=\"350\" valign=\"top\"><span class=\"mellem\"><b> ".$raekke['produkt']."</b></span><br><span class=\"lille\">".$raekke['supplerendeTekst']."</span></td>
  <td width=\"60\" valign=\"top\"><span class=\"mellem\">".$raekke['pris']."</span></td>
  <td width=\"150\" valign=\"top\"><span class=\"mellem\">".$raekke['postNr']."</span></td>";
}
Avatar billede barklund Nybegynder
10. januar 2006 - 19:56 #1
Du indsætter den vel bare?

<td width=\"350\" valign=\"top\"><span class=\"mellem\"><b> ".$raekke['produkt']."</b></span><br><span class=\"lille\">".klip($raekke['supplerendeTekst'])."</span></td>

Og vil du have den klippet til noget andet end 50 tegn, så angiver du en anden parameter. Jeg vil dog tillade mig at undre mig over, hvorfor der ikke blot bruges den indbyggede wordwrap :)

--
Morten Barklund
Avatar billede JJ77 Juniormester
10. januar 2006 - 20:02 #2
nu ser mit eksempel således ud: men det virker desværre ikke.. hvad var det med at bruge wordwrap?, er det smartere?


<table width="" border="0" cellspacing="2" cellpadding="0">
<tr>
        <td width='\"350\"' valign='\"top\"'><span class="stor"><b><u>Annonce</u></b></span></td>
        <td width='\"60\"' valign='\"top\"'><span class="stor"><b><u>Pris</u></b></span></td>
        <td width='\"150\"' valign='\"top\"'><span class="stor"><b><u>Område</u></b></span></td>
    </tr>
<?php
require_once("../members/common.php");
//  Funktion, der "klipper" en tekst over på det mest hensigtsmæssige sted (".", " ", )
// str klip(str tekst, int længde, int tolerance)

function klip($tekst, $laengde = 50, $tolerance = 10) // $laengde og $tolerance kan udelades
{
    $punktum  = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), "."); // position af punktum
    $mellemrum = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), " "); // position af mellemrum
    $mere      = "..."; // punktummer hvis mere tekst

    if (strlen($tekst) <= $laengde + $tolerance) {
        $slut_pos = strlen($tekst); // slutposition = slut på tekst, da denne er kortere end $laengde og $tolerance
        $mere = ""; // ikke andet
    } elseif ($punktum !== false) {
        $slut_pos = $laengde-$tolerance+$punktum; // slutposition = punktum
    } elseif ($mellemrum !== false) {
        $slut_pos = $laengde-$tolerance+$mellemrum; // slutposition = mellemrum
    } else {
        $slut_pos = $laengde; // slutposition $laengde (ikke noget at gøre - skær ord over)
    }

    return substr($tekst, 0, $slut_pos) . $mere; // udskriv del + evt. punktummer
}


// Hent først data ud
$resultat = mysql_query("select * from salgAfProdukt");

// Kør så igennem for hver række
while ($raekke = mysql_fetch_array($resultat)) {
  echo "
  <tr>
  <td width=\"350\" valign=\"top\"><span class=\"mellem\"><b> ".$raekke['produkt']."</b></span><br><span class=\"lille\">"klip.$raekke['supplerendeTekst']."</span></td>
  <td width=\"60\" valign=\"top\"><span class=\"mellem\">".$raekke['pris']."</span></td>
  <td width=\"150\" valign=\"top\"><span class=\"mellem\">".$raekke['postNr']."<br></span></td></tr>";
}

?>

</table>
Avatar billede JJ77 Juniormester
10. januar 2006 - 20:04 #3
sorry.. det virker sq... ups..
Avatar billede JJ77 Juniormester
10. januar 2006 - 20:05 #4
smider du ikke lige et svar... og mange tak for hjælpen;)
Avatar billede barklund Nybegynder
10. januar 2006 - 20:37 #5
Det kan du tro :)
Avatar billede barklund Nybegynder
10. januar 2006 - 20:49 #6
Tark for points :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester