Useful Keyword Modifiers
Last Updated: 25 Jul 2023
Below is a collection of examples of different ways keyword modifiers can be used. If you have a handy keyword modifier you would like to add to the list, be sure to let us know.
Word play
Print ellipsis symbol if a block of text exceeds maximum number of words or characters
//max characters
%asset_metadata_description^maxchars:20^trim%%asset_metadata_description^charcount^gt:20:…:%
 
//max words
%asset_metadata_description^maxwords:5^trim%%asset_metadata_description^wordcount^gt:5:…:%Max charcount result:  The quick brown fox jumped over the lazy dog  =>  The quick brown fox… 
Max wordcount result:  The quick brown fox jumped over the lazy dog  =>  The quick brown fox jumped… 
Print a semicolon separated list from a matrix value (such as checkbox, select field, multiple text metadata fields) into a ordered or un-ordered list, but only if it is not empty
%asset_metadata_keywords^replace:;:</li><li>^tagif:li^tagif:ul%Original:  Value 1; Value 2; Value 3 
Result:  <ul><li>Value 1</li><li>Value 2</li><li>Value 3</li></ul> 
Number play
Calculate 10% GST of a product price and price without GST
//GST
%item_price^number_format:2^divide:11^number_format:2%
//price excluding GST
%item_price^number_format:2^divide:11^multiply:10^number_format:2%GST result: 110.00 => 10.00
Price excluding GST result: 110.00 => 100.00
Simple padding
Pad to two digits: Adds an extra '0' in front if the number is only one digit.
%asset_metadata_number^charcount^eq:1:0:%%asset_metadata_number%Regular Expression Replacements
Print the file extension of any file asset
%asset_name^replace:.*\.: %Result: document.pdf => pdf
Extract any parameter value from a URL
%asset_metadata_youtube^replace:.*v=:^replace:&.*:%Result: http://www.youtube.com/watch?v=5B-Es5-CjFg&feature=youtube_gdata => 5B-Es5-CjFg
Print the page number outside of an asset listing, conditionally
%globals_server_QUERY_STRING^contains:_result_page:Page : %%globals_server_QUERY_STRING^replace:.*_result_page=:^replace:&.*:%Result: http://www.squiz.net/asset-listing?result_15168_result_page=2 =>  Page 2 
Escape percentages from keyword value
%asset_name^replace:25:TW3NTYF1V3^urlencode^replace:.25:%^urldecode^replace:TW3NTYF1V3:25%Result: %some_matrix_keyword% => %some_matrix_keyword%
Replace all white space occurrences (including new lines) with a single space
%asset_metadata_description^replace:\s: %Result: Some description 
 with line break =>  Some description with line break  .
Or, to condense all white space:
%asset_metadata_description^replace:\s+: %Strip HTML but retain spaces between paragraphs and line breaks
%asset_metadata_description^replace:(<\/p>|<br\/?>):\1 ^striphtml%Result: Line 1.
Line 2. =>  Line 1. Line 2.  . If necessary, cater for other elements like h[1-6]
Print your site path without the domain
<MySource_PRINT id_name="__global__" var="current_asset" keyword="asset_url^replace:((.)*\.\D{2,3}):/" />This will take all characters up until it reaches a period character, followed by characters of length 2 to 3 ( .com.au , .net , etc) and replace them with the / character. Please note that if any of your webpages contain a period in the page directory (such as /example.page/ ), this will not work.
Result: http://www.example.com.au/newpage/test-page => /newpage/test-page
Print a schema relative path for an asset URL
%globals_asset_url^replace:.*\/\/://%Result https://www.site.com/page => //www.site.com/page
Remove certain parts of a URL (including colon)
This trick uses the hexadecimal representation of a character, in this case colon: "\x3A".
First group matches "http://" or "https://". Second group matches everything after the domain (first slash).
%asset_url^replace:(https?\x3A\/\/)|(\/.*):%Using colon in a time stamp
Instead of having a separate keyword replacement for each part of the date format, use a different divider (eg =), then replace the url-encoded value.
%globals_asset_created^date_format:H=i=s^urlencode^replace:3D:3A^urldecode%Using colon in ^eq:: return value
Uses the base64 value for colon (Og==).
%globals_asset_assetid^neq:1:Og==^base64decode% Return the first or last word (even if hyphenated) from a string
%asset_name%                   ==>  John-Paul Syriatowicz
%asset_name^replace:(\s).*$:%  ==>  John-Paul
%asset_name^replace:.*(\s):%   ==>  Syriatowicz
Remove the last or first character of a string
%asset_name%                               ==>  ABC
%asset_name^replace:.$:%                   ==>  AB
%asset_name^reverse^replace:.$:^reverse%   ==>  BC
Miscellaneous
Print different asset value depending on asset type (parse file example)
<MySource_PRINT var="asset_type^replace_keywords:contains:Redirect:{redirect_url}:{asset_url}" />Redirect pages will print redirect_url keyword value.
All other pages will print asset_url keyword value.
List out current asset contents with it’s own paint layout
When using %asset_contents% keyword replacement in an asset listing, be sure to use the following to ensure it is painted with it’s own paint layout:
%asset_assetid^as_asset:asset_contents%Output 'checked="checked"' if asset ID is in a comma-separated list of IDs
This one his handy if you need to store multiple asset IDs in a single metadata field, and then spit them out in a form
%globals_user_metadata_feed_subscriptions^replace_keywords:replace:.*\b{asset_assetid}\b.*:\1^replace_keywords:eq:{asset_assetid}:checked="checked"%Use metadata of homepage if current page metadata is empty
Use case: Custom background images on children pages which are different to the home page. If not custom image set, use the homepage image.
%globals_asset_metadata_setting.background.image^as_asset:asset_url^replace_keywords:empty:{globals_site_index_id^as_asset:asset_metadata_setting.background.image^as_asset:asset_url}%Get current URL
If %globals_asset_url% isn't what you want, try one of:
%globals_site_url%
// these may change behaviour based on server configuration
%globals_server_HTTPS^eq:on:https:http%://%globals_server_HTTP_HOST%%globals_server_REQUEST_URI%
%globals_server_HTTPS^eq:on:https:http%://%globals_server_SERVER_NAME%%globals_server_REQUEST_URI% Print dynamic value depending on if you are on the homepage or not
//Up to version 5.4.2.2:
%globals_asset_assetid^replace:{globals_site_assetid}|{globals_site_index_id}:H^eq:H:home:inside%
//From version 5.4.3.0 and up:
%frontend_asset_is_homepage^eq:1:home:inside%
Change the name of the commit button on Asset Builders
Change "Commit" to whatever the commit button's value is in your system.
%commit_button_clean^replace:Commit:Submit Comment%