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.
This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.
Please use forum.silverstripe.org for any new questions
(announcement).
The forum archive will stick around, but will be read only.
You can also use our Slack channel
or StackOverflow to ask for help.
Check out our community overview for more options to contribute.
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.
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.
It is a shame there is no :first-word. Thanks for response though. I will remember this if I need to highlight first letter :)
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 :).
Thanks Mo. i will try this and let you know :)
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;
}
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
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;
}
Here is another way to get first word, second word, etc:
public function MenuTitleFirstWord() {
if ( str_word_count($this->MenuTitle) == 0 ) {
return null;
} else {
return str_word_count($this->MenuTitle,1)[0];
}
}
public function MenuTitleSecondWord() {
if ( str_word_count($this->MenuTitle) <= 1 ) {
return null;
} else {
return str_word_count($this->MenuTitle,1)[1];
}
}
LimitWordCount for StringField may also be useful: http://api.silverstripe.org/3.2/source-class-StringField.html#_LimitWordCount