[SOLVED] Strlen() en substr() probleem

Hulp nodig bij een modificaties of op zoek naar een MOD? Bekijk ons archief. Support wordt helaas niet meer verleend.
Forumregels

Sinds 1 januari 2009 wordt phpBB2 niet meer ondersteund.
Onderstaande informatie is verouderd en dient uitsluitend als archief.
phpBB2.0.x
Gesloten
bundy
Berichten: 40
Lid geworden op: 12 jun 2005, 20:15
Contacteer:

[SOLVED] Strlen() en substr() probleem

Bericht door bundy » 18 jun 2005, 20:02

ik gebruik een mod om de 5 laatste topics top 5 by view en top 5 by reply topics te tonen op de index pagina.. dit is een stukje code om ervoor te zorge dat wanneer de lengte van een topic titel meer dan 40 chars is het laatste deel de vervangen door '...' maar om één of andere reden werkt dit niet.. iemand an idee waarom?

Code: Selecteer alles

// Top Topics on Index 1.1.0 - Begin Code Addition 
// 
 ... 
      for( $i = 0; $i < 5; $i++ ) 
      { 
         $recent_topic_title = $recent_row[$i]['topic_title']; 
         $popular_topic_title = $popular_row[$i]['topic_title']; 
         $viewed_topic_title = $viewed_row[$i]['topic_title']; 

         if( strlen($recent_topic_title) > 40 ) 
         { 
            $recent_topic_title = substr($recent_topic_title, 0, 40) . '...'; 
         } 

         if( strlen($popular_topic_title) > 40 ) 
         { 
            $popular_topic_title = substr($popular_topic_title, 0, 40) . '...'; 
         } 

         if( strlen($viewed_topic_title) > 40 ) 
         { 
            $viewed_topic_title = substr($viewed_topic_title, 0, 40) . '...'; 
         } 

 ... 
Laatst gewijzigd door bundy op 19 jun 2005, 10:17, 1 keer totaal gewijzigd.

Gebruikersavatar
Paul
Beheerder
Beheerder
Berichten: 20316
Lid geworden op: 23 okt 2003, 11:38
Locatie: Utrecht
Contacteer:

Bericht door Paul » 18 jun 2005, 20:17

Wat werkt er niet aan?

bundy
Berichten: 40
Lid geworden op: 12 jun 2005, 20:15
Contacteer:

Bericht door bundy » 18 jun 2005, 21:51

er wordt niets vervange door '...' de hele titel komt er op ook al is de titel meer dan 40 characters bevat..lange titels 'verpesten' de layout een beetje

je kan het hier zien..

ElbertF
Berichten: 5803
Lid geworden op: 12 okt 2004, 08:34
Contacteer:

Bericht door ElbertF » 18 jun 2005, 23:23

Ik denk dat het probleem verderop in je code zit, dit lijkt gewoon te kloppen.



Klein detail, maar je kan trouwens beter dit doen:

if ( strlen($string) > 40 )
{
$string = substr($string, 0, 37) . '...';
}

Wat 37 + 3 punten = 40 tekens :)

bundy
Berichten: 40
Lid geworden op: 12 jun 2005, 20:15
Contacteer:

Bericht door bundy » 19 jun 2005, 07:53

dit is de volledige code

Code: Selecteer alles

//------------------------------------------------------------------------
// Top Topics on Index 1.1.0 - Begin Code Addition
//
	$template->assign_vars(array(
		'L_TOPICSRECENT' => $lang['TopicsRecent'],
		'L_TOPICSPOPULAR' => $lang['TopicsPopular'],
		'L_TOPICSPOPULARVIEW' => $lang['TopicsPopularView'])
	);

	// Get forum auth information to insure privacy of hidden topics
	$topics_auth = auth(AUTH_ALL, AUTH_LIST_ALL, $userdata);
	$topics_auth_sql = '';
	foreach($topics_auth as $k=>$v)
	{
		if( $v['auth_view'] && $v['auth_read'] )
		{
			$topics_auth_sql .= (( empty($topics_auth_sql) ) ? '': ', ') . $k;
		}
	}

	if( empty($topics_auth_sql) )
	{
		$template->assign_block_vars('topicrecentpopular', array(
			'TOPICSPOPULAR' => $lang['No_Posts'],
			'TOPICSPOPULARVIEW' => $lang['No_Posts'],
			'TOPICSRECENT' => $lang['No_Posts']
		));
	}
	else
	{
		//
		// Okay, let's build the topic recent and popular
		//
		$active_topics_sql = 'SELECT t.topic_id, t.topic_title, t.topic_replies, t.topic_views, t.topic_last_post_id
			FROM ' . TOPICS_TABLE . ' t, ' . FORUMS_TABLE. ' f
			WHERE t.forum_id IN (' . $topics_auth_sql . ')
				AND f.forum_id = t.forum_id
			ORDER BY %1$s DESC
			LIMIT 0,5';
		$active_topics_sql_a = sprintf($active_topics_sql, 'topic_last_post_id');
		$active_topics_sql_b = sprintf($active_topics_sql, 'topic_replies');
		$active_topics_sql_c = sprintf($active_topics_sql, 'topic_views');
		$recent_row = $popular_row = $viewed_row = array();

		if( !$active_topics_a = $db->sql_query($active_topics_sql_a))
		{
			message_die(GENERAL_ERROR, 'Could not retrieve recent topics', '', __LINE__, __FILE__, $active_topics_sql_a);
		}
		$recent_row = $db->sql_fetchrowset($active_topics_a);
		$db->sql_freeresult($active_topics_a);

		if( !$active_topics_b = $db->sql_query($active_topics_sql_b))
		{
			message_die(GENERAL_ERROR, 'Could not retrieve popular topics', '', __LINE__, __FILE__, $active_topics_sql_b);
		}
		$popular_row = $db->sql_fetchrowset($active_topics_b);
		$db->sql_freeresult($active_topics_b);

		if( !$active_topics_c = $db->sql_query($active_topics_sql_c))
		{
			message_die(GENERAL_ERROR, 'Could not retrieve most viewed topics', '', __LINE__, __FILE__, $active_topics_sql_c);
		}
		$viewed_row = $db->sql_fetchrowset($active_topics_c);
		$db->sql_freeresult($active_topics_c);

		for( $i = 0; $i < 5; $i++ )
		{
			$recent_topic_title = $recent_row[$i]['topic_title'];
			$popular_topic_title = $popular_row[$i]['topic_title'];
			$viewed_topic_title = $viewed_row[$i]['topic_title'];

			if( strlen($recent_topic_title) > 40 )
			{
				$recent_topic_title = substr($recent_topic_title, 0, 40) . '...';
			}

			if( strlen($popular_topic_title) > 40 )
			{
				$popular_topic_title = substr($popular_topic_title, 0, 40) . '...';
			}

			if( strlen($viewed_topic_title) > 40 )
			{
				$viewed_topic_title = substr($viewed_topic_title, 0, 40) . '...';
			}

			$recent_post = '<a href="viewtopic.php?' . POST_TOPIC_URL . '=' . $recent_row[$i]['topic_id'] . '" title="' . $recent_row[$i]['topic_title'] . '">' . $recent_topic_title . '</a>';
			$popular_post = '<a href="viewtopic.php?' . POST_TOPIC_URL . '=' . $popular_row[$i]['topic_id'] . '" title="' . $popular_row[$i]['topic_title'] . '">' . $popular_topic_title . '</a>';
			$popular_total_replies = $popular_row[$i]['topic_replies'];
			$viewed_post = '<a href="viewtopic.php?' . POST_TOPIC_URL . '=' . $viewed_row[$i]['topic_id'] . '" title="' . $viewed_row[$i]['topic_title'] . '">' . $viewed_topic_title . '</a>';
			$viewed_total_replies = $viewed_row[$i]['topic_views'];

			$template->assign_block_vars('topicrecentpopular', array(
				'TOPICSPOPULAR' => $popular_post,
				'TOPICSPOPULARC' => $popular_total_replies,
				'TOPICSPOPULARVIEW' => $viewed_post,
				'TOPICSPOPULARVIEWC' => $viewed_total_replies,
				'TOPICSRECENT' => $recent_post)
			);
		}
	}
//
// Top Topics on Index 1.1.0 - End Code Addition
//------------------------------------------------------------------------

ElbertF
Berichten: 5803
Lid geworden op: 12 okt 2004, 08:34
Contacteer:

Bericht door ElbertF » 19 jun 2005, 09:25

Niks fout aan? :?

Wijziging: Zo te zien werkt het ook gewoon op je site??

Afbeelding

svenn
Berichten: 5001
Lid geworden op: 14 jul 2004, 13:00
Locatie: Kortrijk
Contacteer:

hehe

Bericht door svenn » 19 jun 2005, 09:42

hehe er is inderdaat niks fout aan ...

bundy
Berichten: 40
Lid geworden op: 12 jun 2005, 20:15
Contacteer:

Bericht door bundy » 19 jun 2005, 09:45

Spambot schreef:Niks fout aan? :?

Wijziging: Zo te zien werkt het ook gewoon op je site??

Afbeelding
dit IS de topic titel 'Murgfeesje.BE, een nieuw begin...'
'...' hoort daadwerkelijk bij de titel :)

svenn
Berichten: 5001
Lid geworden op: 14 jul 2004, 13:00
Locatie: Kortrijk
Contacteer:

dflh

Bericht door svenn » 19 jun 2005, 09:50

Code: Selecteer alles

 $recent_topic_title = $recent_row[$i]['topic_title'];    
hier defineer je hem al ....


verander eens naar dit

Code: Selecteer alles

$svenn_test_title = $recent_row[$i]['topic_title']; 
         $svenn_test_title_pop = $popular_row[$i]['topic_title']; 
         $svenn_test_title_bekijk = $viewed_row[$i]['topic_title']; 
en dan verder zo

Code: Selecteer alles

 if( strlen($svenn_test_title) > 40 ) 
         { 
            $recent_topic_title = substr($svenn_test_title, 0, 40) . '...'; 
         }
         else{
            $recent_topic_title = $svenn_test_title; 
          }
         if( strlen($svenn_test_title_pop) > 40 ) 
         { 
            $popular_topic_title = substr($svenn_test_title_pop, 0, 40) . '...'; 
         } 
         else{
          $popular_topic_title = $svenn_test_title_pop;
         }
         if( strlen($svenn_test_title_bekijk ) > 40 ) 
         { 
            $viewed_topic_title = substr($svenn_test_title_bekijk, 0, 40) . '...'; 
         } 
           else
          { 
            $viewed_topic_title = $svenn_test_title_bekijk; 
          }

deze zou moeten werken
Laatst gewijzigd door svenn op 19 jun 2005, 09:55, 1 keer totaal gewijzigd.

ElbertF
Berichten: 5803
Lid geworden op: 12 okt 2004, 08:34
Contacteer:

Bericht door ElbertF » 19 jun 2005, 09:53

Dat maakt niets uit, die definitie is voor gevallen waar de titel korter is. Bundy, heb je een voorbeeld dat het niet werkt?

svenn
Berichten: 5001
Lid geworden op: 14 jul 2004, 13:00
Locatie: Kortrijk
Contacteer:

nee

Bericht door svenn » 19 jun 2005, 09:56

Spambot schreef:Dat maakt niets uit, die definitie is voor gevallen waar de titel korter is. Bundy, heb je een voorbeeld dat het niet werkt?
meekt wel uit

$1 == test
$1 == tes...

denk je dat dit zal werken ?

ElbertF
Berichten: 5803
Lid geworden op: 12 okt 2004, 08:34
Contacteer:

Bericht door ElbertF » 19 jun 2005, 10:05

Ik heb Bundy's code gebruikt en wat vereenvoudigd:

Code: Selecteer alles

<?php
	$temp = '12345678901234567890';
	
	$new = $temp;
	
	if( strlen($new) > 10 )
	{
		$new = substr($new, 0, 7) . '...';
	}
		
	print '<a href="' . $temp . '" title="' . $temp . '">' . $new . '</a>';
?>
Input:
12345678901234567890

Output:
<a href="12345678901234567890" title="12345678901234567890">1234567...</a>
:roll:

bundy
Berichten: 40
Lid geworden op: 12 jun 2005, 20:15
Contacteer:

Bericht door bundy » 19 jun 2005, 10:16

ik heb de fout al gevonde, een hele domme wel hehe

ik had

Code: Selecteer alles

			$recent_post = '<a href="viewtopic.php?' . POST_TOPIC_URL . '=' . $recent_row[$i]['topic_id'] . '" title="' . $recent_row[$i]['topic_title'] . '">' . $recent_topic_title . '</a>';
vervangen door dit

Code: Selecteer alles

			$recent_post = '<a href="viewtopic.php?' . POST_TOPIC_URL . '=' . $recent_row[$i]['topic_id'] . '" title="' . $recent_row[$i]['topic_title'] . '">' . $recent_row[$i]['topic_title'] . '</a>';
oeps :oops: nu werkt het wel

ElbertF
Berichten: 5803
Lid geworden op: 12 okt 2004, 08:34
Contacteer:

Bericht door ElbertF » 19 jun 2005, 10:17

Jaa die fout vermoedde ik vanaf het begin, maar zag 'm dus niet in je code :)

Gesloten