首頁  >  問答  >  主體

找不到與節點類型對應的渲染器:League\Commonmark + Drupal

我正在嘗試使用 League\Commonmark 2.3.8 和 Drupal 中的擴充功能來渲染 markdown,當我嘗試使用擴充功能進行渲染時,出現以下錯誤:

無法找到節點類型對應的渲染器 League\CommonMark\Node\Block\Document

這是我的程式碼:

class FilterMarkdown extends FilterBase {

  /**
   * @var array The private config array.
   *
   * https://commonmark.thephpleague.com/2.3/configuration/.
   */
  private array $config = [
    // Allow because only the admin has markdown access.
    'html_input' => 'allow',
    'allow_unsafe_links' => false,
  ];

  /**
   * {@inheritdoc}
   */
  public function process($text, $langcode): FilterProcessResult {
    $converter = new MarkdownConverter($this->createEnvironment());

    $converted_text = $converter->convert($text);

    return new FilterProcessResult("$converted_text");
  }

  /**
   * Generate an environment with all the extensions we need.
   */
  private function createEnvironment(): Environment {
    $environment = new Environment($this->config);
    $environment->addExtension(new ExternalLinkExtension());
    $environment->addExtension(new HeadingPermalinkExtension());
    $environment->addExtension(new StrikethroughExtension());
    $environment->addExtension(new TableExtension());

    return $environment;
  }

}

問題與我創建環境的方式有關。我知道這一點是因為我重寫了 process() 如下,降價轉換按預期工作:

public function process($text, $langcode): FilterProcessResult {
    $converter = new CommonMarkConverter($this->config);

    $converted_text = $converter->convert($text);

    return new FilterProcessResult("$converted_text");
  }

我還刪除了所有 addExtension 行並得到了相同的錯誤,所以問題是 new Environment($this->config)

然後我嘗試在沒有配置的情況下進行初始化:new Environment([]),但我仍然遇到相同的錯誤。

那我做錯了什麼?

(Drupal 有一個 markdown 模組,但我無法使用它,因為我要將網站遷移到 Drupal 10 並且該模組不相容。)

P粉144705065P粉144705065251 天前396

全部回覆(1)我來回復

  • P粉642920522

    P粉6429205222024-01-17 10:19:19

    您還需要新增CommonMarkCoreExtensionInlinesOnlyExtension,因為它們為Document 等內容提供解析器和渲染器>段落文字 節點。 (或者,如果您需要更多地控制要包含或排除的語法,您可以自行手動註冊各個解析器和渲染器)。

    回覆
    0
  • 取消回覆