Avatar billede koldkaffeernederen Nybegynder
21. april 2009 - 13:09 Der er 6 kommentarer og
1 løsning

Forkortelse af overskrift med ...

Hvordan forkortes en lang overskrift fra

"her er en meget lang overskrift"
til
"her er en meget..."

Som eksempel kan også ses her på eksperten under "nyeste guides", "opsætning af router...".
Avatar billede CCodam Nybegynder
21. april 2009 - 13:19 #1
Du kan benytte dig af følgende funktion:

function myTruncate($string, $limit, $break=" ", $pad="...")
{
  // return with no change if string is shorter than $limit
  if(strlen($string) <= $limit) return $string;
 
  // is $break present between $limit and the end of the string?
  if(false !== ($breakpoint = strpos($string, $break, $limit))) {
    if($breakpoint < strlen($string) - 1) {
      $string = substr($string, 0, $breakpoint) . $pad;
    }
  }
  return $string;
}


Derefter kan du altid kalde din funktion sådan her:

$shortdesc = myTruncate($description, 100); // 100 = Number of characters
echo $shortdesc


Du kan også kalde funktionen, og dele ved . i stedet for mellemrum:
$shortdesc = myTruncate($description, 100, "."); // . = Breaking Point
echo $shortdesc


Og ændre, hvad den skal skrive efter stringen, fra standard "...":
$shortdesc = myTruncate($description, 100, ".", "...Read More"); // . = Breaking Point
echo $shortdesc
Avatar billede koldkaffeernederen Nybegynder
21. april 2009 - 14:53 #2
hmm,

har prøvet lidt, men hvordan får jeg arbejdet det ind i følgende (markeret med fed og understreget er der hvor teksten står):

<?php
$HTML = WriteTableStart($FEATURED_ID,"98%");
                     
$tableFeatured = DataTable_Query("
SELECT
".$DBprefix."ext_postings.id,
".$DBprefix."ext_postings.title,
".$DBprefix."ext_employers.company
FROM ".$DBprefix."ext_postings,".$DBprefix."ext_employers 
WHERE
".$DBprefix."ext_postings.employer =  ".$DBprefix."ext_employers.username
AND
featured='1' AND featured_expires>".time()." AND expires>".time()." AND ".$DBprefix."ext_postings.active='YES'");

$HTML .= "<table>";

while($arrFeatured = mysql_fetch_array($tableFeatured))
{
    $HTML .= "<tr>";
   
   
    $strLink = "";
   
    if($USE_MOD_REWRITE)
    {
        $strLink = "http://www.".$DOMAIN_NAME."/sub/".$arrFeatured["id"]."/".format_str(stripslashes($arrFeatured["title"])).".html";
    }
    else
    {
        $strLink = "index.php?mod=search&job=".$arrFeatured["id"];
    }
   
    $HTML .= "<td><a href=\"".$strLink."\">".stripslashes($arrFeatured["title"])."</a></td>
       
    ";
    $HTML .= "</tr>";
}

$HTML .= "</table>";

$HTML .=    WriteTableEnd();
?>
Avatar billede j4k0b Nybegynder
21. april 2009 - 15:16 #3
Denne gør det samme, bare lidt mindre kode:


function maxLength($string, $length) {
    if(strlen($string) > $length)
        $string = trim(substr($string, 0, $length)) . '...';
    return $string;
}


$s = 'Her er en tekst på 26 tegn';

print maxLength($s, 15);  // 'Her er en tekst...'
print maxLength($s, 16);  // 'Her er en tekst...'
print maxLength($s, 17);  // 'Her er en tekst p...'
Avatar billede CCodam Nybegynder
21. april 2009 - 16:54 #4
#3 Tilgengæld så deler den hvor som helst, og ikke som mit kun ved mellemrum, "." eller hvad man vælger :)

#2 Prøv med følgende, dog ville jeg nok ligge functionen i toppen af din side, eller i en seperat fil der blir inkluderet...

<?php
function myTruncate($string, $limit, $break=" ", $pad="...")
{
  // return with no change if string is shorter than $limit
  if(strlen($string) <= $limit) return $string;

  // is $break present between $limit and the end of the string?
  if(false !== ($breakpoint = strpos($string, $break, $limit))) {
    if($breakpoint < strlen($string) - 1) {
      $string = substr($string, 0, $breakpoint) . $pad;
    }
  }
  return $string;
}

$HTML = WriteTableStart($FEATURED_ID,"98%");
                   
$tableFeatured = DataTable_Query("
SELECT
".$DBprefix."ext_postings.id,
".$DBprefix."ext_postings.title,
".$DBprefix."ext_employers.company
FROM ".$DBprefix."ext_postings,".$DBprefix."ext_employers
WHERE
".$DBprefix."ext_postings.employer =  ".$DBprefix."ext_employers.username
AND
featured='1' AND featured_expires>".time()." AND expires>".time()." AND ".$DBprefix."ext_postings.active='YES'");

$HTML .= "<table>";

while($arrFeatured = mysql_fetch_array($tableFeatured))
{
    $HTML .= "<tr>";
 
 
    $strLink = "";
 
    if($USE_MOD_REWRITE)
    {
        $strLink = "http://www.".$DOMAIN_NAME."/sub/".$arrFeatured["id"]."/".format_str(stripslashes($arrFeatured["title"])).".html";
    }
    else
    {
        $strLink = "index.php?mod=search&job=".$arrFeatured["id"];
    }
 
    $HTML .= "<td><a href=\"".$strLink."\">".myTruncate(stripslashes($arrFeatured["title"]), 100)."</a></td>
     
    ";
    $HTML .= "</tr>";
}

$HTML .= "</table>";

$HTML .=    WriteTableEnd();
?>
Avatar billede koldkaffeernederen Nybegynder
22. april 2009 - 09:34 #5
Hej i to,

begge funktioner virker fint!

Jeg har valgt at bruge #3 - det giver den største designmæssige kontrol - selv om nogle ord afkortes lidt underligt.

j4k0b - lægger du også et svar?

tak for hjælpen!
Avatar billede CCodam Nybegynder
22. april 2009 - 09:54 #6
#5 Du ville også kunne gøre det med det jeg postede :P
$shortdesc = myTruncate($description, 100, ""); // "" = Breaking Point, når som helst
echo $shortdesc

Eller ændre function linien, til direkte at bruge "" hvis intet er defineret:
function myTruncate($string, $limit, $break="", $pad="...")

Men det er helt i orden, at du vælger den mere simple funktion, hvis du alligevel ikke har brug for at kunne alt det andet :)
Avatar billede koldkaffeernederen Nybegynder
13. oktober 2010 - 10:50 #7
lukker
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