Use template parameters in a BBCode template

As for localization, when creating a custom BBCode, any token that is not associated with a filter is presumed to be a template parameter. In the following example, we create a BBCode that only outputs its content if a parameter named S_LOGGED_IN is true.

Note that the BBCodes plugin automatically creates template parameters for you.

// We'll create a fake user object for this example
$user = new stdClass;
$user->isLoggedIn = true;

$configurator = new s9e\TextFormatter\Configurator;
$configurator->BBCodes->addFromRepository('COLOR');
$configurator->BBCodes->addCustom(
    '[noguests]{ANYTHING}[/noguests]',
    '<xsl:choose>
        <xsl:when test="$S_LOGGED_IN">
            <div>{ANYTHING}</div>
        </xsl:when>
        <xsl:otherwise>
            <div>Only registered users can read this content</div>
        </xsl:otherwise>
    </xsl:choose>'
);

// Get an instance of the parser and the renderer
extract($configurator->finalize());

$text = '[noguests]Some [color=red]top secret[/color] info[/noguests]';
$xml  = $parser->parse($text);

// Set up the values before rendering
$renderer->setParameter('S_LOGGED_IN', $user->isLoggedIn);

// Render the text
echo $renderer->render($xml);
<div>Some <span style="color:red">top secret</span> info</div>