| Autor | Zpráva | ||
|---|---|---|---|
| Ludek Profil * |
#1 · Zasláno: 1. 7. 2014, 13:05:44
Řeším tady maximální délku znaků. Problém je v tom, že nyní počítám počet mezer, ale znaky mají různý počet znaků a tak vždy nedosáhnu přibližné délky v nadpisu. Prostě ... někdy je nadpis příliš krátký při stejném počtu mezer :(
Měl bych zřejmě počítat počet znaků a porovnávat to s počtem mezer? Bohužel nemám ponětí jak by takový script vypadal. Najdu zde někdo, kdo mě poradí? Aktuálně používám svou funkci: function Popisek($text,$pocet) {
if ($pocet == "") $pocet = "6"; else $pocet = $pocet;
$clear = str_replace("\r\n"," ",strip_tags($text));
$pocet_slov = explode(" ", $clear);
foreach ($pocet_slov as $slovo)
{
if (strlen($slovo) >= "4") $p++;
$vysledek .= $slovo." ";
if ($p == $pocet) {$vysledek .=" ..."; break;}
}
return $vysledek;
}
$nadpis = Popisek($data, "7"); |
||
| juriad Profil |
Nesnaž se o délku ve slovech, ale povol určitý počet znaků.
function popisek($text, $limit) {
# strrpos najde poslední mezeru před limitem
# substr vybere text od začátku po nalezenou mezeru
return substr($text, 0, strrpos($text, ' ', $limit)) . "…";
}Nebo pokud nadpis neobsahuje mezeru vůbec, tak to bude fungovat podivně, to by chtělo ošetřit. Číselné konstanty se nepíší do uvozovek. Také si rohlík nezabalíš do staniolu, než ho sníž. |
||
| Ludek Profil * |
#3 · Zasláno: 1. 7. 2014, 13:41:26
Díky moc za radu. Nakonec jsem to vyřešil tímto způsobem, tak že kdyby to někdo potřeboval:
function Popisek($string,$length) {
$string = trim($string);
if(strlen($string) > $length) {
$string = wordwrap($string, $length);
$string = explode("\n",$string);
$string = array_shift($string) . "…";
}
return $string;
} |
||
|
Časová prodleva: 12 let
|
|||
0