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   2215 Views

Avatar
zim

Community Member, 135 Posts

28 October 2009 at 11:52pm

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

Community Member, 323 Posts

29 October 2009 at 11:20pm

Edited: 29/10/2009 11:22pm

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

Community Member, 135 Posts

29 October 2009 at 11:31pm

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

Community Member, 514 Posts

3 November 2009 at 12:37pm

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

Community Member, 135 Posts

4 November 2009 at 3:10am

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

Avatar
Graphicator

Community Member, 62 Posts

15 September 2011 at 12:00pm

Edited: 15/09/2011 12:00pm

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

Community Member, 225 Posts

15 September 2011 at 7:38pm

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;
}