ShoeLace1291 Posted October 30, 2007 Share Posted October 30, 2007 I have a script that pulls latest forum posts with a mysql query. When I display the list, how do I limit the name of the topics and follow them with "..." if they are too long? For example, the two latest posts are Hello, everyone, I am new here. That's sixteen characters. How would I make that display as say "Hello, Everyone, I am..." Thanks for any help. Quote Link to comment Share on other sites More sharing options...
trq Posted October 30, 2007 Share Posted October 30, 2007 substr(). Quote Link to comment Share on other sites More sharing options...
ShoeLace1291 Posted October 30, 2007 Author Share Posted October 30, 2007 Having a bit of trouble... $postsubject = $post['subject']; $postsubject = substr("$postsubject", 0, 10); just displays as $postsubject Quote Link to comment Share on other sites More sharing options...
trq Posted October 30, 2007 Share Posted October 30, 2007 The code you posted won't display anything. Post your actual code and a description of what you expect and what your actually receiving. Quote Link to comment Share on other sites More sharing options...
ShoeLace1291 Posted October 30, 2007 Author Share Posted October 30, 2007 It's kind a long... I'm modifiying the SMF SSI. function ssi_recentTopics($num_recent = 8, $exclude_boards = null, $output_method = 'echo') { ob_start(); global $context, $settings, $scripturl, $txt, $db_prefix, $ID_MEMBER; global $user_info, $modSettings, $func; if ($exclude_boards === null && !empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0) $exclude_boards = array($modSettings['recycle_board']); else $exclude_boards = empty($exclude_boards) ? array() : $exclude_boards; $stable_icons = array('xx', 'thumbup', 'thumbdown', 'exclamation', 'question', 'lamp', 'smiley', 'angry', 'cheesy', 'grin', 'sad', 'wink', 'moved', 'recycled', 'wireless'); $icon_sources = array(); foreach ($stable_icons as $icon) $icon_sources[$icon] = 'images_url'; // Find all the posts in distinct topics. Newer ones will have higher IDs. $request = db_query(" SELECT m.posterTime, ms.subject, m.ID_TOPIC, m.ID_MEMBER, m.ID_MSG, b.ID_BOARD, b.name AS bName, IFNULL(mem.realName, m.posterName) AS posterName, " . ($user_info['is_guest'] ? '1 AS isRead, 0 AS new_from' : ' IFNULL(lt.ID_MSG, IFNULL(lmr.ID_MSG, 0)) >= m.ID_MSG_MODIFIED AS isRead, IFNULL(lt.ID_MSG, IFNULL(lmr.ID_MSG, -1)) + 1 AS new_from') . ", LEFT(m.body, 384) AS body, m.smileysEnabled, m.icon FROM ({$db_prefix}messages AS m, {$db_prefix}topics AS t, {$db_prefix}boards AS b, {$db_prefix}messages AS ms) LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER)" . (!$user_info['is_guest'] ? " LEFT JOIN {$db_prefix}log_topics AS lt ON (lt.ID_TOPIC = t.ID_TOPIC AND lt.ID_MEMBER = $ID_MEMBER) LEFT JOIN {$db_prefix}log_mark_read AS lmr ON (lmr.ID_BOARD = b.ID_BOARD AND lmr.ID_MEMBER = $ID_MEMBER)" : '') . " WHERE t.ID_LAST_MSG >= " . ($modSettings['maxMsgID'] - 35 * min($num_recent, 5)) . " AND t.ID_LAST_MSG = m.ID_MSG AND b.ID_BOARD = t.ID_BOARD" . (empty($exclude_boards) ? '' : " AND b.ID_BOARD NOT IN (" . implode(', ', $exclude_boards) . ")") . " AND $user_info[query_see_board] AND ms.ID_MSG = t.ID_FIRST_MSG ORDER BY t.ID_LAST_MSG DESC LIMIT $num_recent", __FILE__, __LINE__); $posts = array(); while ($row = mysql_fetch_assoc($request)) { $row['body'] = strip_tags(strtr(parse_bbc($row['body'], $row['smileysEnabled'], $row['ID_MSG']), array('<br />' => ' '))); if ($func['strlen']($row['body']) > 128) $row['body'] = $func['substr']($row['body'], 0, 128) . '...'; // Censor the subject. censorText($row['subject']); censorText($row['body']); if (empty($modSettings['messageIconChecks_disable']) && !isset($icon_sources[$row['icon']])) $icon_sources[$row['icon']] = file_exists($settings['theme_dir'] . '/images/post/' . $row['icon'] . '.gif') ? 'images_url' : 'default_images_url'; // Build the array. $posts[] = array( 'board' => array( 'id' => $row['ID_BOARD'], 'name' => $row['bName'], 'href' => $scripturl . '?board=' . $row['ID_BOARD'] . '.0', 'link' => '<a href="' . $scripturl . '?board=' . $row['ID_BOARD'] . '.0">' . $row['bName'] . '</a>' ), 'topic' => $row['ID_TOPIC'], 'poster' => array( 'id' => $row['ID_MEMBER'], 'name' => $row['posterName'], 'href' => empty($row['ID_MEMBER']) ? '' : $scripturl . '?action=profile;u=' . $row['ID_MEMBER'], 'link' => empty($row['ID_MEMBER']) ? $row['posterName'] : '<a href="' . $scripturl . '?action=profile;u=' . $row['ID_MEMBER'] . '">' . $row['posterName'] . '</a>' ), 'subject' => $row['subject'], 'short_subject' => shorten_subject($row['subject'], 25), 'preview' => $row['body'], 'time' => timeformat($row['posterTime']), 'timestamp' => forum_time(true, $row['posterTime']), 'href' => $scripturl . '?topic=' . $row['ID_TOPIC'] . '.msg' . $row['ID_MSG'] . ';topicseen#new', 'link' => '<a href="' . $scripturl . '?topic=' . $row['ID_TOPIC'] . '.msg' . $row['ID_MSG'] . '#new">' . $row['subject'] . '</a>', 'new' => !empty($row['isRead']), 'new_from' => $row['new_from'], 'icon' => '<img src="' . $settings[$icon_sources[$row['icon']]] . '/post/' . $row['icon'] . '.gif" align="middle" alt="' . $row['icon'] . '" border="0" />', ); } mysql_free_result($request); // Just return it. if ($output_method != 'echo' || empty($posts)) return $posts; foreach ($posts as $post) $postsubject = $post['subject']; $postsubject = substr($postsubject, 0, -10); echo ' » <a href="', $post['href'], '">$postsubject</a> ', $txt[525], ' ', $post['poster']['link'], ' ', $post['new'] ? '' : '<a href="' . $scripturl . '?topic=' . $post['topic'] . '.msg' . $post['new_from'] . ';topicseen#new"><img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/new.gif" alt="' . $txt[302] . '" border="0" /></a>', '<br> '; $ret=ob_get_contents(); ob_end_clean(); return $ret; } Quote Link to comment Share on other sites More sharing options...
trq Posted October 30, 2007 Share Posted October 30, 2007 Seriously... the relevent code will do. Quote Link to comment Share on other sites More sharing options...
ShoeLace1291 Posted October 30, 2007 Author Share Posted October 30, 2007 That is my code... but to make it simpler, say this were my code: $query = mysql_query("SELECT * FROM smf_topics ORDER BY ID_TOPIC DESC LIMIT 10") or die("Error: ".mysql_error()); while($fetch=mysql_fetch_array($query)){ $topicid=$fetch["ID_TOPIC"]; $topicname=$fetch["topicName"]; echo "$topicname<br>"; } Say the last two topics were called "hello, I am new here" and "what the hell is going on". instead of displaying as hello, I am new here what the hell is going on how would i make substr display it as hello, i am new ... what the the he... Quote Link to comment Share on other sites More sharing options...
rajivgonsalves Posted October 30, 2007 Share Posted October 30, 2007 try this for your echo statement echo (strlen($topicname) >15) ? substr($topicname,0,15)."...<br>" : $topicname."<BR>"; Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.