Forum Discussion
pp_01 It is technically possible to manipulate OOB components, if it is performant and a good idea in general is the other question, but I know, sometimes there is just no other way...so here you go:
<#-- create a variable that holds the original component's markup --> <#assing markup> <@delegate /> </#assign> <#-- as $markup basically contains a string of HTML, you can do whatever you can with a string and manipulate it... --> <#-- replace stuff --> <#assign markup = markup?replace("<RegEx>", "<Replace>", "rmis") /> <#-- regex pattern matching --> <#assign matches = markup?matches("<RegEx>", "rmis") /> <#if matches> <#-- if you have capture groups you can get them with ?groups --> <#list matches?groups as match> <#-- do something with your match, which will contain all the capture groups as a sequence --> </#list> </#if> <#-- whenever you are done, just save stuff back to $markup (or any other variable, the name doesn't matter) and output the modded version --> ${markup}
- Lindsey6 years agoLeader
Hey luk , I tried this solution and I get this error:
For "?replace" left-hand operand: Expected a string or something automatically convertible to string (number, date or boolean), but this has evaluated to a markup_output
I also get an error if I try to convert markup to a string before doing this. How were you able to do this?
- luk6 years agoBoss
Lindsey hard to say from the distance, maybe share the relevant parts of your code?
I noticed that I have a typo in my post above:
<#-- create a variable that holds the original component's markup --> <#assing markup> <@delegate /> </#assign>
should be
<#-- create a variable that holds the original component's markup --> <#assign markup> <@delegate /> </#assign>
of course, but most likely you got that, right?
and you say you get an error even if you directly output the contents of the markup variable, e.g:
<#-- create a variable that holds the original component's markup --> <#assign markup> <@delegate /> </#assign> <#-- add a regular HTML comment for debugging purposes --> <!-- START @override --> ${markup} <!-- END @override --> <#-- if you check the HTML markup of a page where your OOB component is displayed, you should find these comments when inspecting the component with the browser -->
?
This approach ONLY works for OOB components that are overwritten with @override, that means you create a NEW custom component with the EXACT name of the OOB one and postfix it with @override... e.g., <oob.component.name>@override will be the name of the component you put above code in... I assume you did that?
- Lindsey6 years agoLeader
I was doing it for the profile hover card because I was trying to add the "send message" button to it. I'm not sure if this is an OOB component, but I called the file
theme-lib.ui-script.profile-card@override, and as a test I just tried to replace the arrow element with a paragraph saying TEST. Here is my code:<#assign markup> <@delegate /> </#assign> <#assign markup = markup?replace('<i class="lia-fa lia-fa-angle-right"></i>', '<p>TEST</p>') /> ${markup}
This resulted in the error:
For "?replace" left-hand operand: Expected a string or something automatically convertible to string (number, date or boolean), but this has evaluated to a markup_output
Related Content
- 5 years ago
- 6 months ago