Magento CMS syntax – part1

Featured Image

Every Magento user noticed that there is special {{magentocode}} syntax available in cms pages and blocks. We traced a bit to find out which params are available and what exactly they do.

As strange as this may sound, processor class that gets called is Mage_Core_Model_Email_Template_Filter located at app/code/core/Mage/Core/Model/Email/Template/Filter.php .

There are also some interesting directives in superclass Varien_Filter_Template, but if i’m not mistaken, none of them can be used.

There are six replacement codes  that can be used and each triggers its equivalent Directive function:

skinDirective
mediaDirective
htmlescapeDirective
storeDirective
blockDirective
layoutDirective

I’ll start with easier and most commonly used and continue with advanced ones in part two of this article.

1. skinDirective

Description: Used to retrieve path of skin folder and its files, theme fallback respected
Example: {{skin url=’images/image.jpg’ _theme=’blank’}}
Synonym: Mage::getDesign()->getSkinUrl($params[‘url’], $params)
Params:
url = empty or relative file path
_theme = alternative theme, fallbacks if file not exist
_package = alternative package
_area = alternative area(frontend,adminhtml)
_type, _default etc. = nothing useful, somebody please correct me if i’m wrong :)

2. mediaDirective

Description: Used to retrieve path of root/media folder and its files
Example: {{media url=’image.jpg’}}
Synonym: Mage::getBaseUrl(‘media’) . $params[‘url’]
Params:
url = empty or relative file path

3. htmlescapeDirective

Description: Used to escape special html chars
Example: {{htmlescape var='<a href=”www.inchoo.net”>inchoo</a><b>inchoo</b><i>inchoo</i>’ allowed_tags=’b’}}
Synonym: Mage::helper(‘core’)->htmlEscape($params[‘var’], $params[‘allowed_tags’])
Params:
var = string to escape
allowed_tags = comma-separated list of allowed tags

4. storeDirective

Description: Used to build magento routes and custom urls
Example: {{store url=’customer/account’ _query_a=’8′}}
Synonym: Mage::getUrl($params[‘url’], $params);
Params:
url = magento routers url
direct_url = normal url, appended to baseurl
_query_PARAMNAME = adds query param, for example _query_a=’8′ adds a=8 to url
_fragment = adds fragment, for example #comments
_escape = escapes “,’,<,>
custom = if using magento route url param, every custom param added will be appended like /a/8/b/10

I probably missed something in this last one, but it’s very late and i’m tired of poking through Magento ;)

To be continued ..

EDIT: Magento CMS syntax – part2

Interested in hiring us?

Have a chat with us. You would be surprised how small changes can make your business even more successful.


About Ivan Weiler

Technical Educator and Consultant

Ivan is a Technical Educator and Consultant. He gained lots of experience managing some of the most complex Magento projects we had at Inchoo.

Read more posts by Ivan / Visit Ivan's profile

20 comments

  1. Nice post thanks. Does anyone know how to access a product attribute using the var syntax ie {{var product.attribute}}

  2. Hi, all ~

    filter() method in Mage_Core_Model_Email_Template_Filter class

    the filter() method is very useful.
    for example, it is used as below.

    $obj = Mage::getModel(‘core/email_template_filter’);
    echo $obj->filter(‘
    KIM

    ‘);

    OUTPUT is returned to real image path. ^^

  3. Thank you for this. Do you know if this stuff is in any of the Magento books? I know they’re all outdated already, but I find there’s limited magento help in most cases.

  4. Hello, I’m looking for some help… You said the email template syntax is the same as the CMS… oh-oh. I’m not receiving any test emails (transactional, new password, etc.) with variables with dots “.” and equal signs “=” (like {{var subscriber.getConfirmationLink()}}). I tried single and double quotes, underbar and “()” and they’re ok. And I’m using tags with dots and equal signs in CMS pages… Checked encoding, templates, locale… what am I missing?

  5. @Mona: how can if/depend/include/etc directives be used in cms, if i’m not mistaken, they can’t be used ?? or did i missed something ;)

  6. Nice article but you know what you can use Varien_Filter_Template class directives cuz if you can’t you won’t use depend for example but there is a special syntax for everything and you can find the pattern specified in constants in that class ;)

    cheers

  7. I was looking for this today and didn’t see it in this totorial… maybe someone can use it…

    GET BASE URL IN PHP CODE (not in CMS):

    <a href="getUrl(”); ?>help” class=”link-cart”>__(‘Help’); ?>

  8. @David: the email template syntax is exactly the same as the CMS template syntax because the CMS actually uses the email template filter to work. With email you just need to know what variables are available.

  9. That’s great man, Thx. Wiki page is great, don’t know how I missed it before !!

    Hopefully, we’ll provide enough info and examples for other Magento users.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <blockquote cite=""> <code> <del datetime=""> <em> <strike> <strong>. You may use following syntax for source code: <pre><code>$current = "Inchoo";</code></pre>.