我想为 Parsedown 编写一个扩展,以便我可以为每个表标签添加一个默认类。 我发现我可以通过在blockTable
函数中添加行来分配属性(大约第 870 行)来成功破解源代码:
$Block = array(
'alignments' => $alignments,
'identified' => true,
'element' => array(
'name' => 'table',
'handler' => 'elements',
'attributes' => array(
'class' => 'table',
),
),
);
但是,如果我尝试松散地遵循更改元素标记扩展教程,则不成功(可能是因为表解析可能是一个迭代过程,而教程中的示例是简单的字符串替换。
我试过:
class Extension extends Parsedown
{
protected function blockTable($Line, array $Block = null)
{
$Block = parent::blockTable($Line, array $Block = null);
$Block['table']['attributes']['class'] = 'table';
return $Block;
}
}
但这行不通。
我不太确定你的代码有什么问题,因为你的代码与我的代码相匹配。我只是简单地添加了
'attributes' => array(
'class' => 'table table-responsive'
),
识别表,在第 850 行,使其变为
$Block = array(
'alignments' => $alignments,
'identified' => true,
'element' => array(
'name' => 'table',
'handler' => 'elements',
'attributes' => array(
'class' => 'table table-responsive',
),
),
);
这对我来说很好用。但这对您来说似乎是一样的,减去表响应。
您使用的是哪个版本?
这是一个非常古老的问题,5 年 3 个月前问过,但我在谷歌搜索中遇到了这个答案,所以认为用输出表类的代码回答是值得的。
class Extension extends Parsedown {
protected function blockTable($Line, ?array $Block = null)
{
$Block = parent::blockTable($Line, $Block);
if(is_null($Block)){ return; }
$Block['element']['attributes']['class'] = 'table table-responsive';
return $Block;
}
我在symfony演示应用程序中遇到了完全相同的问题。最后事实证明它不是解析,因为输出是由 html-sanitizer 清理的。允许表的类属性解决了这个问题。
对于symfony 4演示应用程序,添加到config/packages/html_sanitizer.yaml
:
html_sanitizer:
#[...]
sanitizers:
default:
# [...]
tags:
table:
allowed_attributes:
- "class"