Jump to content

Limiting Character Length


ShoeLace1291

Recommended Posts

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.

Link to comment
Share on other sites

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 />' => '&#10;')));
	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 '

				&#187 <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;
}

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.