PhpRiot
Become Zend Certified

Prepare for the ZCE exam using our quizzes (web or iPad/iPhone). More info...


When you're ready get 7.5% off your exam voucher using voucher CJQNOV23 at the Zend Store

Adding your own markups

By adding your own markups, you can add your own functionality to the Zend_Markup renderers. With the markup structure, you can add about any functionality you want. From simple markups, to complicated markup structures. A simple example for a 'foo' markup:

<?php
// Creates instance of Zend_Markup_Renderer_Html,
// with Zend_Markup_Parser_BbCode as its parser
$bbcode Zend_Markup::factory('Bbcode');

// this will create a simple 'foo' markup
// The first parameter defines the markup's name.
// The second parameter takes an integer that defines the markups type.
// The third parameter is an array that defines other things about a
// markup, like the markup's group, and (in this case) a start and end markup.
$bbcode->addMarkup(
    
'foo',
    
Zend_Markup_Renderer_RendererAbstract::TYPE_REPLACE,
    array(
        
'start' => '-bar-',
        
'end'   => '-baz-',
        
'group' => 'inline'
    
)
);

// now, this will output: 'my -bar-markup-baz-'
echo $bbcode->render('my [foo]markup[/foo]');

Please note that creating your own markups only makes sense when your parser also supports it with a markup structure. Currently, only BBCode supports this.

Some renderers (like the HTML renderer) also have support for a 'markup' parameter. This replaces the 'start' and 'end' parameters, and it renders the markups including some default attributes and the closing markup.

Add a callback markup

By adding a callback markup, you can do a lot more then just a simple replace of the markups. For instance, you can change the contents, use the parameters to influence the output etc.

A callback is a class that implements the Zend_Markup_Renderer_TokenInterface interface. An example of a callback class:

<?php
class My_Markup_Renderer_Html_Upper
    
implements Zend_Markup_Renderer_TokenConverterInterface
{

    public function 
convert(Zend_Markup_Token $token$text)
    {
        return 
'!up!' strtoupper($text) . '!up!';
    }

}

Now you can add the 'upper' markup, with as callback, an instance of the My_Markup_Renderer_Html_Upper class. A simple example:

<?php
// Creates instance of Zend_Markup_Renderer_Html,
// with Zend_Markup_Parser_BbCode as its parser
$bbcode Zend_Markup::factory('Bbcode');

// this will create a simple 'foo' markup
// The first parameter defines the markup's name.
// The second parameter takes an integer that defines the markups type.
// The third parameter is an array that defines other things about a
// markup, like the markup's group, and (in this case) a start and end markup.
$bbcode->addMarkup(
    
'upper',
    
Zend_Markup_Renderer_RendererAbstract::TYPE_CALLBACK,
    array(
        
'callback' => new My_Markup_Renderer_Html_Upper(),
        
'group'    => 'inline'
    
)
);

// now, this will output: 'my !up!MARKUP!up!'
echo $bbcode->render('my [upper]markup[/upper]');

Zend Framework