Avatar billede jarner Nybegynder
09. september 2006 - 19:44 Der er 13 kommentarer og
2 løsninger

Forkort en titel

Hej
Jeg har en titel der bliver kaldt således
$aepublic->GetArticleTitle()

Hvordan forkorter jeg den ned til fx 50 tegn?

Mads

PS.
Har kigget på
http://www.eksperten.dk/spm/222401
http://www.eksperten.dk/spm/187755
Avatar billede jensgram Nybegynder
09. september 2006 - 19:51 #1
//  Funktion, der "klipper" en tekst over på det mest hensigtsmæssige sted (".", " ", )

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
}
Avatar billede nielle Nybegynder
09. september 2006 - 19:51 #2
$titel = $aepublic->GetArticleTitle();

$maxLen = 50;
if (strlen($titel) > $maxLen)
    $titel = substr($titel, 0, $maxLen) . "...";
Avatar billede jensgram Nybegynder
09. september 2006 - 19:55 #3
$titel = klip($aepublic->GetArticleTitle(), 50, 5)

Vil forsøge at klippe mellem tegn 45 og 55 ved punktum eller mellemrum...
Avatar billede jarner Nybegynder
10. september 2006 - 13:18 #4
Hej igen. Tak for de hurtige svar. Jeg er ikke så ferm til det her. Ved jensgram's løsning bliver siden blot blank i stedet og ved nielle's løsning kommer titlen frem som den plejer uden at forkorte den.
Så jeg prøver lige at vise jer hele koden:

<?
define(TEMPDIR,"news/admin/");
require(TEMPDIR."coreclass.php");
$aepublic=new CArticles();
$aepublic->PublicInitialize();
$aepublic->RequestVariables();
$date=date("d.m.Y");
$date=$aepublic->DateConversion($date,1);
if (!$aepublic->offset) $aepublic->offset=0;
if (!$aepublic->articlenumber) $aepublic->articlenumber=4;
$aepublic->DBQuery("SELECT * FROM ".$aepublic->table[3]." "); //WHERE adate<='".$date."' AND status=1
$articlesfound=$aepublic->rowsnumber;
$aepublic->DBQuery("SELECT * FROM ".$aepublic->table[3]." ORDER BY priority DESC, adate DESC, atime DESC LIMIT ".$aepublic->offset.",".$aepublic->articlenumber);
//$aepublic->GetArchive($aepublic->articlenumber,0,$aepublic->sectionI D);
while ($aepublic->DBGetRow())
{
$aepublic->GetArticle();
echo '';
$aepublic->GetArticleDate();
echo ' - ';
if ($aepublic->cleanurls)
  {
  if ($aepublic->filename) echo '<a href="',$aepublic->GetArticleFilename(),'">';
  else echo '<a href="news/showarticle.php?articleID=',$aepublic->GetArticleID(),'">';
  }
else echo '<a href="news/showarticle.php?articleID=',$aepublic->GetArticleID(),'">';

$aepublic->GetArticleTitle();

echo '</a>';

echo '<br>';
}

?>
Avatar billede jensgram Nybegynder
10. september 2006 - 13:34 #5
Hmm - det kunne jo tyde på, at GetArticleTitle() print'er istedet for (korrekt) at returnere.
Avatar billede jarner Nybegynder
10. september 2006 - 13:44 #6
kan jeg gøre noget ved det?
Avatar billede nielle Nybegynder
10. september 2006 - 13:50 #7
Så må du ind og rette i koden for klassen CArticles() - den ser ud til at ligge i coreclass.php filen.
Avatar billede jarner Nybegynder
10. september 2006 - 14:10 #8
Okay det har jeg ikke lige forstand til... Har været inde og kigge i filen og finder

  function GetArticleTitle()
  {
  echo $this->title;
  }
Ved ikke om man kan ændre i dette?

Men, jeg er sikker på at jeres løsninger ville have virket, så smid begge et svar!
Avatar billede nielle Nybegynder
10. september 2006 - 14:12 #9
Den skal bare rettes til:

function GetArticleTitle()
{
  return $this->title;
}
Avatar billede jarner Nybegynder
10. september 2006 - 14:22 #10
Efter jeg gjorde det forsvandt alle titler helt
Avatar billede nielle Nybegynder
10. september 2006 - 15:21 #11
Det er fordi at du skal rette dine:

$aepublic->GetArticleTitle();

- til:

echo $aepublic->GetArticleTitle();
Avatar billede jarner Nybegynder
10. september 2006 - 16:19 #12
Så fik jeg det til at virke!

$maxLen = 50;
if (strlen($titel) > $maxLen)
echo $titel = substr($titel, 0, $maxLen) . "...";
else echo $aepublic->GetArticleTitle();

Måtte indsætte en else, ellers undlod den alle artikler under 50 tegn... Men det virker og det er dejligt! Mange tak for hjælpen.

Smid svar
Avatar billede nielle Nybegynder
10. september 2006 - 16:25 #13
Det er nu ikke nødvendig med en else-del:

$maxLen = 50;
if (strlen($titel) > $maxLen)
    $titel = substr($titel, 0, $maxLen) . "...";
echo $titel;
Avatar billede nielle Nybegynder
10. september 2006 - 16:26 #14
Et svar fra mig :^)

Og jensgram lægger vel også et svar :^)
Avatar billede jensgram Nybegynder
10. september 2006 - 17:45 #15
Hmmm ... nu var det jo ikke min løsning, der endte med at blive brugt ;)
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