Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

General Questions

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

First word of $content bold...


Reply

7 Posts   2075 Views

Avatar
zim

28 October 2009 at 11:52pm Community Member, 135 Posts

This is a long shot - but does anyone have a snippet of how to make the firast word of a returned $content bold.

Hope this makes sense.

Avatar
Juanitou

29 October 2009 at 11:20pm (Last edited: 29 October 2009 11:22pm), Community Member, 323 Posts

It depends on the HTML content of your $Content field, but you should achieve it quite easily with a combination of CSS pseudo-elements :first-child and :first-letter.

Hope it helps,
Juan

EDIT: Sorry, this approach is useless, I read too fast… I thought you were talking about the first letter, not the first word.

Avatar
zim

29 October 2009 at 11:31pm Community Member, 135 Posts

It is a shame there is no :first-word. Thanks for response though. I will remember this if I need to highlight first letter :)

Avatar
Mo

3 November 2009 at 12:37pm Community Member, 509 Posts

Its a bit over the top, but you could use javascript/jquery. I am pulling this out of ass a bit, but I imiagine it would be something like:

// Assuming your content container div has a class of Layout and
// your first element within that is a p tag. This returns the first para
// as an array split by a space character.
textString = $('div.Layout p:first').text().split(' ');

// Now get the first word from that array and add strong tags
firstWord = '<strong>' + textString.slice(0,1) + '</strong>';

// Create variable for reassembled para
reassemble = '';

// Loop through each item in the array, and add you bold word in place of the first item.
for (i = 0; i < textString.length; i++) {
if(i == 0)
reassemble += firstWord + ' ';
else
reassemble += textString + ' ';
}

$('div.Layout p:first').text(reassemble);

I am sure there is a more efficient way of doing this (probably involving a regex), but its far to late for that :).

Avatar
zim

4 November 2009 at 3:10am Community Member, 135 Posts

Thanks Mo. i will try this and let you know :)

Avatar
Graphicator

15 September 2011 at 12:00pm (Last edited: 15 September 2011 12:00pm), Community Member, 62 Posts

I found out a regex function that will work for Pages. Thanks to UC @ [url]www.silverstripe.org/archive/show/4383[/url]

New Field on Class "Page" in page.php

Get the first word

   function NewField_FirstWord(){
         list($Field_Split) = explode(' ', $this->NewField); //Found on the PHP Manual Website
         return $Field_Split;
   }


Get everything but the first word

   function NewField_AllButFirstWord(){
      list($Field_Split) = explode(' ', $this->NewField);
      return preg_replace("/$Field_Split/", '', $this->NewField, 1); //Preg includes a count at the end, for PHP 5.0+
   }

Your NewField can be Content, Title, or whatever new field.

Page.ss

just call

<span>$NewField_FirstWord</span>$NewField_AllButFirstWord

Avatar
Devlin

15 September 2011 at 7:38pm Community Member, 215 Posts

If $Content is a HTMLText, you should consider strip_tags before.

function Content() {
   $content = $this->Content;
   $content_plain = trim(strip_tags($content));
   $content_1st = current(explode(" ",$content_plain));
   $content = preg_replace("/$content_1st/", "<strong>$content_1st</strong>", $content, 1);
   return $content;
}