2

我想为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;
        }

}   

但这不起作用。

4

3 回答 3

1

我不太确定您的代码有什么问题,因为您的代码与我的匹配。我只是添加了

'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',
                ),
            ),
        );

这对我来说很好。但这对你来说似乎是一样的,减去表响应。

你用的是什么版本?

于 2016-05-28T05:28:55.650 回答
1

我知道这是 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;

    }
于 2021-06-23T07:44:15.647 回答
0

我在 symfony 演示应用程序中遇到了完全相同的问题。最后发现不是 parsedown,因为输出被 html-sanitizer 清理了。允许表的类属性解决了这个问题。

对于 symfony 4 演示应用添加到config/packages/html_sanitizer.yaml

html_sanitizer:
  #[...]
  sanitizers:
    default:
      # [...]
      tags:
        table:
          allowed_attributes:
           - "class"
于 2019-07-11T09:14:16.910 回答