From 91b3803e754c27d0f4ed6459439b8b876fac1788 Mon Sep 17 00:00:00 2001 From: brettp Date: Wed, 21 Apr 2010 20:20:30 +0000 Subject: Blog excerpts now work for MB strings and properly detect word breaks. git-svn-id: http://code.elgg.org/elgg/trunk@5839 36083f99-b078-4883-b0ff-0f9b5a30f544 --- mod/blog/blog_lib.php | 21 ++++++++++++++------- mod/blog/views/default/object/blog.php | 6 ++++++ 2 files changed, 20 insertions(+), 7 deletions(-) (limited to 'mod') diff --git a/mod/blog/blog_lib.php b/mod/blog/blog_lib.php index 12226ee2e..b6a4d53c2 100644 --- a/mod/blog/blog_lib.php +++ b/mod/blog/blog_lib.php @@ -245,21 +245,28 @@ function blog_get_page_content_friends($user_guid) { /** * Returns an appropriate excerpt for a blog. + * Will return up to 250 chars stopping at the nearest space. + * If no spaces are found (like in Japanese) will crop off at the + * 250 char mark. * * @param string $text * @param int $words * @return string */ -function blog_make_excerpt($text, $words=60) { - $text = strip_tags($text); - preg_match("/([\S]+\s*){0,$words}/", $text, $matches); +function blog_make_excerpt($text, $chars = 250) { + $text = trim(strip_tags($text)); - $trimmed = trim($matches[0]); - if ($trimmed != $text) { - return "$trimmed …"; + // handle cases + $excerpt = elgg_substr($text, 0, $chars); + $space = elgg_strrpos($excerpt, ' ', 0); + + // don't crop if can't find a space. + if ($space === FALSE) { + $space = $chars; } + $excerpt = trim(elgg_substr($excerpt, 0, $space)); - return $trimmed; + return $excerpt ; } /** diff --git a/mod/blog/views/default/object/blog.php b/mod/blog/views/default/object/blog.php index d72d6a21d..0c8944f7d 100644 --- a/mod/blog/views/default/object/blog.php +++ b/mod/blog/views/default/object/blog.php @@ -21,6 +21,12 @@ $container = get_entity($blog->container_guid); $linked_title = "getURL()}\" title=\"" . htmlentities($blog->title) . "\">{$blog->title}"; $categories = elgg_view('categories/view', $vars); $excerpt = $blog->excerpt; + +// add ellipses to excerpt it not the full post +if ($excerpt != trim(strip_tags($blog->description))) { + $excerpt .= ' …'; +} + $body = autop($blog->description); $owner_icon = elgg_view("profile/icon",array('entity' => $owner, 'size' => 'tiny')); $tags = elgg_view('output/tags', array('tags' => $blog->tags)); -- cgit v1.2.3