я использую jBBCode для разбора кодов bb.
Я хочу расширить класс CodeDefinition, чтобы написать свой собственный asHtml функционировать как в примере в документация.
MyTag (см. фрагмент кода) может иметь опцию, а может и не иметь. И если нет никого, я хочу, чтобы это стало значением по умолчанию.
Но я должен сделать setUseOption () сказать jBBCode, требует ли мой тег опцию или нет. Это может быть только правдой или ложью.
Если я установлю правда, затем [mytag]without option[/mytag]
не удается продолжить.
Если я установлю ложный, [mytag=value]with option[/mytag]
выходит из строя.
Есть ли способ разрешить использование тегов как с опцией, так и без нее? То есть сделать опцию необязательной.
И установить для него значение по умолчанию?
Я не нашел этого в документация.
Фрагмент кода:
<?php
class MyTag extends JBBCode\CodeDefinition {
public function __construct()
{
parent::__construct();
$this->setTagName("mytag");
$this->setUseOption(true);
}
...
Взгляните на определения для bb-кодов url и img по умолчанию в DefaultCodeDefinitionSet.php. Они предоставляют необязательные аргументы, дважды определяя bbcode:
/* [url] link tag */
$builder = new CodeDefinitionBuilder('url', '<a href="{param}">{param}</a>');
$builder->setParseContent(false)->setBodyValidator($urlValidator);
array_push($this->definitions, $builder->build());
/* [url=http://example.com] link tag */
$builder = new CodeDefinitionBuilder('url', '<a href="{option}">{param}</a>');
$builder->setUseOption(true)->setParseContent(true)->setOptionValidator($urlValidator);
array_push($this->definitions, $builder->build());
Затем анализатор позаботится о сопоставлении экземпляров bbcode с соответствующим определением.
Других решений пока нет …