Jump to:

22970 Posts in 11572 Topics by 2823 members

General Questions

SilverStripe Forums » General Questions » First word of $content bold...

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

Page: 1
Go to End
Author Topic: 1863 Views
  • zim
    Avatar
    Community Member
    135 Posts

    First word of $content bold... Link to this post

    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.

  • Juanitou
    Avatar
    Community Member
    322 Posts

    Re: First word of $content bold... Link to this post

    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.

  • zim
    Avatar
    Community Member
    135 Posts

    Re: First word of $content bold... Link to this post

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

  • Mo
    Avatar
    Community Member
    485 Posts

    Re: First word of $content bold... Link to this post

    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 .

  • zim
    Avatar
    Community Member
    135 Posts

    Re: First word of $content bold... Link to this post

    Thanks Mo. i will try this and let you know

  • Graphicator
    Avatar
    Community Member
    62 Posts

    Re: First word of $content bold... Link to this post

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

    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

  • Devlin
    Avatar
    Community Member
    186 Posts

    Re: First word of $content bold... Link to this post

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

    1863 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.