Support other markup
Specialized BBCode
In the following example, we create a [youtube]
BBCode that accepts the ID of a YouTube video and displays it as if it was posted via the MediaEmbed plugin.
$configurator = new s9e\TextFormatter\Configurator;
$configurator->MediaEmbed->add('youtube');
$configurator->BBCodes->add('youtube', ['contentAttributes' => ['id']]);
// Get an instance of the parser and the renderer
extract($configurator->finalize());
$text = '[youtube]-cEzsCAzTak[/youtube]';
$xml = $parser->parse($text);
$html = $renderer->render($xml);
echo $html;
<span data-s9e-mediaembed="youtube" style="display:inline-block;width:100%;max-width:640px"><span style="display:block;overflow:hidden;position:relative;padding-bottom:56.25%"><iframe allowfullscreen="" loading="lazy" scrolling="no" style="background:url(https://i.ytimg.com/vi/-cEzsCAzTak/hqdefault.jpg) 50% 50% / cover;border:0;height:100%;left:0;position:absolute;width:100%" src="https://www.youtube.com/embed/-cEzsCAzTak"></iframe></span></span>
Generic BBCode
In the following example, we create a generic [video]
BBCode that accepts a single URL and processes it through the MediaEmbed plugin.
$configurator = new s9e\TextFormatter\Configurator;
$configurator->MediaEmbed->add('youtube');
$configurator->BBCodes->add(
'video',
[
'contentAttributes' => ['url'],
'tagName' => 'MEDIA'
]
);
// Get an instance of the parser and the renderer
extract($configurator->finalize());
$text = '[video]http://www.youtube.com/watch?v=-cEzsCAzTak[/video]';
$xml = $parser->parse($text);
$html = $renderer->render($xml);
echo $html;
<span data-s9e-mediaembed="youtube" style="display:inline-block;width:100%;max-width:640px"><span style="display:block;overflow:hidden;position:relative;padding-bottom:56.25%"><iframe allowfullscreen="" loading="lazy" scrolling="no" style="background:url(https://i.ytimg.com/vi/-cEzsCAzTak/hqdefault.jpg) 50% 50% / cover;border:0;height:100%;left:0;position:absolute;width:100%" src="https://www.youtube.com/embed/-cEzsCAzTak"></iframe></span></span>
XenForo-style BBCode
$configurator = new s9e\TextFormatter\Configurator;
$configurator->MediaEmbed->add('youtube');
$configurator->BBCodes['MEDIA']->defaultAttribute = 'site';
$configurator->tags['MEDIA']->filterChain
->prepend('handleXenForoTag')
->resetParameters()
->addParameterByName('tag')
->addParameterByName('parser');
function handleXenForoTag($tag, $parser)
{
if (!$tag->hasAttribute('site') || !$tag->hasAttribute('url'))
{
return;
}
$tag->invalidate();
$tagPos = $tag->getPos();
if ($tag->getEndTag())
{
$tagLen = $tag->getEndTag()->getPos() + $tag->getEndTag()->getLen() - $tagPos;
}
else
{
$tagLen = $tag->getLen();
}
$tagName = strtoupper($tag->getAttribute('site'));
$parser->addSelfClosingTag($tagName, $tagPos, $tagLen)
->setAttribute('id', $tag->getAttribute('url'));
}
// Get an instance of the parser and the renderer
extract($configurator->finalize());
$text = '[media=youtube]-cEzsCAzTak[/media]';
$xml = $parser->parse($text);
$html = $renderer->render($xml);
echo $html;
<span data-s9e-mediaembed="youtube" style="display:inline-block;width:100%;max-width:640px"><span style="display:block;overflow:hidden;position:relative;padding-bottom:56.25%"><iframe allowfullscreen="" loading="lazy" scrolling="no" style="background:url(https://i.ytimg.com/vi/-cEzsCAzTak/hqdefault.jpg) 50% 50% / cover;border:0;height:100%;left:0;position:absolute;width:100%" src="https://www.youtube.com/embed/-cEzsCAzTak"></iframe></span></span>