Ausgabe auf bestimmte Länge an Zeichen kürzen...

fixxxxxi

Erfahrenes Mitglied
Ich möchte die Ausgabe $topiclink aus der unten angegeben HTML auf eine bestimmte Länge an Zeichen kürzen und ... anzeigen, wenn diese eine bestimmte Länge übertrifft.

Dazu habe ich eine Funktion eingebaut, welche genau dies eigentlich machen soll. Aber irgendwo ist ein Fehler, denn es funtioniert nicht!

Was hab ich falsch gemacht?

PHP:
<?php

$maxLength=30;
function textkurz($latesttopics_content, $max_length){
        if (max_length!=0){
               if (strlen($latesttopics_content) > $max_length) {
                   $latesttopics_content = substr($latesttopics_content,0,$max_length);
                  $latesttopics_content .= '...';
                 }
 }
return $latesttopics_content;
} 

$ergebnis=safe_query("SELECT * FROM ".PREFIX."forum_topics WHERE intern<='".isinternboarduser($userID)."' ORDER BY lastdate DESC LIMIT 0,$maxlatesttopics");
$anz=mysql_num_rows($ergebnis);
if($anz) {
    eval ("\$latesttopics_head = \"".gettemplate("latesttopics_head")."\";");

    echo $latesttopics_head;
	$n=1;
	while($ds=mysql_fetch_array($ergebnis)) {

	    if($n%2) {
			$bg1=BG_1;
			$bg2=BG_2;
		}
		else {
			$bg1=BG_3;
			$bg2=BG_4;
		}
	
		$latesticon='<img src="images/icons/'.$ds[icon].'" width="15" height="15">';
		$boardlink='• <a href="index.php?site=forum&board='.$ds[boardID].'"><b>'.getboardname($ds[boardID]).'</b></a>';
		$topiclink='&nbsp;&nbsp;&nbsp;<a href="index.php?site=forum_topic&topic='.$ds[topicID].'&type=ASC&page='.ceil(($ds['replys']+1)/$maxposts).'">'.clearfromtags($ds[topic])).'</a>';
		$replys=$ds[replys];

		eval ("\$latesttopics_content = \"".gettemplate("latesttopics_content")."\";");
        echo textkurz($latesttopics_content,$maxLength);
        
		$n++;
	}
	eval ("\$latesttopics_foot = \"".gettemplate("latesttopics_foot")."\";");	
        echo $latesttopics_foot;	 

    
}
?>

Ausgegeben wird die PHP mit folgender HTML:

Code:
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  
    <td height="32" valign="middle">
    $boardlink<br />
    $topiclink<td align="right" valign="middle" style="font-size:10px"><b> <font color="9f9f9f">$replys</font></b></td>    
  </tr>
</table>
 
PHP:
function textkurz($latesttopics_content, $max_length)
{
    if($max_length!=0)
    {
        if(strlen($latesttopics_content) > $max_length)
        {
            return sprintf("%.".$max_length."s...", $latesttopics_content);
        }
    }
    return $latesttopics_content;
}

Allerdings habe ich gesehen, das du die erste if-Condition nicht korrekt geschrieben hast:

PHP:
if (max_length!=0){

müsste eigentlich lauten:

PHP:
if ($max_length!=0){
 
Hallo,

nachdem ich den Code bearbeitet habe, sind im Ergebniss nur noch Punkte zu sehen (................)! Mein Code sieht nun so aus:

PHP:
<?php

$maxLength=30;
function textkurz($latesttopics_content, $max_length)
{
    if($max_length!=0)
    {
        if(strlen($latesttopics_content) > $max_length)
        {
            return sprintf("%.".$max_length."...", $latesttopics_content);
        }
    }
    return $latesttopics_content;
} 

$ergebnis=safe_query("SELECT * FROM ".PREFIX."forum_topics WHERE intern<='".isinternboarduser($userID)."' ORDER BY lastdate DESC LIMIT 0,$maxlatesttopics");
$anz=mysql_num_rows($ergebnis);
if($anz) {
    eval ("\$latesttopics_head = \"".gettemplate("latesttopics_head")."\";");
    echo $latesttopics_head;
	$n=1;
	while($ds=mysql_fetch_array($ergebnis)) {
	    if($n%2) {
			$bg1=BG_1;
			$bg2=BG_2;
		}
		else {
			$bg1=BG_3;
			$bg2=BG_4;
		}
		$latesticon='<img src="images/icons/'.$ds[icon].'" width="15" height="15">';
		$boardlink='• <a href="index.php?site=forum&board='.$ds[boardID].'"><b>'.getboardname($ds[boardID]).'</b></a>';
		$topiclink='&nbsp;&nbsp;&nbsp;<a href="index.php?site=forum_topic&topic='.$ds[topicID].'&type=ASC&page='.ceil(($ds['replys']+1)/$maxposts).'">'.clearfromtags($ds[topic]).'</a>';
		$replys=$ds[replys];
		
		eval ("\$latesttopics_content = \"".gettemplate("latesttopics_content")."\";");
        echo textkurz($latesttopics_content,$maxLength);
		$n++;
	}
	eval ("\$latesttopics_foot = \"".gettemplate("latesttopics_foot")."\";");
    echo $latesttopics_foot;
}
?>
 
Übernimm die Funktion textkurz genauso, wie ich sie exemplarisch implementiert habe. Dann funktioniert das auch.

Grüße
 
Ich hab Sie jetzt genauso übernommen. Es funktioniert trotzdem nicht. Es zerreißt mir das Design, und es werden garkeine "Last Forumposts" angezeigt. Ich habe zwei Screens mitangehängt, damit man sieht was passiert.

Mein Code, nachdem ich die Funktion genauso übernommen habe wie du beschrieben hast sieht so aus:

PHP:
<?php

$max_length=30;
function textkurz($latesttopics_content, $max_length)
{
    if($max_length!=0)
    {
        if(strlen($latesttopics_content) > $max_length)
        {
            return sprintf("%.".$max_length."s...", $latesttopics_content);
        }
    }
    return $latesttopics_content;
} 

$ergebnis=safe_query("SELECT * FROM ".PREFIX."forum_topics WHERE intern<='".isinternboarduser($userID)."' ORDER BY lastdate DESC LIMIT 0,$maxlatesttopics");
$anz=mysql_num_rows($ergebnis);
if($anz) {
    eval ("\$latesttopics_head = \"".gettemplate("latesttopics_head")."\";");
    echo $latesttopics_head;
	$n=1;
	while($ds=mysql_fetch_array($ergebnis)) {
	    if($n%2) {
			$bg1=BG_1;
			$bg2=BG_2;
		}
		else {
			$bg1=BG_3;
			$bg2=BG_4;
		}
		$latesticon='<img src="images/icons/'.$ds[icon].'" width="15" height="15">';
		$boardlink='• <a href="index.php?site=forum&board='.$ds[boardID].'"><b>'.getboardname($ds[boardID]).'</b></a>';
		$topiclink='&nbsp;&nbsp;&nbsp;<a href="index.php?site=forum_topic&topic='.$ds[topicID].'&type=ASC&page='.ceil(($ds['replys']+1)/$maxposts).'">'.clearfromtags($ds[topic]).'</a>';
		$replys=$ds[replys];
		
		eval ("\$latesttopics_content = \"".gettemplate("latesttopics_content")."\";");
        echo textkurz($latesttopics_content, $max_length);
		$n++;
	}
	eval ("\$latesttopics_foot = \"".gettemplate("latesttopics_foot")."\";");
    echo $latesttopics_foot;
}
?>

Wenn ich bei $max_length=30; an Stelle der 30 eine 3 einsetze, verschiebt es sich nicht, aber es wird auch garnichts mehr angezeigt.

Bin am verzweifeln!
 

Anhänge

  • 1.jpg
    1.jpg
    103,4 KB · Aufrufe: 48
  • 2.jpg
    2.jpg
    86,1 KB · Aufrufe: 45
Es zerreist dir deswegen das Design, weil du den kompletten HTML-Code, der die Topic enthält kürzen willst.

Du kannst folgendes versuchen:

Suche die Zeile

PHP:
$topiclink='&nbsp;&nbsp;&nbsp;<a href="index.php?site=forum_topic&topic='.$ds[topicID].'&type=ASC&page='.ceil(($ds['replys']+1)/$maxposts).'">'.clearfromtags($ds[topic]).'</a>';

und ändere in

PHP:
$topiclink='&nbsp;&nbsp;&nbsp;<a href="index.php?site=forum_topic&topic='.$ds[topicID].'&type=ASC&page='.ceil(($ds['replys']+1)/$maxposts).'">'.textkurz(clearfromtags($ds[topic])).'</a>';

Dann suche die Zeile

PHP:
echo textkurz($latesttopics_content, $max_length);

und ändere in

PHP:
echo $latesttopics_content;

Grüße
 
Huhu... ich habe es nun so gelöst:

PHP:
    if(strlen($ds[topic])>25) {
	    $ds[topic]=substr($ds[topic], 0, 25);
		$ds[topic].='...';
	  }	
	  $ds[topic]=clearfromtags($ds[topic]);
    $topiclink='&nbsp;&nbsp;&nbsp;<a href="index.php?site=forum_topic&topic='.$ds[topicID].'&type=ASC&page='.ceil(($ds['replys']+1)/$maxposts).'">'.clearfromtags($ds[topic]).'</a>';
 
Zurück