Signatur
Beschreibung
CommonMark\Node\Item ist ein Knoten im Abstract Syntax Tree des league/commonmark-Parsers und entspricht einem einzelnen Listenelement, das in HTML als <li> gerendert wird. Er ist stets Kind eines CommonMark\Node\BulletList- oder CommonMark\Node\OrderedList-Knotens.
Über die von CommonMark\Node geerbten Methoden lässt sich der Knoten im AST traversieren, manipulieren oder auslesen. So kann man beispielsweise Kindknoten (z. B. Paragraph, weitere verschachtelte Listen) hinzufügen, entfernen oder ersetzen.
Typische Anwendungsfälle sind das programmatische Erstellen von Listeneinträgen, das Analysieren geparster Dokumente sowie das Transformieren von Markdown-Inhalten in einem eigenen Renderer oder Custom-Extension.
- Kann als Kindknoten
Paragraph-,BulletList- oderOrderedList-Knoten enthalten (verschachtelte Listen). - Wird vom CommonMark-Parser automatisch erzeugt; kann aber auch manuell instanziiert und in einen Listenknoten eingefügt werden.
Beispiele
Listenelement aus geparsten Markdown auslesen
<?php
use CommonMark\Parser;
use CommonMark\Node\Item;
use CommonMark\Node\BulletList;
$parser = new Parser();
$document = $parser->parse("- Erstes Element\n- Zweites Element\n- Drittes Element");
// Ersten BulletList-Knoten finden
$list = null;
foreach ($document->children() as $child) {
if ($child instanceof BulletList) {
$list = $child;
break;
}
}
if ($list) {
foreach ($list->children() as $item) {
if ($item instanceof Item) {
// Ersten Textinhalt des Items ausgeben
echo $item->firstChild->firstChild->getLiteral() . PHP_EOL;
}
}
}
Listenelement programmatisch erstellen und in eine BulletList einfügen
<?php
use CommonMark\Node\Item;
use CommonMark\Node\BulletList;
use CommonMark\Node\Paragraph;
use CommonMark\Node\Text;
use CommonMark\Renderer\HtmlRenderer;
// Neues Listenelement mit Text erzeugen
$item = new Item();
$paragraph = new Paragraph();
$text = new Text();
$text->setLiteral('Neues Element');
$paragraph->appendChild($text);
$item->appendChild($paragraph);
// In eine BulletList einbetten
$list = new BulletList();
$list->appendChild($item);
// Rendern
$renderer = new HtmlRenderer();
echo $renderer->renderNode($list);
// Wichtig · Fallstricke
Die Klasse CommonMark\Node\Item stammt aus der PHP-Extension commonmark (PECL) und ist nicht mit dem Composer-Paket league/commonmark zu verwechseln, das eine reine PHP-Implementierung darstellt. API-Details und Methoden können je nach verwendeter Version leicht abweichen.
Beim manuellen Aufbau eines AST muss die Baumstruktur korrekt eingehalten werden: Item darf nur direkt unterhalb eines BulletList- oder OrderedList-Knotens stehen; andernfalls kann der Renderer ein unerwartetes Ergebnis liefern oder eine Exception werfen.