Pagina 1 van 1
[SOLVED] Strlen() en substr() probleem
Geplaatst: 18 jun 2005, 20:02
door bundy
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) . '...';
}
...
Geplaatst: 18 jun 2005, 20:17
door Paul
Wat werkt er niet aan?
Geplaatst: 18 jun 2005, 21:51
door bundy
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..
Geplaatst: 18 jun 2005, 23:23
door ElbertF
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

Geplaatst: 19 jun 2005, 07:53
door bundy
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
//------------------------------------------------------------------------
Geplaatst: 19 jun 2005, 09:25
door ElbertF
Niks fout aan?
Wijziging: Zo te zien werkt het ook gewoon op je site??

hehe
Geplaatst: 19 jun 2005, 09:42
door svenn
hehe er is inderdaat niks fout aan ...
Geplaatst: 19 jun 2005, 09:45
door bundy
Spambot schreef:Niks fout aan?
Wijziging: Zo te zien werkt het ook gewoon op je site??

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

dflh
Geplaatst: 19 jun 2005, 09:50
door svenn
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
Geplaatst: 19 jun 2005, 09:53
door ElbertF
Dat maakt niets uit, die definitie is voor gevallen waar de titel korter is. Bundy, heb je een voorbeeld dat het niet werkt?
nee
Geplaatst: 19 jun 2005, 09:56
door svenn
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 ?
Geplaatst: 19 jun 2005, 10:05
door ElbertF
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>

Geplaatst: 19 jun 2005, 10:16
door bundy
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

nu werkt het wel
Geplaatst: 19 jun 2005, 10:17
door ElbertF
Jaa die fout vermoedde ik vanaf het begin, maar zag 'm dus niet in je code
