我使用Parsedown将我的Markdown转换为HTML,如:
$pd->text('# My First heading');
要自动使用第一个站点标题(h1)作为自定义菜单的条目。我已经看过了源代码,但无法找到一个获得所有标题的好方法。
也许elements
函数中有一些东西。有没有人有想法获得全部或至少第一个标题。
答案 0 :(得分:2)
@托拜厄斯-Redmann公司
无法找到一个获得所有标题的好方法
我认为你已经解决了这个问题。但由于我遇到了同样的问题并提出了答案,我想与那些面临同样问题的人分享一些信息。
获取ToC(目录)w / Parsedown。
<?php
include('Parsedown.php');
class Extension extends Parsedown
{
public $array_line = array();
// Override
protected function blockHeader($Line)
{
// Parse $Line to parent class
$Block = Parsedown::blockHeader($Line);
// Set headings
if(isset($Block['element']['name'])){
$Level = (integer) trim($Block['element']['name'],'h');
$this->array_line[] = [
'text' => $Block['element']['name'],
'level' => $Level,
];
}
return $Block;
}
}
$text = file_get_contents('YourMarkdownFile.md');
$Parsedown = new Extension();
$string_body = $Parsedown->text($text);
$array_ToC = $Parsedown->array_line;
print_r($array_ToC);
//echo $string_body;
首先,正如@ emanuil-rusev所说,覆盖blockHeader
方法,你可以从降价文本中获得所有标题。
更具体地说,当你调用text($text)
方法时,它会解析给定的降价字符串。
在解析时,blockHeader($Line)
方法将使用数组参数(如下所示)调用每一行。
$Line => [
"body" => "# SampleHead",
"indent" => 0,
"text" => "# SampleHead",
]
原始(父母)课程&#39; blockHeader($Line)
方法将$Line
转换为以下数组($Block
)。
$Block => [
"element" => [
"name" => "h1",
"text" => "# SampleHead",
"handler" => "line",
],
]
因此,获取所有标题的最简单方法是每次将这些存储到数组中。
看我的回购: https://github.com/KEINOS/parsedown-extension_table-of-contents
答案 1 :(得分:1)