我有一些降价文件,我想在Laravel开发的博客上显示它们。
所以我想出了这样一个解决方案:
public function display() {
$pd = new Parsedown();
$text = Storage::disk('local')->get('x.md');
$html = $pd->text($text);
$title = "title";
return view('x.y', [
"html" => $html,
"title" => $title
]);
}
<div class="container-fluid">
<div class="row">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title text-center">{{ $title }}</h3>
</div>
<div class="panel-body">
{!! $html !!}
</div>
</div>
</div>
</div>
除table
元素外,它的效果很好:
Parsedown
解析表:
header 1 | header 2
-------- | --------
cell 1.1 | cell 1.2
cell 2.1 | cell 2.2
成:
<table>
<thead>
<tr>
<th>header 1</th>
<th>header 2</th>
</tr>
</thead>
<tbody>
<tr>
<td>cell 1.1</td>
<td>cell 1.2</td>
</tr>
<tr>
<td>cell 2.1</td>
<td>cell 2.2</td>
</tr>
</tbody>
</table>
然后我得到了一张没有引导样式的表,看起来很奇怪。我想得到的是:
<table class="table">
...
</table>
那么,有人可以给我一些建议吗?
答案 0 :(得分:2)
在阅读Parsedown的源代码后,我找到了解决方案。
在blockTable()
方法中:
改变这个:
$Block = array(
'alignments' => $alignments,
'identified' => true,
'element' => array(
'name' => 'table',
'handler' => 'elements'
),
);
为:
$Block = array(
'alignments' => $alignments,
'identified' => true,
'element' => array(
'name' => 'table',
'handler' => 'elements',
'attributes' => [ //+
"class" => "table" //+
] //+
),
);
它将使用table
输出class="table"
元素。
最后,我创建了一个扩展Parsedown
的新类,并使用我自己的实现覆盖了blockTable
方法。
答案 1 :(得分:1)
Parsedown
不支持向生成的元素添加class
。 Parsedown
也不支持将生成的HTML作为XML文档发布。因此,您有两种选择:
preg_replace
替换正则表达式。SimpleXML
(或类似)来解析HTML树并替换元素。由于HTML Parsedown
生成的内容简单,格式良好且可预测,因此可能可以使用preg_replace
。实现看起来像这样:
public function display() {
$pd = new Parsedown();
$text = Storage::disk('local')->get('x.md');
$html = $pd->text($text);
$html = preg_replace('/^\s*<table>\s*$/', '<table class="table">', $html);
$title = "title";
return view('x.y', [
"html" => $html,
"title" => $title
]);
}