Version 5
supported
How to create a google maps shortcode
To demonstrate how easy it is to build custom shortcodes, we'll build one to display a Google Map based on a provided address. We want our CMS authors to be able to embed the map using the following code:
[googlemap,width=500,height=300]97-99 Courtenay Place, Wellington, New Zealand[/googlemap]
So we've got the address as "content" of our new googlemap
shortcode tags, plus some width
and height
arguments.
We'll add defaults to those in our shortcode parser so they're optional.
// app/_config.php
use SilverStripe\View\Parsers\ShortcodeParser;
ShortcodeParser::get('default')->register('googlemap', function ($arguments, $address, $parser, $shortcode) {
$iframeUrl = sprintf(
'//maps.google.com/maps?q=%s&hnear=%s&ie=UTF8&hq=&t=m&z=14&output=embed',
urlencode($address),
urlencode($address)
);
$width = (isset($arguments['width']) && $arguments['width']) ? $arguments['width'] : 400;
$height = (isset($arguments['height']) && $arguments['height']) ? $arguments['height'] : 300;
return sprintf(
'<iframe width="%d" height="%d" src="%s" frameborder="0" scrolling="no" marginheight="0" marginwidth="0">'
. '</iframe>',
$width,
$height,
$iframeUrl
);
});
You might want to create a simple TinyMCE plugin to provide a nice UI for content authors to add the shortcode to their content.