Signatur
Beschreibung
CommonMark\Node\OrderedList ist ein Knoten-Typ in der PHP-Erweiterung commonmark und steht für eine nummerierte Liste im Abstract Syntax Tree (AST) eines CommonMark-Dokuments. Ein solches Listenelement entsteht, wenn Markdown-Text wie 1. Erster Punkt\n2. Zweiter Punkt geparst wird.
Die Klasse erbt von CommonMark\Node und bietet damit Zugriff auf alle Standard-Knoten-Operationen wie das Traversieren von Kindelementen (firstChild, lastChild, next, previous) sowie das Einfügen und Entfernen von Knoten. Als direktes Kind enthält ein OrderedList-Knoten typischerweise eine oder mehrere Instanzen von CommonMark\Node\Item.
Wichtige Eigenschaften sind tight (gibt an, ob die Liste eng gesetzt ist) sowie delimiter (definiert, ob der Listenmarker ein Punkt . oder eine Klammer ) ist) und start (die Startnummer der Liste, üblicherweise 1). Diese Eigenschaften können gelesen und gesetzt werden, um das Rendering zu beeinflussen.
Die Klasse ist besonders nützlich, wenn man CommonMark-Dokumente programmatisch analysiert, transformiert oder neu aufbaut – etwa um die Startnummer einer nummerierten Liste zu ändern oder Listenelemente dynamisch hinzuzufügen und zu entfernen.
Beispiele
Nummerierte Liste aus Markdown parsen und Knoten inspizieren
<?php
use CommonMark\Parser;
use CommonMark\Node\OrderedList;
use CommonMark\Node\Item;
$parser = new Parser();
$document = $parser->parse("1. Erster Punkt\n2. Zweiter Punkt\n3. Dritter Punkt");
// Durch alle Knoten des Dokuments iterieren
$walker = $document->walker();
while ($event = $walker->next()) {
$node = $event->getNode();
if ($node instanceof OrderedList && $event->isEntering()) {
echo "Geordnete Liste gefunden!" . PHP_EOL;
echo "Startnummer: " . $node->start . PHP_EOL;
echo "Trennzeichen: " . $node->delimiter . PHP_EOL;
echo "Eng gesetzt (tight): " . ($node->tight ? 'ja' : 'nein') . PHP_EOL;
}
}
Programmatisch eine nummerierte Liste erstellen und rendern
<?php
use CommonMark\Node\Document;
use CommonMark\Node\OrderedList;
use CommonMark\Node\Item;
use CommonMark\Node\Paragraph;
use CommonMark\Node\Text;
use CommonMark\HtmlRenderer;
$document = new Document();
$list = new OrderedList();
$list->start = 3; // Liste beginnt bei 3
$list->tight = true;
foreach (['Dritter Punkt', 'Vierter Punkt', 'Fünfter Punkt'] as $text) {
$item = new Item();
$paragraph = new Paragraph();
$paragraph->appendChild(new Text($text));
$item->appendChild($paragraph);
$list->appendChild($item);
}
$document->appendChild($list);
$renderer = new HtmlRenderer();
echo $renderer->renderDocument($document);
// Wichtig · Fallstricke
Erweiterung erforderlich: Die Klasse ist Teil der PECL-Erweiterung commonmark und steht nicht in der PHP-Standardbibliothek zur Verfügung. Die Erweiterung muss separat installiert werden (pecl install commonmark).
Eigenschaftszugriff: Die Eigenschaften start, tight und delimiter sind direkt als Objekt-Eigenschaften zugänglich, nicht über Getter-/Setter-Methoden. Ungültige Werte bei delimiter können zu unerwartetem Verhalten beim Rendering führen – zulässige Werte sind . (Punkt) und ) (Klammer).
Tight-Modus: Eine als tight markierte Liste erzeugt beim Rendern keine <p>-Tags um den Inhalt der Listenelemente. Dies beeinflusst maßgeblich das HTML-Ausgabeformat.