Jeg vil gerne vise en overskrift hentet fra en Mysql db som f.eks.:
Dette er en enme....
i stedet for
Dette er et emne der er for langt til at st� p� siden hvor det skal vises
Jeg har pr�vet at Google det men ved ikke rigtigt hvad jeg skal lede efter
Lars
Jeg ville bare lave det direkte i SQL querien..
Kig f.eks. p� disse:
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_left
http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat
En konstruktion i stil med
SELECT IF(LENGTH(`emne`)>15,CONCAT(LEFT(`emne`,12),'...'),`emne`) AS
`NytEmne`
Skulle kunne g�re det.. Den vil returnere hele emnet hvis det er under
15 tegn langt, ellers kun de f�rste 12 tegn efterfulgt af ... det er dog
utestet..
Du kan ogs� bruge left funktionen i PHP, og g�re det samme der.. Uanset
hvad, ville jeg personligt smide en title="fuld emne linje" p� emnet, s�
vil det for det meste blive vist i fuld l�ngde, n�r man holder musen
over det.
- Chano Andersen
Den nemme m�de:
$titeltekst = "Dette er et emne der er for langt til at st� p� siden
hvor det skal vises";
// Tager de f�rste 15 tegn og smider "..." efter
if(strlen($titeltekst) > 15) {
$overskrift = substr($titeltekst,0,15)."...";
} else {
$overskrift = $titeltekst;
}
echo $overskrift; // returnerer "Dette er et emn..."
Den fulde overskrift kan s� smides ind i en title, som Chano Andersen
foresl�r:
echo "<span title=\"$titeltekst\">$overskrift</span>";
og til dem som ikke vil have det ender med
Dette er et em...
Eller dem som har html i sin tekst
echo preview_text($titeltekst, 15, true);
function preview_text($TEXT, $LIMIT, $TAGS = 0) {
// TRIM TEXT
$TEXT = trim($TEXT);
// STRIP TAGS IF PREVIEW IS WITHOUT HTML
if ($TAGS == 0) $TEXT = preg_replace('/\s\s+/', ' ',
strip_tags($TEXT));
// IF STRLEN IS SMALLER THAN LIMIT RETURN
if (strlen($TEXT) < $LIMIT) return $TEXT;
if ($TAGS == 0) return substr($TEXT, 0, $LIMIT) . " ...";
else {
$COUNTER = 0;
for ($i = 0; $i<= strlen($TEXT); $i++) {
if ($TEXT{$i} == "<") $STOP = 1;
if ($STOP != 1) {
$COUNTER++;
}
if ($TEXT{$i} == ">") $STOP = 0;
$RETURN .= $TEXT{$i};
if ($COUNTER >= $LIMIT && $TEXT{$i} == " ") break;
}
return $RETURN . "...";
}
}
> // STRIP TAGS IF PREVIEW IS WITHOUT HTML
> if ($TAGS == 0) $TEXT = preg_replace('/\s\s+/', ' ', strip_tags($TEXT));
Hvad har strip_tags() gjort? ;)
> // IF STRLEN IS SMALLER THAN LIMIT RETURN
> if (strlen($TEXT) < $LIMIT) return $TEXT;
Hvad s�, hvis l�ngden p� strengen matcher limit? ;)
> if ($TAGS == 0) return substr($TEXT, 0, $LIMIT) . " ...";
Her returnerer funktionen pr�cis det samme, som er foresl�et tidligere ;)
--
Peter Farsinsen
for...@efternavn.dk
Ja, det er noget gammelt skidt ;-)
>
>> // IF STRLEN IS SMALLER THAN LIMIT RETURN
>> if (strlen($TEXT) < $LIMIT) return $TEXT;
>
> Hvad s�, hvis l�ngden p� strengen matcher limit? ;)
S� skriver man et komma ind, det er der altid lige plads til ;-)
>
>> if ($TAGS == 0) return substr($TEXT, 0, $LIMIT) . " ...";
>
> Her returnerer funktionen pr�cis det samme, som er foresl�et tidligere ;)
Ja selvf�lgelig, man har jo valgt at ikke have tags med over :)